输入值
M表示为两条以空格分隔的整数行的矩阵。每条线将具有相同数目的整数,并且每个整数将是-1或1为至多20每行的整数的数目 M因此将2通过n其中n在每两行的整数的个数。
您的代码应该是完整的程序。并接受标准输入或来自文件的输入(您可以选择)。您可以接受标准输入,文件输入或仅作为参数输入。但是,如果您选择后者,请给出一个代码示例,以明确说明该代码如何工作,并记住它必须是一个完整的程序,以及矩阵M将如何在输入中表示。换句话说,您可能必须进行一些解析。
输出量
所述二进制信息熵的分布M*x,其中的元素x均匀地和独立地选自{-1,1}选择。 x是一个n三维列向量。
离散概率分布的熵为
- sum p_i log_2(p_i)
在这种情况下,p_i是的概率i个独特的可能M*x。
示例和有用的提示
作为一个工作示例,让矩阵M为
-1 1
-1 -1
现在来看所有2^2可能的向量x。对于每一个,我们计算M*x所有结果并将其放入一个数组(2分量向量的4元素数组)中。尽管对于这四个向量中的每个向量,其出现的概率为1/2^2 = 1/4,但我们仅对每个唯一的结果向量M*x出现的次数感兴趣,因此,我们总结了导致相同的唯一向量的配置的各个概率。换句话说,可能的唯一M*x向量描述了我们正在研究的分布的结果,并且我们必须确定这些结果中的每一个的概率(根据构造,该概率始终是1/2^2或通常是的整数倍1/2^n),计算熵。
在一般n情况下,取决于can M的可能结果,其M*x范围从“所有不同”(在这种情况下,我们具有in的n值,每个值等于)到“所有相同”(在这种情况下,可能存在一个结果)。ip_ip_i1/2^np_1 = 1
具体来说,对于上述2x2矩阵,M我们可以通过将其乘以四个可能的配置([+-1; +-1])来发现,每个结果向量都是不同的。因此,在这种情况下,有四个结果p_1 = p_2 = p_3 = p_4 = 1/2^2 = 1/4。回顾log_2(1/4) = -2我们有:
- sum p_i log_2(p_i) = -(4*(-2)/4) = 2
因此,此矩阵的最终输出为2。
测试用例
输入:
-1 -1
-1 -1
输出:
1.5
输入:
-1 -1 -1 -1
-1 -1 -1 -1
输出:
2.03063906223
输入:
-1 -1 -1 1
1 -1 -1 -1
输出:
3
x多少?2.为了使问题变得独立,如何Mx定义二进制香农熵?