Сведения о вопросе

DED

17:33, 27th August, 2020

Теги

sorting   big-o    

Как я могу написать вид хуже, чем O (n!)

Просмотров: 456   Ответов: 2

Я написал O (n!) сортировка для моего развлечения, которое не может быть тривиально оптимизировано, чтобы работать быстрее, не заменяя его полностью. [И нет, я не просто рандомизировал элементы, пока они не были отсортированы].

Как я мог бы написать еще худший вид Big-O, не просто добавляя посторонний мусор, который можно было бы вытащить, чтобы уменьшить сложность времени?

http://en.wikipedia.org/wiki/Big_O_notation имеет различные временные сложности, отсортированные в порядке возрастания.

Edit: я нашел код, вот мой 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]



  Сведения об ответе

nYU

21:06, 1st October, 2020

Там есть (доказано!) худший алгоритм сортировки называется медленной сортировкой , который использует парадигму “multiply and surrender” и работает в экспоненциальном времени.

Хотя ваш алгоритм работает медленнее, он не прогрессирует постоянно, а вместо этого выполняет случайные скачки. Кроме того, лучший случай медленной сортировки все еще экспоненциальный, а ваш-постоянный.


  Сведения об ответе

lats

04:00, 8th August, 2020

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться