我正在尝试使用以下Java函数计算英语的熵

public static void calculateEntropy()
    {
        for(int i = 0; i < letterFrequencies[i]; i++)
        {
            entropy += letterFrequencies[i] * (Math.log(letterFrequencies[i])/Math.log(2));
        }
        entropy *= -1;
    }


我正在使用的公式要求对数为2,但Java仅具有自然对数和对数为10。我正在尝试使用对基本公式的更改来获取letterFrequencies [i]的对数2。我不知道我是否正确地实现了它,因为我期望得到一个接近于4.18的答案,但是却得到了大约.028

最佳答案

问题出在for的停止状态:

i < letterFrequencies[i]应该是i < letterFrequencies.length

此外,我将使用Guava's DoubleMath.log2() method,它已根据@LutzL建议进行了优化。

09-11 20:04