Я написал сортировку 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]