2014-11-06 4 views
0

Мне было предложено создать функции в Python БЕЗ использования циклов и деревьев для представления кодировки Хаффмана. Я создал функцию, которая с этого входа:Рекурсивное кодирование Хаффмана в Python

[('a',4),('b',10),('c',15),('d',18),('e',42),('f',11)] 

дает этот вывод:

('e', (('f', ('a', 'b')), ('c', 'd'))) 

Теперь я должен создать функцию, которая кодирует этот вывод в

[('e','0') , ('f','100') , ('a', '1010') , ('b' , '1011') , ('c', '110') , ('d','111') ] 

Я понятия не имею, как (без использования циклов) изменить кортеж на список и в то же время добавить 1 и 0 к определенным элементам.

+0

Знаете ли вы, что такое рекурсивная функция? Потому что я уверен, что «БЕЗ использования циклов» означает, что вы должны написать рекурсивную функцию. Посмотрите на формат ввода: это кортеж из двух вещей, каждый из которых представляет собой либо букву, либо другой кортеж. Это должно сказать вам, как разложить его рекурсивно. – abarnert

+0

Рекурсия для изучения подробнее. ** Подсказка: ** Рекурсия - это цикл, только в другой форме. –

+0

Кроме того, я не уверен, как это «без использования деревьев»; вложенный список (или кортеж) является одним из наиболее очевидных способов представления дерева (как половина упражнений в любом учебнике на основе Lisp доказывает ...). – abarnert

ответ

0

list() -> новый пустой список

list(iterable) -> Новый список инициализируется из итерацию по пунктам

Кортеж является итератор, поэтому вызов list на один даст список его элементов.