用PHP簡單計算信源熵

要求:對於各定的信源計算其中各個字母以及空格出現的次數,概率,信源熵!

        首先在大腦裏構思編輯過程要用到哪些具體的函數功能等等,然後自己現在紙上畫一畫,好的根據求信源熵的公式
E(X)=-p(xi)log2 p(xi)(i=1,2,..n) 可以得到如下編碼過程!
        <?php
//所給定字母
$String = 'qwertyuioplkjhgfdsazxcvbnmdgjdoqoiAznicguyfgvfpqopq   llxkzmjscnjd nvhfhuwrty';
//需要匹配的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,'&nbsp&nbsp&nbsp概率:',$res=substr($gai, 0,6);  
}
$bla=0;
echo '</br>','&nbsp&nbsp&nbsp空格的個數:',substr_count($String," "),'&nbsp&nbsp&nbsp概率:',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);
編程圖片
    wKioL1db1MOTFLHrAABwiJjzZHs881.png-wh_50

結果:

   wKiom1db093DI_ciAABCBbm9ZsM304.png-wh_50

      以上是一個簡單的程序,大家也可以加入數據庫,對標點符號,漢字,特殊字符進行計算,也可以設置成表單輸入!
       我的演示就到這裏,有什麼不足還請大家提出!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章