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;
}
Но выходит что энтропия файла с пробелами больше чем энтропия файла без пробелов. Не знаю почему ....