Доброго времени суток. Пишу программу, которая должна кодировать введенную строку по методу Хаффмана, вот пока что получилось: Code: #!/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"; } } Каким образом мне дальше действовать? использовать хеш таблицу или что то другое? язык для меня новый и все его возможности я пока незнаю. И если есть возможность как то упростить задачу, буду рад предложениям. Спасибо за внимание!
Установил Heap::Fibonacci, но выдает ошибку: Code: 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. как исправить?
ну после установки модуля Fibonacci, я не нашел файл Heap/Fibonacci.pm, который запрашивается в ошибке
Все, с модулями разобрался, установил вроде все требуемые. Когда запускаю программу на выполнение пишет: Code: Not a HASH reference at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 198. Открываю файл Huffman.pm: Code: 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; } Что это за ошибка?
Читал, модули я поставил верно, но при интерпретации алгоритма(файл Huffman.pm) с cpan.org пишет: Not a HASH reference, и как мне исправить эту ошибку, и вообще должна ли она появлятся в подобном случае? Мои предыдущие действия были такие: 1. Перешел по ссылке http://search.cpan.org/dist/Algorithm-Huffman/Huffman.pm скопировал в файл haffman.pl код с этого сайта: Code: 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 выдает код ошибки: Code: Not a HASH reference at /usr/local/share/perl/5.10.0/Algorithm/Huffman.pm line 198. Вот собственно и вся ошибка. Кому будет не сложно повторите эти действия, может дело в самом модуле Algorithm::Huffman и имеет смысл писать свой собственный?
Подскажите как исправить это предупреждение, о плохой работе алгоритма: Code: 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 :-)) ?
Не знаю, как вы со CPAN-а поставили модуль, который не проходит make test. Строка в примере Code: my %char_counting = map {$_ => int rand(100)} ('a' .. 'z', 'A' .. 'Z'); правильная, формируется хэш, ссылка на который и передается конструктору new. Имхо, фтопку модуль, ищите другие варианты, в гугле куча ссылок
Проблем решена. Нашел другое решение в сети: http://eli.thegreenplace.net/files/prog_code/huff.pl.txt krypt3r, Pashkela - спасибо за помощь.