问题描述
计算一篇英文文章里26个英文字母的状态转移矩阵,以及这篇文章含有的信息熵
(一)问题分析
-
首先统计文章里字母总数
-
计算状态转移矩阵P
把a字母后面出现a的概率记为aa,即a后面出现a的个数÷a的总个数,则矩阵P表示为:
aa ab ac … az
ba bb bc … bz
…
za zb zc … zz -
求该矩阵对应特征向量C
即求解 ( P T − E ) X = 0 (P^T-E)X=0 (PT−E)X=0的非0解(正常情况下只有一个,即该矩阵的秩为25,原矩阵 r a n k ( P ) = 26 rank( P)=26 rank(P)=26),再归一化 -
计算信息熵 H ∞ = C ∗ H ( P ) H_{\infty}=C*H(P) H∞=C∗H(P)
(二)问题求解
1.统计字母总数
- 满意:通过编程实现了对任意一篇英文文章的自然语言熵的计算
- 不足:没有考虑非英文字符串的情况,情况考虑不全面
//C++ 统计字母总数
#include <iostream>
using namespace std;
int main() {
char ch;
char s_letter[26]={
'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'