【发布时间】:2017-02-04 13:58:22
【问题描述】:
我创建了一个 bogo 排序,但想对其进行优化。它随机打乱已拆分为单个字符的字符串。但是,当它对字符进行洗牌时,它可以多次重复随机排列。例如,如果单词是 cat,它可能会尝试 'tac' 或 'act' 但它可能会再次尝试 'tac'。我想对其进行编码,因此它只尝试一次排列,但是我不确定如何执行此操作。这是我在 python 中的代码。有可能实现吗?
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
【问题讨论】:
-
我不懂python,所以无法为你实现。但是,您可以实施的一个简单解决方案是将每个单词添加到列表中。那么当你找到一个新单词时,如果它已经被添加到列表中,就不要打印它。
-
我怀疑这种优化实际上不会优化任何东西。检查随机排列是否等于所需的排列可能比检查它是否是您之前尝试过的(可能很多)排列之一更快。我也不确定优化 bogosort 的目的是什么,因为它的全部目的是成为一个非常低效的算法。
-
这真的很重要吗?此外,测试是否已经发生随机排列可能比检查列表是否已排序更昂贵。相反,您可以系统地枚举排列,以便每个排列只生成一次。
标签: algorithm python-3.x sorting