2015-11-07 3 views
-4

Целью было создать дерево huffman (google, если вы не знаете, что это такое), выход которого не содержит веса значения, только значения, расположенные в листах, удерживаемые заполнителем " внутренний "с. Я создал рабочую функцию, которая выглядит корректно, кроме того, с каждым «внутренним» присутствуют дополнительные нулевые списки, которых не должно быть. Если бы кто-то мог взглянуть на код и увидеть мою ошибку или способ ее оптимизации, я был бы признателен.Схема R5RS, функция дерева Хаффмана

(define (build-huffman lst) 
    (let ((x (insert-list-of-pairs lst '()))) 
    (define (huffman-help heap) 
     (if (null? (remove-min heap)) 
      heap 
      (let ((rx (remove-min heap))) 
      (if (list? (h-min heap)) 
       (huffman-help (insert (cons (make-internal-node (value (h-min heap)) 
                   (value (h-min rx))) 
              (+ (weight (h-min rx)) 
               (weight (h-min heap)))) 
             (remove-min rx))) 
       (huffman-help (insert (cons (make-internal-node (create-heap (value (h-min heap)) '() '()) 
                   (create-heap (value (h-min rx)) '() '())) 
              (+ (weight (h-min rx)) 
              (weight (h-min heap)))) 
             (remove-min rx))))))) 
    (car (car (huffman-help x))))) 

Некоторые из функций являются ясными, и я знаю, что проблема находится внутри этого кода, а не какая-либо другая функция.

(insert-list-of-pair) - отображает список пар, например. "((№ 7) (да. 4))" и вставляет его в кучу.

(insert) - вводит одну пару в кучу.

(удалить-мин) - уменьшает минимальное значение кучи.

(макияж внутреннего узла 0-дерево 1-дерево) -> (список «внутренний 0-дерево 1-дерево)

+0

вы заметили, что довольно заманчиво делать то, что вы делаете, и писать «google, если вы не знаете, что такое проблема is_»? ;-) – Marged

+0

Я только попросил google, что такое дерево хаффмана, потому что википедия или любой другой источник смогут объяснить это намного лучше, чем я. И поиск в googling не дает никаких результатов. – MitchG

ответ

0

Вы искали шаблон? Мне кажется, что ваш код добавляет нулевые списки после того, как больше нет того же узла для добавления в дерево. Это похоже на домашнюю работу, поэтому я не могу дать вам ответ, но посмотрите в свой код и посмотрите, не можете ли вы остановить его после добавления последнего того же веса узла.

Смежные вопросы