Есть ли какие-либо худшие алгоритмы сортировки, чем Сортировка по неразумному алгоритму (иначе Вид Обезьяны)? [закрытый]

168
задан 7 revs, 4 users 44% 3 June 2014 в 22:34
поделиться

11 ответов

Со страницы Эзотерические алгоритмы Дэвида Морган-Мара: Сортировка по разумному замыслу

Введение

Сортировка по разумному замыслу - это алгоритм сортировки, основанный на теории разумного замысла.

Описание алгоритма

Вероятность того, что исходный входной список находится именно в том порядке. в котором он находится, равна 1/(n!). Вероятность этого настолько мала, что очевидно, абсурдно говорить, что это произошло случайно, поэтому он должен быть было сознательно помещено в этот порядок разумным Сортировщиком. Поэтому можно предположить, что оно уже оптимально отсортировано каким-то способом. что выходит за рамки нашего наивного смертного понимания "восходящего порядка". Любая попытка изменить этот порядок в соответствии с нашими собственными представлениями фактически сделает его менее отсортированным.

Анализ

Этот алгоритм постоянен во времени и сортирует список на месте, не требуя никакой дополнительной памяти. На самом деле, он даже не даже не требует ничего из этих подозрительных технологических компьютерных штучек. Хвала Сортировщик!

Отзывы

Гэри Роджерс пишет:

Если сделать сортировку постоянной во времени. отрицает силу Сортировщика. The Сортировщик существует вне времени, поэтому поэтому сортировка вне времени. Требование времени для подтверждения сортировки, принижает роль Сортировщика. Таким образом... этот конкретный сортировка несовершенна, и не может быть приписывать "Сортировщику".

Ересь!

431
ответ дан 23 November 2019 в 20:52
поделиться

Нет ничего хуже бесконечности.

7
ответ дан 23 November 2019 в 20:52
поделиться

Если вы сохраните смысл алгоритма каким-либо образом, O (n!) будет худшей верхней границей, которую вы можете достичь.

Так как проверка каждой возможности перестановки сортируемого набора потребует n! шагов, хуже некуда.

Если вы делаете больше шагов, то алгоритм не имеет реальной полезной цели. Не говоря уже о следующем простом алгоритме сортировки с O (бесконечность) :

list = someList
while (list not sorted):
    doNothing
30
ответ дан 23 November 2019 в 20:52
поделиться

В худшем случае производительность O (∞) может даже не сделать его алгоритмом согласно some .

Алгоритм - это просто последовательность шагов, и вы всегда можете сделать хуже, немного подправив его, чтобы получить желаемый результат за большее количество шагов, чем было раньше. Можно было намеренно ввести информацию о количестве шагов, сделанных в алгоритм, и заставить его завершить работу и выдать правильный результат только после того, как будет выполнено X количество шагов. Этот X вполне может иметь порядок O (n 2 ) или O (n n! ) или что угодно, что алгоритм хотел бы сделать. Это эффективно увеличило бы как лучшие, так и средние границы случаев.

Но ваш худший сценарий невозможно превзойти :)

4
ответ дан 23 November 2019 в 20:52
поделиться

Quantum Bogosort

Алгоритм сортировки, который предполагает, что многомировая интерпретация квантовой механики верна:

  1. Убедитесь, что список отсортирован. Если нет, уничтожьте вселенную.

По завершении алгоритма список будет отсортирован в единственной оставшейся вселенной. Этот алгоритм занимает время O (N) в худшем случае и время в среднем O (1). Фактически, среднее количество выполненных сравнений равно 2: существует 50% -ная вероятность того, что вселенная будет разрушена на втором элементе, 25% -ная вероятность, что она будет разрушена на третьем, и так далее.

130
ответ дан 23 November 2019 в 20:52
поделиться

Вам следует провести некоторое исследование в захватывающей области Pessimal Algorithms and Simplexity Analysis. Эти авторы работают над проблемой разработки сортировки с пессимальным лучшим случаем (лучший случай вашего bogosort'а равен Omega(n), а slowsort (см. статью) имеет неполиномиальную временную сложность лучшего случая).

19
ответ дан 23 November 2019 в 20:52
поделиться

Сортировка Бозо - это родственный алгоритм, который проверяет, отсортирован ли список, и, если нет, меняет два элемента местами. Он имеет одинаковые показатели в лучшем и худшем случае, но я интуитивно ожидаю, что средний случай будет длиннее, чем у Bogosort. Трудно найти (или получить) какие-либо данные о производительности этого алгоритма.

5
ответ дан 23 November 2019 в 20:52
поделиться

Вы можете замедлить работу любого алгоритма сортировки, выполняя шаг «Сортировано ли» случайным образом. Примерно так:

  1. Создайте массив логических значений того же размера, что и массив, который вы сортируете. Установите для них все значение false.
  2. Запустите итерацию bogosort.
  3. Выберите два случайных элемента.
  4. Если два элемента отсортированы относительно друг друга (i
  5. Проверить, истинны ли все логические значения в массиве. Если нет, вернитесь к 3.
  6. Готово.
1
ответ дан 23 November 2019 в 20:52
поделиться

1 Поместите свои вещи для сортировки на учетные карточки
2 Подбросьте их в ветреный день в миле от вашего дома .
2 Бросьте их в костер и убедитесь, что они полностью уничтожены.
3 Проверьте правильность расположения пола на кухне.
4 Повторите, если это неправильный порядок.

Лучший вариант сценария - O (∞)

Правка выше на основе проницательных наблюдений Кенни ™.

10
ответ дан 23 November 2019 в 20:52
поделиться

У меня был лектор, который однажды предложил создать случайный массив, проверить, отсортирован ли он, а затем проверить, совпадают ли данные с массивом, который нужно отсортировать.

В лучшем случае O (N) (первый раз, детка!) В худшем случае O (Никогда)

49
ответ дан 23 November 2019 в 20:52
поделиться

Да, SimpleSort, теоретически он работает в O(-1), однако это эквивалентно O(...9999) , что, в свою очередь, эквивалентно O(∞ - 1), что также эквивалентно O(∞). Вот мой пример реализации:

/* element sizes are uneeded, they are assumed */
void
simplesort (const void* begin, const void* end)
{
  for (;;);
}
1
ответ дан 23 November 2019 в 20:52
поделиться