用PHP简单计算信源熵
要求:对于各定的信源计算其中各个字母以及空格出现的次数,概率,信源熵!
首先在大脑里构思编辑过程要用到哪些具体的函数功能等等,然后自己现在纸上画一画,好的根据求信源熵的公式
E(X)=-p(xi)log2p(xi)(i=1,2,..n)可以得到如下编码过程!
<?php
//所给定字母
$String='qwertyuioplkjhgfdsazxcvbnmdgjdoqoiAznicguyfgvfpqopqllxkzmjscnjdnvhfhuwrty';
//需要匹配的26个英文字母
$ZhiMu='abcdefghijklmnopqrstuvwxyz';
//匹配字母
preg_match_all("/[a-zA-Z]{1}/",$String,$arrAl);
$p=0;
$xin=0;
substr_count($String,"");//空格个数
for($i=0;$i<strlen($ZhiMu);$i++){//循环遍历26个字母,也就是一个一个字母比对
$num=0;
$s=$ZhiMu{$i};//得到要比对的字母
$b=0;//初始化字母次数为0
$gai=0;//初始化概率为0
$res=0;
count($arrAl[0]);
for($j=0;$j<strlen($String);$j++){//循环遍历要比对的字符串,也就是从头开始一个一个比对
if($s==$String{$j}){//如果两个字母相同
$b+=1;//次数加上1
}
}
$num=count($arrAl[0])+substr_count($String,"");
$gai=$b/$num;//各个字母出现的概率
//输出结果
echo'</br>',$ZhiMu{$i},'出现的次数是:',$b,'   概率:',$res=substr($gai,0,6);
}
$bla=0;
echo'</br>','   空格的个数:',substr_count($String,""),'   概率:',substr(substr_count($String,"")/$num,0,6);
$bla=substr(substr_count($String,"")/$num,0,6);
$p=-(($gai)*(log($gai)/log(2))+log($bla)/log(2));
echo'</br>',"字母跟空格个数之和:",$num,"<br/>",'信源熵:',"E(X)=",$xin=substr($p,0,6);
编程图片:
结果:
以上是一个简单的程序,大家也可以加入数据库,对标点符号,汉字,特殊字符进行计算,也可以设置成表单输入!
我的演示就到这里,有什么不足还请大家提出!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。