Предположим:Сгенерировать все возможные комбинации словарей с заданным количеством шагов?
только 4 буквы (а, б, в, г) используются
Скажем, у меня есть словарь содержат вхождений (> = 0) из 4 букв
d = {"a":1, "b":2, "c":1, "d":3}
и мне присваивается номер «шагов».
Я хочу найти все словари, которые возможны с учетом «шагов» числа вычитаний из вхождения.
Например
# given the above dictionary and a steps of 2
moo = {"a":1, "b":1, "c":1, "d":2}
# moo is a possibility because I simply took away 1 b and 1 d
# how do I find all the possibilities? (note: occurrences cannot be negative)
редактировать: шаги, как в точности 2 шагах
Примечание: Я хочу найти все «МОО» ю.ш., или все словари, которые можно дается ссылка словарь и несколько шагов. Меня не волнует тестирование, если два словаря соответствуют требованиям шага.
Я думаю, что я придумал какой-то рекурсивный код, чтобы решить эту проблему:
def genDict(d, steps):
if steps == 0:
return [d]
dList = []
for key, value in d.items():
if value > 0:
temp = dict(d)
temp[key] = value -1
dList += genDict(temp, steps-1)
return dList
Любых получил нерекурсивное решение, которое не будет Hog памяти?
Ровно два "шага" или до двух "шагов"? –
@TimPietzcker жаль, что я имел в виду ровно 2 шага – Derek
Предлагаю вам прочитать корректор орфографии Питера Норвига. Он включает в себя код для вычисления «расстояния редактирования» и, возможно, вы можете получить от него полезные идеи. Если ваши словари всегда используют отдельные буквы в качестве ключей, вы можете кодировать словари как строки и, возможно, просто использовать код из этого! http://norvig.com/spell-correct.html – steveha