此方法计算字母的熵。计算熵,为 每个字母,计算频率计数的比率(比如说p) 写入所有字母的总频率计数。然后,计算 以下值:p * Math.log(1 / p)。返回值的总和,舍入 到最接近的整数值。
public int computeEntropy() {
int FreqCount = 0;
double sum = 0;
char[] O = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(int k = 0; k < O.length; k++) {
if(FreqCount > 0) {
FreqCount = 0;
}
for(int j = 0; j < N.size(); j++) {
for(int i = 0; i < N.get(j).length(); i++) {
if(O[k] == N.get(j).charAt(i) || Character.toUpperCase(O[k]) == N.get(j).charAt(i)) {
FreqCount++;
}
else
FreqCount += 0;
}
}
p = FreqCount/RawCount;
sum += p * Math.log (1 / p);
return (int)sum;
}
我已经获得了String的ArrayList(N),它是由空格分隔的单词。 我测试了这种方法,但仍无法得到正确的答案。此方法的描述位于顶部。有人能帮助我吗?