![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
(из лекции)
Энтропия это величина, вычисляемая по формуле: ![]() где 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 мне кажется результат не верен. т.к. вторая строка гораздо больше уменьашет степень неопределенности... где я ошибся ? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Олег, у тебя тут есть просто ошибки... Смотри:
for (i=0; i<=strlen(x); i++) if (x[i]==c) res+=1;
Это тебе что, Паскаль? Если i = strlen(x), то это - зевершающий нулевой символ строки, по идее он не должен считаться, это же НЕ информация... У меня он как раз не считается. Попробуй подправить везде, может это дает разброс результатов?Во, и я о том же ![]() |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 6:00 |