Энтропия это величина, вычисляемая по формуле:
Нажмите для просмотра прикрепленного файла
где P(xi) - вероятность появления символа xi в сообщении,
ni - число символов в сообщении объемом n.
Вопрос первый.
Я верно все записал, т.е. энтропия так считается ? Второй вопрос, пишу программу для подсчета :
#include <stdio.h>
#include <string.h>
#include <math.h>
double get_count (char x[], char c){
int i;
double res=0;
for (i=0; i<=strlen(x); i++) if (x[i]==c) res+=1;
return res;
}
double prob (char x[], char c){
return get_count(x,c) / strlen(x);
}
double coeff_entropy (char x[]) {
int i;
double res=0;
for (i=0; i<=strlen(x); i++) {
res+= prob(x,x[i]) * log2(prob(x,x[i]));
}
res=res*(-1);
return res;
}
int main () {
char s[80];
printf("Entropy\n Enter text...\n");
scanf("%s",&s);
printf("Entropy [s] = %f", coeff_entropy(s));
return 0;
}
выдается какой-то бред.
Для сообщения
1111111111111211111111
выдается энтропия 1.750737
а для 1234567890 -
3.654121
мне кажется результат не верен.
т.к. вторая строка гораздо больше уменьашет степень неопределенности...
где я ошибся ?