Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
kumaser
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 4
1

Алгоритм Шеннона-Фано

29.10.2014, 18:20. Просмотров 493. Ответов 0
Метки нет (Все метки)

Всем привет. Разбираю алгоритм и никак не могу понять в чем я совершаю ошибку. Задача такая: Даны символы и их частоты A 50, B 39, C 18, D 49, E 35, F 24. Разработать программу построения таблицы кодирования на основе алгоритма Шеннона-Фано.
Алгоритм я разбирал по нескольким источникам в интернете, но за основу брал из википедии: https://ru.wikipedia.org/wiki/%D0%90...B0%D0%BD%D0%BE
Там задача точно такая же как мне и нужно. Только вот мое решение и решение из примера не совпадают. С левой веткой все ок. А вот правая ветка отличается, она как бы зеркально отражена. Почему? Почему когда делят DEF, D присваивают 0, а EF - 1. Почему так, ведь по алготитму если идем в лево, то ставим 1, вправо-0.
В общем, что должно получиться: A = 11, B = 101, C = 100, D = 00, E = 011, F = 010.
Что получилось у меня: A = 11 B = 101 C = 100 D = 01 E = 001 F = 000

Входные данные массивы: frequencies = [50, 39, 18, 49, 35, 24] и chars = [A, B, C, D, E, F]

Начало решения: SearchTree(' ',' ', 1, charCount,Memo1);
Непосредственно функция:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure SearchTree(branch:char; full_branch:string; start_pos:integer; end_pos:integer; memo:TMemo);
var
  dS:real; 
  i, m, S:integer; 
  c_branch:string; 
  x,y,j:integer;
begin
  if (branch<>' ') then c_branch := full_branch + branch
  else c_branch := '';
 
  if (start_pos = end_pos) then
  begin
    memo.Lines.Add(chars[start_pos]+ ' = ' + c_branch);
    exit;
  end;
 
   x:=0;  y:=0;
   i:=start_pos-1;  j:=end_pos;
   repeat
   Inc(i);
   x:=x+frequencies[i];
   while ((x>=y) and (i<>j))do
     begin
      y:=y+frequencies[j];
      Dec(j);
     end;
     m:=i;
   until (i=j);
  SearchTree('1', c_branch, start_pos, m,memo);
  SearchTree('0', c_branch, m+1, end_pos,memo);
end;
Помогите понять в чем дело, что я делаю не так. Заранее спасибо)))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2014, 18:20
Ответы с готовыми решениями:

Алгоритм сжатия Шеннона - Фано
Здравствуйте, мне нужна помощь. Пишу программу Алгоритм сжатия Шеннона - Фано на Delphi. Нужен...

Оптимальное кодирование, методы Шеннона-Фано и Хаффмена
Помогите, плиз.... а то не знаю, как решать.... &lt;&lt; Составьте программу оптимального кодирования...

Кодирование+декодирование методами Шеннона-Фано и Хемминга
Требуется сабж на Delphi. Дается файл, который следует закодировать, потом полученный...

Алгоритм Шеннона-Фано
Помогите, реализовать Алгоритм Шеннона-Фано на С ++, так чтобы мы вводили сроку из символов, а на...

Алгоритм шеннона фано
Помогите реализовать алгоритм шеннона фано, курсовую скоро сдавать, а у меня ничего не готово,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2014, 18:20

Алгоритм Шеннона-Фано
Приветствую всех в этой теме. Создаю архиватор по методу Шеннона-Фано. И трудность возникла в...

Реализовать алгоритм Шеннона-Фано
есть ли кого-то алгоритм шеннона-фано на c++ или java ? нужен код

Алгоритм сжатия методом Шеннона-Фано
Народ, нужна помощь в поиске кода реализующего алгоритм кодирования и декодирования сообщения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru