我为我的娱乐写了一个 O(n!) 排序,如果不完全替换它,就不能简单地优化它以更快地运行。[不,我不只是在物品被分类之前随机化这些物品]。
我如何编写更糟糕的 Big-O 排序,而不只是添加可以拉出以降低时间复杂度的无关垃圾?
http://en.wikipedia.org/wiki/Big_O_notation具有按增长顺序排序的各种时间复杂度。
编辑:我找到了代码,这是我的 O(n!) 确定性排序,带有有趣的 hack 以生成列表的所有组合的列表。我有一个稍微长一点的 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]