Как мне повысить эффективность моей функции? - PullRequest
0 голосов
/ 26 марта 2019

Итак, я написал эту маленькую программу на Python, которая создает анаграммы из введенных букв и языка, но она вылетает, как только введенное слово имеет слишком много возможных выходных данных или просто слишком длинное. Как я могу улучшить свой код, чтобы он стал более производительным / эффективным?

def createAnagrams(word, language):
    dictLanguage = enchant.Dict(language) #library that can check if word exists 
    existingWords = [] 

    for i in range(1, len(word)+1):
        for j in permutations(word, i):
            existingWords.append("".join(j))
    existingWords = set(existingWords) #remove duplicates
    existingWords = list(existingWords) #change back to list to be able to iterate through it
    for k in range(len(existingWords)):
        if(dictLanguage.check(existingWords[k])) and (len(existingWords[k])>1): #if word exists and longer than 1 char print it
            print(existingWords[k])

Работает для таких слов, как "привет", "Патрик", "Вчера", но вылетает для таких слов, как "объявления", "подписки". Хотелось бы получить ожидаемый вывод для более длинных слов.

Заранее спасибо

1 Ответ

0 голосов
/ 26 марта 2019

Я подозреваю, что причиной сбоя вашей программы является какая-то ошибка нехватки памяти. В частности, вы создаете список, содержащий все перестановки всех подстрок «объявлений» (6749977113 много). Это не очень хорошая идея ...

Я бы предложил реализовать три для language и выполнить поиск по дереву на основе букв в данном слове, чтобы получить все языковые слова, содержащиеся в word, чтобы получить список подстрок. Объединить их в полную анаграмму - это, конечно, другой вопрос.

...