私は自分のアミューズメント用に O(n!) ソートを作成しました。これは、完全に置き換えずに高速に実行するために簡単に最適化することはできません。[いいえ、ソートされるまでアイテムをランダム化しただけではありません]。
時間の複雑さを軽減するために引き抜くことができる無関係なジャンクを追加するだけでなく、さらに悪い Big-O ソートを作成するにはどうすればよいでしょうか?
http://en.wikipedia.org/wiki/Big_O_notationには、さまざまな時間の複雑さが大きくなる順に並べられています。
編集:コードを見つけました。これは、リストのすべての組み合わせのリストを生成する面白いハックを使用した O(n!) 決定論的ソートです。反復可能な組み合わせを返す get_all_combinations の少し長いバージョンがありますが、残念ながら単一のステートメントにすることはできませんでした。[以下のコードでタイプミスを修正し、アンダースコアを削除して、バグが発生していないことを願っています]
def mysort(somelist):
for permutation in get_all_permutations(somelist):
if is_sorted(permutation):
return permutation
def is_sorted(somelist):
# note: this could be merged into return... something like return len(foo) <= 1 or reduce(barf)
if (len(somelist) <= 1): return True
return 1 > reduce(lambda x,y: max(x,y),map(cmp, somelist[:-1], somelist[1:]))
def get_all_permutations(lst):
return [[itm] + cbo for idx, itm in enumerate(lst) for cbo in get_all_permutations(lst[:idx] + lst[idx+1:])] or [lst]