Я написал O (n!) Для моего развлечения, которое нельзя просто оптимизировать для ускорения без полной его замены. [И нет, я не просто рандомизировал предметы, пока они не были отсортированы].
Как я мог бы написать еще худшую сортировку Big-O, просто не добавляя посторонний мусор, который можно было бы извлечь, чтобы уменьшить сложность времени?
http://en.wikipedia.org/wiki/Big_O_notation имеет различные временные сложности, отсортированные в порядке возрастания.
Edit: я нашел код, вот мой O (n!) Детерминированный вид с забавным хаком для генерации списка всех комбинаций списка. У меня есть немного более длинная версия get_all_combination, которая возвращает итеративные комбинации, но, к сожалению, я не смог сделать это ни одним утверждением. [Надеюсь, я не вносил ошибок, исправляя опечатки и удаляя подчеркивания в приведенном ниже коде]
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]