香农熵:对信息的度量化。计算公式为:
Java实现一个字符串的信息熵(香农熵)计算,代码如下:
import java.util.Scanner;
//计算香农熵
//计算香农熵
public class Main {
public static double Entropy(String str) {
double H = 0.0;
int sum =0;
int[] letter = new int[26];
str = str.toUpperCase();
for(int i=0;i<str.length();i++) {
char c= str.charAt(i);
if(c >='A'&&c<='Z') {
letter[c-'A']++;
sum++;
}
}
for(int i=0;i<26;i++) {
double p =1.0*letter[i]/sum;
if(p>0) {
H+=-(p*Math9.log(p)/Math.log(2));
}
}
return H;
}
public static double Entropy(String str) {
double H = 0.0;
int sum =0;
int[] letter = new int[26];
str = str.toUpperCase();
for(int i=0;i<str.length();i++) {
char c= str.charAt(i);
if(c >='A'&&c<='Z') {
letter[c-'A']++;
sum++;
}
}
for(int i=0;i<26;i++) {
double p =1.0*letter[i]/sum;
if(p>0) {
H+=-(p*Math9.log(p)/Math.log(2));
}
}
return H;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
String str =read.next();
double H = Entropy(str);
System.out.println(H);
}
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
String str =read.next();
double H = Entropy(str);
System.out.println(H);
}
}