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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2015, 14:21   #1
Alibaba.bu
Пользователь
 
Регистрация: 20.06.2015
Сообщений: 10
По умолчанию алгоритм построения кода Шеннона-Фано

Всем доброго времени суток! Ребят выручайте!!!
Нужно завтра сдать программку кодировки Шеннона-Фано. Сортировку уже сделала (с помощью вас друзья и бессонных ночей). Осталось построить код
(Берутся исходные сообщения m(i) и их вероятности появления P(m(i)). Сообщения упорядываются так, чтобы вероятность i-го сообщения была не больше (i+1)-го. Этот список делится на две группы с примерно равной интегральной вероятностью. Каждому сообщению из группы 1 присваивается 0 в качестве первой цифры кода. Сообщениям из второй группы ставятся в соответствие коды, начинающиеся с 1. Каждая из этих групп делится на две аналогичным образом и добавляется еще одна цифра кода. Процесс продолжается до тех пор, пока не будут получены группы, содержащие лишь одно сообщение. Каждому сообщению в результате будет присвоен код x c длиной –lg(P(x)). Это справедливо, если возможно деление на подгруппы с совершенно равной суммарной вероятностью. Если же это невозможно, некоторые коды будут иметь длину –lg(P(x))+1. Алгоритм Шеннона-Фано не гарантирует оптимального кодирования.)

Очень нужна ваша помощь)))
вот что уже сделано

Код Delphi

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
    Ch : Char;
    Counts : array[Char] of Integer;
    i,j,ColSort:integer;
    Count: Integer; //общее количество тимволв без пробелов
begin
s := AnsiUpperCase(Edit1.Text);
ZeroMemory(@Counts, SizeOf(Counts));
for i := 1 to Length(s) do Inc(Counts[s[i]]);
Count:=0;
for Ch := Low(Char) to High(Char) do
if Ch<>' ' then inc(Count,Counts[Ch]);
j:=0;
for Ch := Low(Char) to High(Char) do
if (Counts[Ch] > 0)and(Ch<>' ') then
 begin
  StringGrid2.Cells[0,j+1]:=Ch;
  StringGrid2.Cells[1,j+1]:=inttostr(Counts[Ch]);
  StringGrid2.Cells[2,j+1]:=format('%.2f',[Counts[Ch]/Count]);
  inc(j);
  StringGrid2.RowCount:=StringGrid2.RowCount+1;
 end;
StringGrid2.RowCount:=StringGrid2.RowCount-1;
ColSort:=1;
with StringGrid2 do
 begin
  for i:=FixedRows to RowCount-1 do
  for j:=FixedRows to RowCount-1 do
  if StrToIntDef(Cells[ColSort,i],0)>StrToIntDef(Cells[ColSort,j],0) then
   begin
s:=Rows[i].Text;
    Rows[i].Text:=Rows[j].Text;
    Rows[j].Text:=s;
   end;
 end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid2 do
 begin
  fixedcols:=0;
  fixedrows:=1;
  colcount:=3;
  rowcount:=2;
  cells[0,0]:=('Символ');
  cells[1,0]:=('Количество');
  cells[2,0]:=('Вероятность');
 end;
end;
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 24.06.2015 в 17:19.
Alibaba.bu вне форума Ответить с цитированием
Старый 24.06.2015, 17:14   #2
Alibaba.bu
Пользователь
 
Регистрация: 20.06.2015
Сообщений: 10
По умолчанию

Помогите пожалуйста!!!
Alibaba.bu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация алгоритма сжатия данных методом Шеннона-Фано на языке с# Hylim1991 Помощь студентам 0 23.03.2012 07:26
метод Шеннона-Фано Вечно грустная... Помощь студентам 3 11.11.2011 11:41
Эффективное кодирование информации методами Шеннона-Фано и Хаффмана в Delphi LoveCookies Помощь студентам 0 06.11.2011 01:19
Теория информации. Метод сжатия Шеннона-Фано, Хаффмена и арифметический Fantazerishka Помощь студентам 0 15.02.2011 16:25
Архивация методом Шеннона-Фано Ketu Паскаль, Turbo Pascal, PascalABC.NET 2 13.10.2008 19:42