私はbogoソートを作成しましたが、最適化します。 1つの文字に分割された文字列をランダムにシャッフルします。しかし、文字をシャッフルすると、ランダム置換を複数回繰り返すことができます。たとえば、単語が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
:あなたもちょうど次のスニペットと BOGOソートをシミュレートすることができます。ただし、実装できる簡単なソリューションの1つは、各単語をリストに追加することです。新しい単語を見つけたら、それが既にリストに追加されている場合は印刷しないでください。 – nhouser9
私はこの最適化が実際に何かを最適化するつもりはないと思う。ランダム順列が目的の順列と等しいかどうかを確認することは、以前試みた(おそらく多くの)順列の1つであるかどうかを確認するよりもおそらく早いでしょう。私はまた、ボゴソートの最適化のポイントが本当によく分からない。なぜなら、その目的はひどく非効率的なアルゴリズムであるためだ。 – Blckknght
これは本当に重要ですか?ランダム置換がすでに発生しているかどうかをテストすることは、リストがソートされているかどうかを確認するよりもおそらく高価になります。その代わりに、順列を体系的に列挙して、それぞれが一度だけ生成されるようにすることができます。 – Henry