用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);
编程图片
    

结果:

   

      以上是一个简单的程序,大家也可以加入数据库,对标点符号,汉字,特殊字符进行计算,也可以设置成表单输入!
       我的演示就到这里,有什么不足还请大家提出!

时间: 2024-10-18 01:33:13

用PHP简单计算信源熵的相关文章

Python中的简单计算

Python中的简单计算 (1)基本的加减乘除 >>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5  1.6 (2)除法总是会返回一个浮点数,想要返回整数,需要用"//"来表示(floor division),另外,可以用"%"进行取余操作 >>> 17 / 3  # classic division ret

HDU 1038[Biker&#39;s Trip Odometer]简单计算

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1038 题目大意:给轮子直径,转数,时间.要求输出走过的距离和时速(mile为单位) 关键思想:纯算 代码如下: #include <iostream> using namespace std; #define pi 3.1415927 int main(){ double d,r,t,l; int cnt=1; while(cin>>d>>r>>t&&a

SDUT OJ 2616 简单计算

简单计算 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 某天,XX 给YY 出了一道题,题目是: 给出n 个十进制的数,找出这n 个数的二进制表示中1 的个数最少的数. 由于YY 的计算能力很差,所以他想让你帮他写个程序来计算出来. 输入 输入的第一行为一个正整数T(1 ≤T≤20),代表测试数据组数. 对于每组测试数据: 输入的第一行为一个正整数n (1 ≤ n ≤105): 第二行为n 个正整数A1.A2.… .An(1

Date()日期简单计算

/** * 判断是否为闰年 * @param year * @return */ public boolean isLeap ( int year ) { if ( (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) return true; else return false; } /** * 判断某年某月总天数 * @param year * @param month * @return */ public int get

数论 --- 简单计算

Power of Cryptography Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18018   Accepted: 9090 Description Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. W

简单计算字符串的高度

计算字符串的高度有很多种,这里写下最常用的简单计算字符串的高度 // // NSString+NSStringExt.h // UIFontSize // // Created by mac on 15/11/14. // Copyright (c) 2015年 叶炯. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface NSString (NSSt

一个Nodejs的简单计算测试程序

测试目的: 1 测试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = 0; i < 10; i++) { info = ""; for(j = 0; j < 10; j++) { a[i,j] = i + j; util.print(util.format('%d', a[i, j])); util.print(' '); } console.

读书-算法《程序设计导引及在线实践》-简单计算题2:棋盘上的距离

题目:棋盘上的距离 求国际象棋中王.后.车.象从起始位置到目标位置所需的最少步骤. 行走规则如下: 王:横.竖.斜都可以走,但每步只能走一格. 后:横.竖.斜都可以走,但每步格数不限. 车:横.竖都可以走,不能斜着走,每步格数不限. 象:只能斜着走,格数不限. 我没有下过国际象棋,但题目中这四种角色的行走规则.把题目翻译一下,在一个8*8 的矩阵里面,按照给定的规则从一个点到另一个点的最近路径,好像也不用翻译,题目就是这么说的. 代码实现如下: #include <stdio.h> #incl

csps模拟9495凉宫春日的忧郁,漫无止境的八月,简单计算,格式化题解

题面:https://www.cnblogs.com/Juve/articles/11767239.html 94,95的T3都没改出来,是我太菜了... 凉宫春日的忧郁: 比较$x^y$和$y!$的大小,如果打高精会T掉 正解:把两个数取log,则$log_2x^y=ylog_2x$,$log_2y!=\sum\limits_{i=1}^{y}log_2i$ 然后就A了 1 #include<iostream> 2 #include<cstdio> 3 #include<c