Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Метод Хаффмана определить начало символа
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
Question Метод Хаффмана определить начало символа - 09.11.2010, 21:59

Ребята, срочно нужна помощь.
Вообщем вопрос мой такой -

Как с помощу "Метода Хаффмана" определить, где начало символа, где конец, где кончается 2 символ и начинается 3... и т.д

допустим 1010101010101
как определить, где какая буква. Обьясните пожалуйста, очень - очень важно!!

Заранее сильно благодарен!
Ответить с цитированием
  (#2 (permalink)) Старый
Jonano2 Jonano2 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 09.11.2010, 22:17

Что ты подразумеваешь под фразой начало символа и конец символа? )) Символ един и неделим.

Чтобы обратиться к определённому символу, надо использовать индекс, например:

Код:
char* str = "10101110";
char symb = str[0];     //считали первый символ
symb = str[1];            // считали второй символ
Чтобы перебрать все символы в строке, можно сделать так:
Код:
char* str = "10101110";
for(int i = 0; i<strlen(str); i++)
{
     char symb = str[i];     //считали символ с индексом i
     // тут можно что-то сделать с этим символом
}
Метод Хаффмана, если не ошибаюсь, относится к сжатию данных. Или ты несколько неправильно сформулировал задачу, или я чего-то не понимаю )
Ответить с цитированием
  (#3 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 09.11.2010, 22:20

Ну просто , как был задан вопрос , так и задал)

Просто преподаватель, хочет что б я ему обьяснил на словах(ну или при помощи дерева Хаффмана), как определить где какая буква =)
вот только как это сделать... =\

Ну он говорит, что обьяснение там легкое

Да, он относится к сжатию данных, ты прав) Но мне сжимать с помощу формул и т.д ненадо, мне надо без помощи компа ему это все доказать)
Ответить с цитированием
  (#4 (permalink)) Старый
Jonano2 Jonano2 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 09.11.2010, 22:35

Ну, как вариант, могу предположить, что препод хотел спросить, как определить, на каком месте в строке находится определённая буква, иными словами поиск.

Для этого надо в цикле пройти по всем символам строки и проверять каждый, тот это или нет.
Допустим, попробуем на примере найти символ 'с' в строке "12 стульев".

Код:
char* str = "12 стульев";  
char fs = 'с';      // искомый символ
int lIndex = -1;  // индекс нужного символа по умолчанию 
for(int i = 0; i<strlen(str); i++)
{
     if(str[i] == fs)
     {
          lIndex = i;   // запоминаем индекс
          break;       // выходим из цикла
     }
}
// всё, в переменной lIndex у нас либо индекс нужного символа в строке, либо -1 (не найдено)
Ответить с цитированием
  (#5 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 09.11.2010, 22:38

"на каком месте в строке находится определённая буква"-
да-да именно это он хочет =)

char* str = "12 стульев";
char fs = 'с'; // искомый символ
int lIndex = -1; // индекс нужного символа по умолчанию
for(int i = 0; i<strlen(str); i++)
{
if(str[i] == fs)
{
lIndex = i; // запоминаем индекс
break; // выходим из цикла
}
}
// всё, в переменной lIndex у нас либо индекс нужного символа в строке, либо -1 (не найдено)

Теперь проблемка с этим, как это на доске обьяснить(решить) ?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 09.11.2010, 22:44

Вообщем завтро у него уточню и запишу конкретный вопрос, как он задал.
И отпишу в этом топике ) Потому что мне кажется, что он не правильно задал нам вопрос...
Ответить с цитированием
  (#7 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,236
Сказал(а) спасибо: 25
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 10.11.2010, 02:57

Надо брать дерево и по нему определять позиции.
На пальцах примерно так: пусть левая вершина дерева обозначается нулем, а правая - единицей. Возьмем дерево, например, такое:
[XML] ┌─────────┴─────────┐
┌───┴─────┐ ┌───┴─────┐
A ┌──┴──┐ ┌──┴──┐ ┌──┴──┐
B C D E F ┌──┴──┐
G H[/XML]

Тогда коды символов будут такими:
A - 00
B - 010
C - 011
D - 100
E - 101
F - 110
G - 1110
H - 1111

Очевидно, что любую последовательность битов можно раскодировать, если она не обрывается посередине символа. Надо просто идти по дереву вниз от вершины, беря направление по очередному биту - пока не придем к листу-символу. Вот тут и кончается один символ и начинается следующий.

Для представленной последовательности и нашего дерева деление будет таким:
101 010 101 010 1
Е В Е В неполный символ
Ответить с цитированием
  (#8 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 10.11.2010, 18:09

Ооо, спасибо большое !
Ответить с цитированием
  (#9 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,236
Сказал(а) спасибо: 25
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 11.11.2010, 00:10

Цитата:
Сообщение от MedveD
Вот смотрите, а как узнать сколько бит в букве A или другой букве?
Высота (расстояние до корня) соответствующего листа в дереве
Ответить с цитированием
  (#10 (permalink)) Старый
MedveD MedveD вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2010
По умолчанию 11.11.2010, 21:23

"Высота (расстояние до корня) соответствующего листа в дереве"
Это вы имелли ввиду код символа, а мне бы хотелось узнать, можно ли определить сколько дается битов на букву например - H,G,A,D.
К примеру "буква A допустим (3 бита)", ну это только пример ) Правильное количество битов не знаю, нужна ваша помощь определеить это

Благодарю за ответ)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить метод поиска в пространстве состояний Ground Prolog 3 25.05.2011 03:47
Определить функцию возвращающую список свойств-символа 777Aidar777 Lisp 0 02.05.2010 13:18
ООП первое начало crossmark Delphi 3 18.03.2007 22:36
QT-Самое начало imported_Denton C++ на Unix 6 03.01.2007 17:55
Метод Гаусса как реализовать этот метод Неумеха-программист Алгоритмы 5 01.11.2006 23:40
Начало написание драйвера Artemon Железо. Написание драйверов 3 07.09.2006 10:39
ASP .NET Web Site начало Leonidos ASP 2 09.08.2006 15:19
Архиватор Хаффмана построение самостоятельно gooddron0 C++ Builder 2 21.05.2006 17:09
Алгоритм Хаффмана АЛЬБИНА Pascal 7 02.05.2006 05:48
Web сервер - написание, начало Rider PHP 8 31.10.2005 23:46
Написание архиватора по методу Хаффмана на С Anonymous Вопросы начинающих программистов 3 26.10.2004 18:25
Начало соревнований по Assambler Jin X Assembler 1 16.03.2004 20:13



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов