Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[Perl] Кодирование строки по Хаффману |

09.01.2010, 20:34
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
[Perl] Кодирование строки по Хаффману
Доброго времени суток. Пишу программу, которая должна кодировать введенную строку по методу Хаффмана, вот пока что получилось:
Код:
#!/usr/bin/perl -w
print "Введите строку: ";
$string = <STDIN>;
chomp $string;
# Заполняем массив @symbols символами из строки
@symbols = split(//, $string);
for ($a = 0; $a < @symbols; $a++) {
$number[$a] = 0;
}
# Считаем частоту символов в строке
for ($i = 0; $i < @symbols-1; $i++) {
if ($number[$i] == 0) {
$count = 1;
$number[$i] = 1;
$t = $i + 1;
print $t;
for ($j = $t; $j < @symbols; $j++) {
$one = substr($string,$i,1);
$two = substr($string,$j,1);
if ( ($one eq $two) and ($number[$j] == 0) ) {
$number[$j] = 1;
$count++;
}
}
$tmp = substr($string,$i,1);
print "$tmp - $count\n";
}
}
Каким образом мне дальше действовать? использовать хеш таблицу или что то другое? язык для меня новый и все его возможности я пока незнаю.
И если есть возможность как то упростить задачу, буду рад предложениям.
Спасибо за внимание!
Последний раз редактировалось eden; 09.01.2010 в 20:37..
|
|
|

10.01.2010, 09:40
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
http://search.cpan.org/dist/Algorithm-Huffman/Huffman.pm
|
|
|

10.01.2010, 19:35
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
Установил Heap::Fibonacci, но выдает ошибку:
Код:
Can't locate Heap/Fibonacci.pm in @INC (@INC contains: /etc/perl
/usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0
/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10
/usr/local/lib/site_perl .) at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 14.
BEGIN failed--compilation aborted at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 14.
Compilation failed in require at haffman.pl line 3.
BEGIN failed--compilation aborted at haffman.pl line 3.
как исправить?
Последний раз редактировалось eden; 10.01.2010 в 19:38..
|
|
|

10.01.2010, 19:39
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
вообще-то там все написано, чего не хватает и где именно.
|
|
|

10.01.2010, 19:49
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
ну после установки модуля Fibonacci, я не нашел файл Heap/Fibonacci.pm, который запрашивается в ошибке
Последний раз редактировалось eden; 10.01.2010 в 20:14..
|
|
|

10.01.2010, 22:54
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
Все, с модулями разобрался, установил вроде все требуемые.
Когда запускаю программу на выполнение пишет:
Код:
Not a HASH reference at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 198.
Открываю файл Huffman.pm:
Код:
sub new {
my ($proto, $key, $value) = @_;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new;
$self->{"KeyValuePair::key"} = $key; # строка 198
$self->{"KeyValuePair::value"} = $value;
return $self;
}
Что это за ошибка?
|
|
|

11.01.2010, 19:41
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
http://www.cpan.org/modules/
Здесь вообще могут быть модули с ошибками?
|
|
|

11.01.2010, 22:31
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
вряд ли. Лучше почитай, как правильно устанавливать модули
|
|
|

12.01.2010, 00:27
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
Читал, модули я поставил верно, но при интерпретации алгоритма(файл Huffman.pm) с cpan.org пишет: Not a HASH reference, и как мне исправить эту ошибку, и вообще должна ли она появлятся в подобном случае?
Мои предыдущие действия были такие:
1. Перешел по ссылке http://search.cpan.org/dist/Algorithm-Huffman/Huffman.pm скопировал в файл haffman.pl код с этого сайта:
Код:
use Algorithm::Huffman;
my %char_counting = map {$_ => int rand(100)} ('a' .. 'z', 'A' .. 'Z');
# or better the real counting for your characters
# as the huffman algorithm doesn't work good with random data :-))
my $huff = Algorithm::Huffman->new(\%char_counting);
my $encode_hash = $huff->encode_hash;
my $decode_hash = $huff->decode_hash;
my $encode_of_hello = $huff->encode_bitstring("Hello");
print "Look at the encoding bitstring of 'Hello': $encode_of_hello\n";
print "The decoding of $encode_of_hello is '", $huff->decode_bitstring($encode_of_hello), "'";
2. Установил через CPAN модуль Algorithm::Huffman
3. После команды: perl haffman.pl выдает код ошибки:
Код:
Not a HASH reference at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 198.
Вот собственно и вся ошибка.
Кому будет не сложно повторите эти действия, может дело в самом модуле Algorithm::Huffman и имеет смысл писать свой собственный?
|
|
|

12.01.2010, 05:39
|
|
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме: 29496
Репутация:
0
|
|
Подскажите как исправить это предупреждение, о плохой работе алгоритма:
Код:
my %char_counting = map {$_ => int rand(100)} ('a' .. 'z', 'A' .. 'Z');
# or better the real counting for your characters
# as the huffman algorithm doesn't work good with random data :-))
?
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Процесс создания программного обеспечения для распределенных вычислений (С++).
|
c0n Difesa |
Авторские статьи |
9 |
09.06.2009 16:33 |
|
Assembler FAQ
|
GlobalRave |
С/С++, C#, Delphi, .NET, Asm |
2 |
15.02.2009 18:59 |
|
Конец строки
|
nc.STRIEM |
PHP, PERL, MySQL, JavaScript |
11 |
04.07.2006 00:44 |
|
конец строки
|
Mastermind |
PHP, PERL, MySQL, JavaScript |
15 |
18.08.2005 00:28 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|