Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 22:13   #1
Ксения19
 
Регистрация: 26.10.2011
Сообщений: 5
По умолчанию Метод Хаффмана Паскаль

Задание: написать программу которая считывает текст с файла, выводит вероятности появления каждого из символов в тексте, и рассчитывает среднее кол-во бит на символ(сумма произведений вероятностей на длину кода). Ниже текст прогграммы которая выводит вероятности и считает длину текста, НЕ ЗНАЮ КАК РЕАЛИЗОВАТЬ ДАЛЬШЕ, помогите кто в этом разбирается, пожалуйста
Program lab2;
var
b: char;
f: text;
s: char;
l: string;
k: array [0..255] of integer;
i: integer;

const
Sum: Longint = 0;
begin
Write('file name: ');
readln (l);
assign (f,l);
Reset (f);
while not EOF(f) do
begin
read(f,s);
inc (sum,1);
k[ord(s)]:=k[ord(s)]+1;
end;
for i:= 0 to 255 do
if k[i]>0 then
writeln(k[i],'/', sum);
{writeln ('obem = ', sum) ;}
close(f);
readln;
end.
Ксения19 вне форума Ответить с цитированием
Старый 22.12.2011, 22:22   #2
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Цитата:
Ниже текст прогграммы которая выводит вероятности и считает длину текста, НЕ ЗНАЮ КАК РЕАЛИЗОВАТЬ ДАЛЬШЕ
Так что не получается сделать-то? Рассчитать среднее кол-во бит на символ?
JuniorProger вне форума Ответить с цитированием
Старый 22.12.2011, 22:26   #3
Ксения19
 
Регистрация: 26.10.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от JuniorProger Посмотреть сообщение
Так что не получается сделать-то? Рассчитать среднее кол-во бит на символ?
да, именно это не знаю как реализовать
Ксения19 вне форума Ответить с цитированием
Старый 22.12.2011, 22:33   #4
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Ну так у тебя же написано, что среднее кол-во бит на символ - это сумма произведений вероятностей на длину кода. Допустим у тебя k[0] - вероятность появления нулевого символа, k[1] - первого, k[n] - n-го символа. Длина текста я так понял Sum. Тогда, судя по тому, что ты написала, среднее кол-во бит на символ равно k[0]*Sum + k[1]*Sum +...+k[n]*Sum что равно Sum*(k[0] + k[1] +...+ k[n]).
JuniorProger вне форума Ответить с цитированием
Старый 22.12.2011, 22:39   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Сообщение от JuniorProger Посмотреть сообщение
Ну так у тебя же написано, что среднее кол-во бит на символ - это сумма произведений вероятностей на длину кода. Допустим у тебя k[0] - вероятность появления нулевого символа, k[1] - первого, k[n] - n-го символа. Длина текста я так понял Sum. Тогда, судя по тому, что ты написала, среднее кол-во бит на символ равно k[0]*Sum + k[1]*Sum +...+k[n]*Sum что равно Sum*(k[0] + k[1] +...+ k[n]).
и k[0]*Sum + k[1]*Sum +...+k[n]*Sum что равно Sum*(k[0] + k[1] +...+ k[n] равно будет Sum
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 22.12.2011 в 22:41.
Mad_Cat вне форума Ответить с цитированием
Старый 22.12.2011, 22:41   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Sum*(k[0] + k[1] +...+ k[n] равно будет 1
разве?
помоему это будет равно Sum
тк (k[0] + k[1] +...+ k[n]) сумма вероятностей и равна 1
+ умножить на sum получится sum
Или я что-то путаю?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 22.12.2011, 22:41   #7
Ксения19
 
Регистрация: 26.10.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от JuniorProger Посмотреть сообщение
Ну так у тебя же написано, что среднее кол-во бит на символ - это сумма произведений вероятностей на длину кода. Допустим у тебя k[0] - вероятность появления нулевого символа, k[1] - первого, k[n] - n-го символа. Длина текста я так понял Sum. Тогда, судя по тому, что ты написала, среднее кол-во бит на символ равно k[0]*Sum + k[1]*Sum +...+k[n]*Sum что равно Sum*(k[0] + k[1] +...+ k[n]).
нет не так, вероятности нужно умножать на длину кодовой комбинации, например кодовая комбинация=001, тогда её длина =3, так вот, у каждого символа будет свой код, вот как их закодировать мне и непонятно
Ксения19 вне форума Ответить с цитированием
Старый 22.12.2011, 22:43   #8
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Hacker19_90, ты прав. Mad_Cat, прав Hacker19_90
JuniorProger вне форума Ответить с цитированием
Старый 22.12.2011, 22:45   #9
Ксения19
 
Регистрация: 26.10.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от JuniorProger Посмотреть сообщение
Hacker19_90, ты прав. Mad_Cat, прав Hacker19_90
не путайте длину КОДА и длину текста
Ксения19 вне форума Ответить с цитированием
Старый 22.12.2011, 22:49   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

чёт я запутался ТС
Давайте сначала
и так есть текст в котором мы должны определить вероятность появления символа!
это не вопрос!
Но потом
сумма произведений вероятностей на длину кода
длину какого кода? кода чего?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод итераций. Паскаль. Heming Помощь студентам 6 22.12.2011 22:10
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
метод Хаффмана. 0479 Помощь студентам 2 01.11.2010 09:46
Паскаль. Метод касатальных. voffka-blogger Паскаль, Turbo Pascal, PascalABC.NET 13 13.04.2010 17:30