Shannon Entropy

Не получается корректно вычислить энтропию файла
Чтение файла

private static String readUsingBufferedReader(String fileName) throws IOException {
        BufferedReader reader = new BufferedReader( new FileReader(fileName));
        String line = null;
        StringBuilder stringBuilder = new StringBuilder();
        String ls = System.getProperty("line.separator");
        while( ( line = reader.readLine() ) != null ) {
            stringBuilder.append( line );
            stringBuilder.append( ls );
        }
        stringBuilder.deleteCharAt(stringBuilder.length()-1);
        return stringBuilder.toString();
    }


Вычисление энтропии

public static double getEntropy (String s) {
        int n = 0;
        Map<Character, Integer> occ = new HashMap<>();
        for (int c_ = 0; c_ < s.length(); ++c_) {
            char cx = s.charAt(c_);
            if (occ.containsKey(cx)) {
                occ.put(cx, occ.get(cx) + 1);
            } else {
                occ.put(cx, 1);
            }
            ++n;
        }
        double e = 0.0;
        for (Map.Entry<Character, Integer> entry : occ.entrySet()) {
            char cx = entry.getKey();
            double p = (double) entry.getValue() / n;
            e += p * (Math.log(p) / Math.log(2));
        }
        return -e;
    }

Но выходит что энтропия файла с пробелами больше чем энтропия файла без пробелов. Не знаю почему ....

Ответы (0 шт):