Я создал тип bogo, но хочу его оптимизировать. Он случайным образом перемещает строку, которая была разделена на отдельные символы. Однако, когда он перемещает символы, он может повторять случайную перестановку более одного раза. Например, если слово cat, оно может попробовать «tac» или «act», но затем оно может попробовать «tac» снова. Я хочу закодировать его, чтобы один раз попробовать только одну перестановку, но я не уверен, как это сделать. Это мой код в python. Можно ли это реализовать?Как я могу оптимизировать сортировку bogo?
import random
i=0
valid = False
while not(valid):
word = input("Enter word to be mixed > ")
if len(word) <= 1:
("not valid!")
else:
valid = True
wordlist = list(word)
resorted = False
while not (resorted):
random.shuffle(wordlist)
i += 1
print ("attempts", i)
print (wordlist)
if list(word) == wordlist:
print ("Sorted!")
break
Я не знаю, питона, так что я не могу реализовать это для вас. Однако одним простым решением, которое вы можете реализовать, является добавление каждого слова в список. Затем, когда вы найдете новое слово, не печатайте его, если оно уже добавлено в список. – nhouser9
Я подозреваю, что эта оптимизация на самом деле не собирается оптимизировать что-либо. Проверка того, что случайная перестановка равна требуемой перестановке, вероятно, быстрее, чем проверка того, является ли она одной из (возможно, многих) перестановок, которые вы пробовали раньше. Я также не совсем уверен, какой смысл оптимизировать богосор, так как это целая цель - быть ужасно неэффективным алгоритмом. – Blckknght
Действительно ли это имеет значение? Кроме того, чтобы проверить, действительно ли произошла случайная перестановка, вероятно, стоит дороже, чем проверка сортировки списка. Вместо этого вы можете систематически перечислить перестановки, чтобы каждый из них генерировался только один раз. – Henry