Как я могу оптимизировать проверку перестановок символов (10 букв) по списку слов?Python

Программы на Python
Anonymous
Как я могу оптимизировать проверку перестановок символов (10 букв) по списку слов?

Сообщение Anonymous »

Я пытаюсь сделать игру на основе телешоу Cifras y Lettras в Испании (Countdown в США или chiffres et lettres во Франции). У меня есть список всех испанских слов благодаря коду, который я нашел, который был создан с помощью веб-сайта нашего официального организма на предмет языка. При этом я решил составить словарь со всеми буквами и их распространенностью, чтобы затем сгенерировать случайную (взвешенную) строку из 10 символов, из которой игрок попытается составить максимально длинное слово. Проблема возникает, когда я дохожу до вычисления самого длинного возможного слова с этой строкой из 10 букв.
Здесь буквы (случайная_строка при вызове) — это строка из 10 символов, сгенерированная мной, а word_list (filtered_word) — это список всех слов на испанском языке, состоящих из 10 или менее букв.

Код: Выделить всё

def find_longest_word(letters, word_list):
# Sort word_list by length (longest to shortest)
word_list.sort(key=len, reverse=True)

# Convert word_list to a set for fast lookup
word_set = set(word_list)

longest_word = ''
max_length = 0

# Iterate over lengths from len(letters) down to 1
for length in range(len(letters), 0, -1):
# Filter word_list to include only words of current length
filtered_words = [word for word in word_list if len(word) == length]
# Generate permutations of current length
for perm in permutations(letters, length): #permutations() given letter set and length gives all permutations
#the outer for loop will make it so that we start by 10 letter words and after obtaining all permutations of that length we go to 9
perm_word = ''.join(perm)
if perm_word in filtered_words:
if length > max_length:
max_length = length
longest_word = perm_word
# Exit the loop once the longest word is found
return longest_word

return longest_word
longest_word = find_longest_word(random_string, filtered_words)
Это выполняется 1 час и все еще продолжается. Я понимаю, что способов, которыми я занимаюсь, существует 10! (3,6 млн) перестановок нужно проверить на 81 000 слов на испанском языке (хотя и меньше, поскольку я сравниваю строку из 10 букв только со словами одинаковой длины (я не уверен, что это что-то меняет, поскольку все равно приходится анализировать каждое слово) чтобы проверить его длину)).
https://github.com/Albertofma/Letras весь проект на случай, если кто-то захочет увидеть остальную часть кода.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -a-list-of

Вернуться в «Python»