ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Perl] Кодирование строки по Хаффману
  #1  
Старый 09.01.2010, 20:34
eden
Новичок
Регистрация: 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..
 
Ответить с цитированием

  #2  
Старый 10.01.2010, 09:40
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

http://search.cpan.org/dist/Algorithm-Huffman/Huffman.pm
 
Ответить с цитированием

  #3  
Старый 10.01.2010, 19:35
eden
Новичок
Регистрация: 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..
 
Ответить с цитированием

  #4  
Старый 10.01.2010, 19:39
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

вообще-то там все написано, чего не хватает и где именно.
 
Ответить с цитированием

  #5  
Старый 10.01.2010, 19:49
eden
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме:
29496

Репутация: 0
По умолчанию

ну после установки модуля Fibonacci, я не нашел файл Heap/Fibonacci.pm, который запрашивается в ошибке

Последний раз редактировалось eden; 10.01.2010 в 20:14..
 
Ответить с цитированием

  #6  
Старый 10.01.2010, 22:54
eden
Новичок
Регистрация: 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;
}
Что это за ошибка?
 
Ответить с цитированием

  #7  
Старый 11.01.2010, 19:41
eden
Новичок
Регистрация: 09.01.2010
Сообщений: 11
Провел на форуме:
29496

Репутация: 0
По умолчанию

http://www.cpan.org/modules/
Здесь вообще могут быть модули с ошибками?
 
Ответить с цитированием

  #8  
Старый 11.01.2010, 22:31
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

вряд ли. Лучше почитай, как правильно устанавливать модули
 
Ответить с цитированием

  #9  
Старый 12.01.2010, 00:27
eden
Новичок
Регистрация: 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 и имеет смысл писать свой собственный?
 
Ответить с цитированием

  #10  
Старый 12.01.2010, 05:39
eden
Новичок
Регистрация: 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)
 


Быстрый переход




ANTICHAT.XYZ