![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
(из лекции)
Энтропия это величина, вычисляемая по формуле: ![]() где P(xi) - вероятность появления символа xi в сообщении, ni - число символов в сообщении объемом n. Вопрос первый. Я верно все записал, т.е. энтропия так считается ? Второй вопрос, пишу программу для подсчета :
выдается какой-то бред. Для сообщения 1111111111111211111111 выдается энтропия 1.750737 а для 1234567890 - 3.654121 мне кажется результат не верен. т.к. вторая строка гораздо больше уменьашет степень неопределенности... где я ошибся ? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
1. самое важное - log2 в mingw считает что-то другое... у меня после замены на
Цитата #define LOG2TO10 0.30102999566398119521373889472449 совсем другой результат получился. ты генерируешь массив, p_count, в котором по индексу i записанно число посвторений символа с кодом i в тексте. (функция set_p) и дальше проходишь по всему алфавиту (по p_count), для каждого символа которые встретился , ты считаешь вероятность как число вхождения деленное на длинну строки... то есть я, в цикле суммировал значение P(x) для каждого символа строки а не алфавита. Хорошо, но при строках с различными символами результаты должны совпадать! а не совпадают... почему ? Я проверил. Вход 1234 выход. у меня -5.756463 у тебя -4.605170 отчего так, я не пойму ? я проверил, функция get_count уменя работает верно и prob тоже... а сам цикл прозрачен, откуда такие глюки ? вот мой вариант проги, на котором тестировал:
добавил позже ВСЕ. я понял почему. for (i=0; i<=len; i++) { strlen возвращает ведь длинну строки, а строку с 0 ... получается на 1 итерацию больше. я заменил на for (i=0; i< len; i++) { теперь результаты совпадают. Цитата Entropy Enter text... 1234 Entropy [s] = 4.605170 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 18:48 |