Формулировка сортировки списка как чисто математической задачи

Сортировка списка — классическая задача компьютерных наук, и было открыто много интересных алгоритмов, таких как сортировка слиянием и сортировка кучи.

Я хотел бы иметь точную формулировку задачи сортировки списка как чисто математической задачи, чтобы гипотетический чистый математик, никогда не слышавший о компьютерах (скажем, Гаусс), смог бы прочитать задачу, понять ее. , а затем изобретать такие алгоритмы, как сортировка слиянием и сортировка кучи.

Такое утверждение, как «разработать алгоритм сортировки списка чисел в порядке возрастания», неадекватно, поскольку в нем не указывается, какие основные операции разрешены для использования алгоритмом. И он также не говорит точно, что такое «алгоритм». Да, это должно быть что-то, что можно реализовать на ассемблере, но мы ставим задачу перед математиком, который никогда не слышал о компьютере.

Как только проблема будет точно сформулирована, станет возможным сформулировать и доказать такие теоремы, как «Время работы алгоритма быстрой сортировки в наихудшем случае равно О ( н 2 ) " с уровнем точности и строгости, которые соответствовали бы стандартам, скажем, маленького Рудина.

Вопрос: Как бы вы конкретно сформулировали задачу разработки алгоритма сортировки списка?

Дополнительный вопрос: знаете ли вы ссылку, в которой алгоритмы сортировки списков представлены как тема чистой математики с уровнем точности, который удовлетворил бы такого автора, как Рудин?


Изменить: это может сделать вопрос более конкретным. Начало главы 8 Введения в алгоритмы Кормена и др. [стр. 191 в третьем издании] говорится:

У этих алгоритмов есть интересное свойство: определяемый ими порядок сортировки основан только на сравнении входных элементов . Такие алгоритмы сортировки мы называем сортировками сравнения . Все представленные до сих пор алгоритмы сортировки являются сортировками сравнения.

В разделе 8.1 мы докажем, что любая сортировка сравнением должна Ом ( н LG н ) сравнения в худшем случае отсортировать н элементы.

Более конкретный вопрос: как бы вы сформулировали это утверждение именно как математическую теорему — тот факт, что любая сортировка методом сравнения Ом ( н LG н ) сравнения в худшем случае. Чтобы сделать это строгим, мы должны либо точно определить, что такое «сортировка сравнением», либо вообще избегать использования этого термина.

Мы предполагаем, что существует алгоритм, который может сравнивать любые два элемента в списке и возвращать что-то, указывающее, какой из них больше. Затем мы сравниваем методы сортировки на основе количества вызовов алгоритма. Это кажется мне прекрасной спецификацией.
@RossMillikan Разрешите ли вам, например, переместить элемент в нужное положение? Дж позиционировать я в списке? Это базовая операция, которая разрешена, или она должна быть достигнута с помощью некоторой комбинации других основных операций?
Как правило, вам разрешено манипулировать списком так, как вы хотите. Предполагается, что это не занимает много времени по сравнению со сравнением элементов.
Однако это не точное утверждение. Что значит "как хочешь". Кроме того, если список представляет собой массив чисел в памяти компьютера, перемещение элемента в позицию Дж в положение я требует перемещения большого количества данных в памяти (поскольку многие элементы в массиве должны быть сдвинуты на одну позицию), и неясно, можно ли пренебречь этими затратами.
Ключевое слово для поиска — «модель вычисления». Этот вопрос, по сути, звучит так: «Каковы конкретные модели вычислений для задачи сортировки?»
«Я хотел бы иметь точную формулировку задачи сортировки списка как чисто математической задачи, чтобы гипотетический чистый математик, никогда не слышавший о компьютерах (скажем, Гаусс)» слово «компьютер» изначально относилось к люди, которые выполняли вычисления, иногда для математиков. Гаусс, вероятно, использовал компьютеры и изобрел для них алгоритмы, как и многие математики.
Пока числа действительно можно сравнивать, а список конечен, в чем проблема? Если бы мы не заботились о скорости, то даже человек каменного века смог бы разработать метод ее решения и применить его, то есть мог бы создать алгоритм (хотя это слово могло быть неизвестным в то время). Я действительно не вижу смысла в этом вопросе.
@Peter Предположим, например, что мы сортируем экзамены (работы, на которых студенты написали решения) в соответствии с оценкой, написанной на экзамене, и у нас есть экзамены, разложенные в линию по полу. Если мы хотим поменять местами два экзамена, это будет быстрее, если экзамены будут физически ближе друг к другу. Должна ли эта деталь быть включена в постановку задачи? Разрешена ли только замена или мы можем, скажем, вставить один экзамен в другое место в списке? Даже если легко сформулировать проблему, мы все равно должны сформулировать ее точно. Я хотел бы услышать вашу формулировку.
@Peter «Если нас не волнует скорость» Нас волнует скорость — мы хотим найти алгоритмы, которые в каком-то смысле выполняют минимальное количество операций при сортировке списка. Но это утверждение нуждается в уточнении.

Ответы (4)

Существует несколько математических исследований алгоритмов сортировки, начиная с библии Кнута [3] по этой теме. Справочник [2] также предлагает строгий подход к алгоритмам и дает ряд ссылок.

Я не буду пытаться резюмировать в нескольких строках 790 страниц тома Кнута, но вот некоторые моменты, которые следует учитывать при математическом подходе к сортировке.

  1. Вам дан полностью упорядоченный н -набор элементов С "=" { а 1 < а 2 < < а н } . Первоначально массив, который нужно отсортировать, ( а о ( 1 ) , а о ( 2 ) , , а о ( н ) ) , где о является перестановкой { 1 , , н } .
  2. Обычно сложность (время) измеряет количество сравнений, необходимых для сортировки массива. Никакие другие параметры не учитываются. Таким образом, сравнения вида «есть а < б ?" - единственные рассматриваемые базовые операции. Таким образом, проблема полностью не зависит от реализации.
  3. Существует несколько показателей сложности, включая временную сложность (включая временную сложность в худшем случае ), среднюю временную сложность , пространственную сложность (которая измеряет объем памяти, используемый вашим алгоритмом), не говоря уже о более поздней амортизированной вычислительной сложности . В вашем вопросе вас, кажется, интересует наихудшая временная сложность.
  4. [EDIT] Минимальное количество сравнений , необходимое для сортировки н элементами является последовательность OEIS A036604 . См. [4] для недавнего вклада по этой теме.

В комментарии вы утверждаете, что

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

Это неправда. Например, вы можете поиграться с указателями в C (или ссылками в Java). Кроме того, ряд алгоритмов сортировки основан на перестановке двух позиций. я и Дж , который не нуждается ни в каком сдвиге. Чтобы ознакомиться с алгоритмами, [1] является одним из стандартных справочников, но есть и много других.

[1] Кормен, Томас Х., Лейзерсон, Чарльз Э., Ривест, Рональд Л. и Стейн, Клиффорд. Введение в алгоритмы. Третье издание. MIT Press, Кембридж, Массачусетс, 2009. xx+1292 стр. ISBN: 978-0-262-03384-8

[2] Гоннет, Гастон Х. и Баеза-Йейтс, Р., Справочник по алгоритмам и структурам данных . 2-е изд. (английский) Международная серия компьютерных наук. Бонн и др.: Издательство Addison-Wesley Publishing Company. XIV, 424 с. (1989).

[3] Кнут, Дональд Э. Искусство компьютерного программирования . Том. 3. Сортировка и поиск . Второе издание. Аддисон-Уэсли, Рединг, Массачусетс, 1998. xiv+780

[4] Печарски, Марцин (3 августа 2011 г.). На пути к оптимальной сортировке 16 элементов . Acta Universitatis Sapientiae 4 (2): 215–224.

Спасибо за ответ. Допустим, у нас есть массив (непрерывный блок памяти компьютера), в котором хранятся значения 3 , 1 , 7 , 3 , 5 , 9 , 2 . И мы хотим переместить элемент с позиции 6 на позицию 2, так что теперь значения в массиве будут 3 , 1 , 2 , 7 , 3 , 5 , 9 . Это требует перемещения кучи вещей в памяти, верно?
Это не имеет ничего общего с вашим вопросом, так как это зависит от используемой вами структуры данных. Массив не обязательно является непрерывным блоком памяти. Вы можете отлично отсортировать адреса н элементы вашего массива, а затем скопируйте все в новый блок памяти, если хотите, в самом конце.

Общие проблемы с определением алгоритмов на основе сравнения как чисто математической задачи

Ознакомьтесь с обсуждениями алгоритмов, основанных на сравнении (класс алгоритмов, включающий большинство алгоритмов сортировки) [0]. Это хорошая отправная точка для формализации, хотя определение этих алгоритмов в литературе остается слишком расплывчатым, чтобы удовлетворить чистого математика.

Ответ на ваш вопрос о том, что представляет собой алгоритм и каковы его основные операции, вы найдете в [0] и [4]. Для императивных языков программирования базовыми операциями обычно являются операции более низкого уровня, выполняемые конструкциями более высокого уровня (такими как циклы, условные операторы и т. д.). Их можно указать с самого начала при указании языка.

Распространенное «определение» состоит в том, что алгоритмы, основанные на сравнении, — это алгоритмы, для которых каждая базовая операция (перестановка, присвоение и т. д.) должна основываться на предшествующем сравнении (или последовательности сравнений). В этом определении алгоритмов, основанных на сравнении, есть пробел. (не единственный) Что действительно важно, так это то, что основные операции определяются на основе транзитивного замыкания результатов предшествующих сравнений.

Второй вопрос, на который следует обратить внимание, — это взаимосвязь между алгоритмами, основанными на сравнении, и производством частичного заказа (это поможет ответить на ваш вопрос о нижних границах). Это редко прописано в учебниках. Производство частичного порядка — это (среди прочего) подход к установлению более общих нижних границ для алгоритмов, основанных на сравнении, которые не обязательно должны быть алгоритмами сортировки[1]. Производство частичного порядка включает топологическую модель сортировки, обсуждаемую ниже.

Третьей проблемой (для математиков) является спецификация задействованных операций. Самой подробной презентацией будет третий том Кнута о сортировке и поиске (The Art of Computer Programming, Vol III), превосходный ресурс, уже упомянутый ранее. Даже при таком уровне точности чистый математик захочет абстрагироваться от деталей, что само по себе является проблемой. См. ниже противоречие между кодом и математикой.

Четвертая проблема — различие между неявными структурами данных [2] и явными. Для сортировки кучи обычно используется структура данных списка (массива). Однако неявная структура данных — это структура кучи, которая находится в уме программиста при написании кода, даже если структуры данных кучи не используются в коде явно (используются только массивы).

Наконец, существует статус анализа алгоритмов в целом, который остается смесью чистой и прикладной математики. Многие методики приспособлены к рассматриваемому алгоритму. Единого подхода нет. TAOCP Vol III Кнута будет содержать самую подробную информацию о формальном подходе (будь то с методами, адаптированными к различным алгоритмам). Работу Флажоле по анализу алгоритмов можно рассматривать как путь к унификации (хотя операции, используемые время от времени, отклоняются от широко используемых операций в информатике, чтобы гарантировать возможность применения производящих функций. Это, как всегда, создает напряженность между информатикой и математикой из-за код, чтобы соответствовать математике). Я написал книгу на эту тему, посвященную объединяющей теории, оставаясь ближе к стандартным вычислениям [3].

Предстоит проделать большую работу, чтобы вывести теорию на правильный уровень абстракции, чтобы соответствовать ожиданиям чистого математика (я полагаю, ваш первоначальный вопрос). Игра должна сбалансировать ясность и точность и достичь унификации при соблюдении реальных целей дисциплины (в данном случае CS).

Похоже, ваши вопросы также относятся к тому, что происходит на аппаратном уровне. Я бы рекомендовал A Guide to Experimental Algorithmics [4]. Эта область находится на полпути между чисто экспериментальным алгоритмическим анализом (слишком машинно-зависимым) и теоретическим анализом (машинно-независимым, но в некоторых отношениях слишком далеким от практики). Он использует методы, аналогичные контролируемой лабораторной среде в области компьютерных наук.

Приведенные выше наброски показывают, почему формальное определение алгоритмов, основанных на сравнении, является сложной задачей. Это может быть сделано. Например, [3] делает это для ограниченного класса (специально направленного на реализацию модульной синхронизации в среднем случае). [1] считает, что все алгоритмы, основанные на сравнении, имеют вычисления, которые (для списков фиксированного размера н ) можно смоделировать с помощью деревьев решений. Следовательно, [1] придерживается мнения, что алгоритмы отождествляются с деревьями (т. е. алгоритмы для производства частичного порядка в [1] просто считаются деревьями решений с определенными свойствами). Как только этот скачок сделан, возникает чисто математический контекст, основанный на деревьях решений и топологических сортировках. Он обходит ваш вопрос формальной структурой, в которой общие вычисления, основанные на сравнении, формулируются таким образом, который удовлетворяет чистого математика (или, скажем, теоретика-компьютерщика). Я считаю, что это, безусловно, можно сделать, т. е. должна существовать логика, в которой фиксируются вычисления, основанные на сравнении. Я не знаю ссылки, которая делает это (и было бы интересно, если бы у кого-нибудь она была).

Отправная точка для решения чисто математической формулировки [1,3,5]

Следующий подход можно рассматривать как чисто математическую постановку задачи. Это связано с подходом Яо в ​​[1], а также с подходом в [3], где оба используют топологическую сортировку для моделирования вычислений на основе сравнения. Вместо того, чтобы сосредотачиваться на коде, основное внимание уделяется функциям ввода-вывода, связанным с выполняемыми операциями. в коде (подход в стиле семантики).

Правило взаимодействия дизайнера: транзитивное закрытие

Общее определение алгоритмов, основанных на сравнении, заключается в том, что каждая базовая операция (перестановка, присвоение и т. д.) должна основываться на предшествующем сравнении или последовательности сравнений. В этом определении есть досадный пробел. Что действительно важно, так это то, что основные операции определяются на основе транзитивного замыкания результатов предшествующих сравнений. Позволять к 2 .

Для алгоритма сортировки, такого как пузырьковая сортировка, каждый обмен между элементами списка является прямым результатом сравнения между этими двумя элементами. Для быстрой сортировки два элемента а , б можно сравнить с поворотным элементом п , и может быть заменен на том основании, что а > п и п > б Несмотря на то а и б никогда не сравнивались напрямую. Обмен выполняется на основе транзитивного замыкания информации, полученной при упорядочении элементов до этой точки вычисления. На этом этапе вычислений разработчик алгоритма знает все отношения порядка между сравниваемыми парами меток, а также любые законно выведенные отношения порядка, т.е. полученные посредством транзитивного замыкания. Именно этот набор отношений, и только этот набор, поддерживает решения разработчика о включении выполнения основных кодовых операций.

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

Обратите внимание, что от дизайнера не требуется, чтобы свопы соответствовали заданному порядку. Разработчик должен убедиться, что алгоритм выдает правильные результаты. Приблизят ли выполненные свопы алгоритм к этой цели или нет — это решение, которое должно быть принято, но не решение, которое навязывается. Единственное требование состоит в том, чтобы в конце был достигнут «целевой» порядок (указанный как часть спецификаций алгоритма). Чтобы установить целевой порядок, который должен быть достигнут в конце, вводится модель топологической сортировки.

Фильтрация информации о заказе и соответствующая перестановка данных

Каждое сравнение, сделанное во время вычисления на основе сравнения, определяет, встречаются ли две метки по порядку или не по порядку . Каждое сравнение отфильтровывает один дополнительный бит информации о данных: 0 для неупорядоченной пары и 1 для правильной пары.

Когда сравнение было сделано между двумя ярлыками а и б установив, что а б в линейном порядке по меткам мы ссылаемся на пару ( а , б ) как отфильтрованная пара . В случае а б установлено, мы ссылаемся на пару ( б , а ) как отфильтрованная пара .

Установленный порядок ввода

Для любого выполнения алгоритма сравнения на входе я и любое сравнение, сделанное в этом выполнении, установленный входной порядок (до этого момента вычисления) является частичным порядком, полученным путем транзитивно-рефлексивного закрытия отфильтрованных пар, полученных во время вычисления до этого сравнения включительно.

Порядок ввода это частичный порядок ввода, достигнутый при производстве вывода для я , т.е. установленный порядок ввода для последнего сделанного сравнения.

При выполнении алгоритма на основе сравнения две метки можно поменять местами (или переместить с помощью других основных операций). Обмен — это перестановка, которая представляет собой одну транспозицию входных данных с заменой двух меток.

Алгоритмы на основе сравнения выполняются:

  • (неявная) фильтрация данных с помощью сравнений и
  • (явно) перестановка данных с использованием только свопов (или других базовых операций) на парах, включенных в установленный порядок ввода.

Процесс фильтрации

Процесс фильтрации неявным образом собирает дополнительную информацию о линейном порядке входных данных на метках. Эта информация фиксируется установленным порядком ввода. Процесс фильтрации также разделяет входные данные на наборы, удовлетворяющие установленному порядку ввода.

Рассмотрите любую сортировку на основе сравнения и любой входной список л размера н хранение, для простоты, отдельных элементов. После первого сравнения определяется порядок между двумя элементами списка. л [ я ] и л [ Дж ] с я < Дж , возможные входы, для которых будет принято это решение, уменьшаются вдвое (от н ! к н ! 2 списки). Эти входные данные теперь относятся только к спискам, для которых л [ я ] < л [ Дж ] если это был результат сравнения, или списки, для которых л [ Дж ] > л [ я ] в противном случае.

Алгоритмы сортировки на основе сравнения постепенно собирают информацию о упорядочении пар, зафиксированную в установленном порядке ввода для элементов списка. В любой момент вычисления, т. е. после каждого сравнения, этот порядок может быть интерпретирован для фильтрации входных списков, которые не удовлетворяют порядку, установленному до этого момента.

Процесс фильтрации входных данных, не удовлетворяющих установленному порядку, является неявным. Это не часть кода. Однако это часть задуманного программистом проекта алгоритма.

Процесс перестановки

Процесс перестановки выполняется каждым алгоритмом, основанным на сравнении, в соответствии с его кодом . Для любого входа алгоритм на основе сравнения может выполнять серию обменов (или, в более общем смысле, базовых операций) над парами меток. Композиция этих свопов образует перестановку, которая преобразует исходный ввод в вывод. На данном этапе мы сосредоточимся исключительно на алгоритмах сортировки на основе сравнения.

После каждого сравнения каждый алгоритм сортировки на основе сравнения имеет возможность переставлять метки данных, чтобы соответствовать предполагаемому порядку сортировки выходных списков. Например, если перечислены элементы л [ я ] и л [ Дж ] определяются как происходящие не по порядку с помощью сортировки на основе сравнения, т.е. л [ Дж ] > л [ я ] где я < Дж , то можно произвести замену, чтобы установить их относительный порядок, соответствующий вычисляемому отсортированному выводу.

Для любой сортировки на основе сравнения объединенный процесс фильтрации ввода и перестановки ввода имеет следующий эффект:

  • К моменту вычисления выходных данных возможные входные данные были отфильтрованы до единого списка.

  • Процесс перестановки, выполняемый алгоритмом на этом входе, т. е. составление набора свопов, выполненных до этой точки на входе, дает отсортированный результат.

Это естественным образом приводит к следующей математической модели, фиксирующей «исходный» и «целевой» порядки для вычислений на основе сравнения.

Модель топологической сортировки

Математическая модель

Математическая модель алгоритмов сравнения [1] и [3] состоит из двух частей:

(а) моделирование структур данных как частично упорядоченных конечных множеств;

(б) моделирование данных о них по топологическим сортам;

С этой точки зрения абстрактная спецификация алгоритма сортировки имеет входное состояние, заданное любой возможной перестановкой конечного набора элементов (представленного, согласно (а) и (б), дискретным частично упорядоченным набором вместе с его топологическими сортами. задается всеми перестановками) и выходным состоянием является отсортированный список элементов (представленный, опять же в соответствии с (a) и (b), линейно упорядоченным конечным множеством с его уникальной топологической сортировкой).

Пример 1: (неупорядоченные) входные списки размера 2 алгоритма сортировки моделируются топологическими сортировками дискретного порядка размера 2 по набору элементов { Икс 1 , Икс 2 } :

{ ( Икс 1 : 1 , Икс 2 : 2 ) , ( Икс 1 : 2 , Икс 2 : 1 ) }

Значения функции с ( Икс 1 ) "=" 2 и с ( Икс 2 ) "=" 1 скажем, топологического типа с "=" ( Икс 1 : 2 , Икс 2 : 1 ) (по дискретному порядку размера 2) называются метками и соответствуют, в случае структуры данных списка, элементам списка. Местонахождение я этикетки а для которого с ( Икс я ) "=" а называется индексом метки и соответствует положению элемента в списке. Список ( 2 , 1 ) содержит элемент 2 в позиции 1 (т.е. индекс Икс 1 ) и элемент 1 в позиции 2 (т.е. индекс Икс 2 ). Мы говорим, что индекс метки 2 равен 1, а индекс метки 1 равен 2 для этой топологической сортировки. 2! топологические сорта { ( Икс 1 : 1 , Икс 2 : 2 ) , ( Икс 1 : 2 , Икс 2 : 1 ) } состоят из 2 перестановок, представляющих неупорядоченные списки ( 1 , 2 ) и ( 2 , 1 ) . Эти топологические сортировки формируют корневые состояния, в которых могут встречаться списки размера 2 (с различными элементами). Действительно, список размера 2 либо отсортирован, представлен ( 1 , 2 ) , или отсортированный в обратном порядке, представленный ( 2 , 1 ) . Вместе эти топологические сорта образуют пространство состояний . Пространство состояний интуитивно служит для представления равномерного распределения по данным: каждый из бесконечного множества возможных входных списков ( а , б ) Предполагается, что размер 2 (с различными элементами) возникает с равной вероятностью в одном из двух корневых состояний пространства состояний. Эта интерпретация служит основой для традиционного анализа сложности алгоритмов, отправной точкой которого является равномерное распределение.

Пример 2: Тривиальная сортировка списков размера 2

Вычисления преобразуют топологические сортировки в новые топологические сортировки. Все расчеты будут основаны на сравнениях. Например, рассмотрим алгоритм сортировки, пусть даже очень примитивный, который работает только со списками размера 2 и выполняет однократное сравнение двух элементов списка (меток соответствующей топологической сортировки). За этим сравнением следует замена меток в случае, если эти метки вышли из строя. Такой алгоритм оставляет топологическую сортировку ( Икс 1 : 1 , Икс 2 : 2 ) без изменений и преобразовать топологическую сортировку ( Икс 1 : 2 , Икс 2 : 1 ) через один своп на топологическую сортировку ( Икс 1 : 1 , Икс 2 : 2 ) . Сортировка в этой модели производит уникальную топологическую сортировку в линейном порядке.

Часть (а) описания модели предусматривает, что мы используем конечные частичные порядки для представления структур данных. Этот порядок может быть явно или неявно представлен в структуре выходных данных в зависимости от реализации. Например, в случае формирования кучи из неупорядоченного входного списка вычисление может установить кучу явно путем преобразования входного списка в структуру данных двоичного дерева, удовлетворяющую свойству кучи, и представляет собой кучу де-факто. В качестве альтернативы алгоритм может взять входной список и сохранить структуру данных списка для своих выходов. Элементы входного списка будут реорганизованы на месте, то есть будет создан новый список, элементы которого удовлетворяют структуре кучи. Древовидная структура, лежащая в основе этой кучи, остается «неявной» частью реализации. Алгоритм для всех целей использует структуру кучи, задуманную программистом, но структура данных всегда остается списком во время вычислений. это, например, случай для процесса Heapify в традиционной (на месте) Heapsort. В этом случае мы называем структуру кучи неявной структурой данных , а структуру данных списка — явной структурой данных . Они могут совпадать или не зависеть В нашем контексте частичные заказы моделируют неявную структуру данных.

Базовый пример вычислительной модели: алгоритмы сортировки

Мы иллюстрируем (a), (b) модели алгоритма сортировки, работающего со списками размера н .

Для алгоритмов сортировки входными данными являются структуры данных списка, представленные конечными дискретными порядками. Элементы порядка помечены положительными целыми числами, взятыми из линейно упорядоченного набора меток. л , что в данном случае является обычным линейным порядком положительных целых чисел. Единственное требование к этой маркировке состоит в том, что ее комбинация с дискретным порядком образует топологический сорт.

Можно работать со списками, содержащими повторяющиеся элементы. Они должны быть смоделированы топологическими сортировками, для которых условия смягчены, чтобы можно было повторять метки. См. [3] для обсуждения того, как повторяющиеся метки могут быть обработаны посредством назначения случайных прерывателей связи. Стандартной практикой в ​​алгоритмическом анализе является проведение анализа в первую очередь для списков без повторяющихся элементов — подход, принятый здесь.

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

Алгоритмы сортировки представляют собой ограничительный тип алгоритма, основанного на сравнении. Входные данные представляют собой неупорядоченные списки размера н которые происходят в н ! возможные состояния. Выходы происходят ровно в одном состоянии, отсортированный список выходов [ 1 , 2 , 3 , , н ] .

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

Источник и цель алгоритма

Рассмотрим последовательность α "=" ( α н ) н конечных частично-множественных множеств размера н и последовательность β "=" ( β н ) н уточнений ( α н ) н , т.е. α н уточняет порядок β н для каждого н . Пара ( α , β ) называется уточнением с источником α "=" ( α н ) н и цель β "=" ( β н ) н .

Алгоритм А осуществляет уточнение ( α , β ) в случае:

входы размера н , рассматриваемые как множество, образуют пространство состояний над исходным порядком α . Напомним, что для любого конечного ч.у.м. α , пространство состояний Σ ( α ) множество всех топологических сортов с метками в { 1 , , н } где н "=" | α | .

соответствующие выходы, рассматриваемые как набор, образуют пространство состояний Σ ( β н ) .

Σ ( α н ) называется исходным пространством (для входных данных размером н ).

Σ ( β н ) называется целевым пространством (для входных данных размера н ).

С некоторым злоупотреблением терминологией: если α "=" ( α н ) н является источником такого алгоритма, основанного на сравнении А и мы рассматриваем входы размера н , затем α н также упоминается как «источник».

Алгоритм на основе сравнения можно рассматривать как алгоритм, который выполняет основные операции исключительно на основе транзитивного закрытия предыдущих сравнений, фильтрации и перестановки на каждом этапе, так что для данного источника α и цель переработки β , алгоритм реализует уточнение. В качестве альтернативы можно абстрагироваться от кода и полностью сосредоточиться на деревьях решений [1].

Пример: для алгоритма сортировки на основе сравнения А источник - это последовательность Δ "=" ( Δ н ) н дискретных порядков размера н и целью является последовательность л "=" ( л н ) н линейных порядков размера н .

Для основанного на сравнении алгоритма heapify, который преобразует неупорядоченные списки размера н к кучам, источником является последовательность дискретных порядков Δ "=" ( Δ н ) н . Целью является последовательность ЧАС "=" ( ЧАС н ) н где ЧАС н является помножеством, определяемым диаграммой Хассе кучи размера н .

Модель топологической сортировки поддерживает нижние границы сложности для общих алгоритмов, основанных на сравнении (т. е. алгоритмов, которые не обязательно должны быть сортировками).

Энтропийное отношение

Если А представляет собой основанный на сравнении алгоритм с входными данными размера н происходит к состояния и выходы, происходящие в л состояния, то исходная энтропия (т.е. входная энтропия) ЧАС А с ( н ) "=" л о г 2 к и целевая энтропия ЧАС А т ( н ) "=" л о г 2 ( л ) .

Энтропийный коэффициент (ER) Предполагается, что исходные состояния, а также целевые состояния возникают с равной вероятностью, т. е. равномерно распределены.

Рассмотрим алгоритм, основанный на сравнении А с входами с корневыми состояниями над источником α н и выводит с корневыми состояниями над целью β н . Позволять к "=" | Σ ( α н ) | обозначают размер исходного пространства и л "=" | Σ ( β н ) | размер целевого пространства.

Коэффициент энтропии - это разница между исходной и целевой энтропиями, обозначаемая как Δ ЧАС А :

Δ ЧАС А ( н ) "=" ЧАС А с ( н ) ЧАС А т ( н ) "=" л о г 2 ( к л )
в л о г 2 отношения размера исходного пространства к размеру целевого пространства.

Теорема (см. [1], [5]) (нижняя граница ER): рассмотрим алгоритм, основанный на сравнении А с источником α и цель β , а с входами А размера н происходит в к корневые состояния и выходы, происходящие в л корневые состояния, т.е. А имеет коэффициент энтропии Δ ЧАС А "=" л о г 2 к л .

Следующие нижние границы времени сравнения в наихудшем и среднем случаях справедливы для каждого алгоритма, основанного на сравнении. А такого характера:

Т А Вт ( н ) Δ ЧАС А  и  Т ¯ А ( н ) Δ ЧАС А

Нижняя граница для алгоритмов сортировки на основе сравнения А

Нижняя граница

Δ ЧАС А ( н ) "=" л о г 2 ( н ! 1 ) "=" л о г 2 ( н ! )
ER в этом случае представляет собой обычную теоретико-информационную нижнюю границу, т. е. энтропию входных данных, обеспечивающую нижнюю границу для наихудшего и среднего времени.

Нижняя граница для построения идеальных куч размера 7 Рассмотрим алгоритм, основанный на сравнении ЧАС * построение идеальных куч из неупорядоченных списков размера 7 . Есть 7 ! 63 идеальные кучи размера 7 . Следовательно

Δ ЧАС ЧАС * ( 7 ) "=" л о г 2 ( 7 ! 7 ! 63 ) "=" 63

Модель топологической сортировки из [1] является наиболее близким подходом к чисто математической постановке задачи для вычислений на основе сравнения. Он не углубляется в синтаксис (код) алгоритмов, но идентифицирует алгоритмы, основанные на сравнении, с деревьями решений, моделирующими пути их вычислений.

[0] Искусство компьютерного программирования, Том III, Сортировка и поиск, Д. Кнут, Аддисон-Уэсли, 1998.

[1] О сложности продукции частичного порядка, Эндрю Чи-Чи Яо, SIAM J. COMPUT. Том. 18, № 4, стр. 679-689, Общество промышленной и прикладной математики, 1989.

[2] Манро, Дж. Ян; Суванда, Хендра; «Неявные структуры данных для быстрого поиска и обновления». Журнал компьютерных и системных наук. 21 (2): 236–250, 1980.

[3] Шеллекенс, М.; Модульное исчисление средней стоимости структурирования данных, 2008 г.

[4] МакГеог, Кэтрин С.; Руководство по экспериментальной алгоритмике, CUP. 2012.

[5] Schonhage, A. (1976), Производство посетов, Asterisque 38-39:229-246.

Спасибо, это было очень ярко!
Похоже, ваши вопросы также относятся к тому, что происходит на аппаратном уровне. Я бы рекомендовал Кембриджскую пресс-книгу: Руководство по экспериментальной алгоритмике Кэтрин c. МакГеог. Эта область находится на полпути между чисто экспериментальным алгоритмическим анализом (слишком машинно-зависимым) и теоретическим анализом (машинно-независимым, но в некоторых отношениях слишком далеким от практики). Он использует методы, аналогичные контролируемой лабораторной среде в области компьютерных наук.
@littleO Я обновил ответ, чтобы отразить чисто математический подход.
Спасибо! Я начал новую награду, чтобы вознаградить этот ответ.
Спасибо. Ваш вопрос побудил меня сформулировать определение алгоритма, основанного на сравнении. Надеюсь, все ясно.
@littleO Спасибо! Рад, что ответ был полезен. Я работаю над книгой, посвященной вычислениям на основе сравнения, в которой эта тема будет рассмотрена более подробно.

Сортировки сравнения часто определяются без ссылки на алгоритмы.

Определение : сортировка сравнением н elements представляет собой корневое двоичное дерево, в котором

  • каждый узел в помечен набором перестановок п ( в ) С н ,
  • каждый внутренний узел в помечен парой различных индексов 1 я в < Дж в н ,
  • для корневого узла в , у нас есть п ( в ) "=" С н ,
  • для любого листового узла в , у нас есть | п ( в ) | 1 ,
  • для любого внутреннего узла в , его левый и правый потомки в < и в > удовлетворить
    п ( в < ) "=" { о е п ( в ) о я в < о Дж в } , п ( в > ) "=" { о е п ( в ) о я в > о Дж в } .

Например, вот сравнительная сортировка по 3 элементам:

пример

(Вы можете — но не обязаны — думать о сортировке сравнением как о дереве решений алгоритма, где на каждом шаге п ( в ) представляет набор возможных порядков; алгоритм выбирает индексы я в и Дж в и сравнивает элементы по этим индексам, чтобы сузить набор возможностей.)

Теорема: высота любой сортировки сравнением на н элементы Ом ( н LG н ) .

Доказательство: бинарное дерево высоты час имеет не более 2 час листья, но сортировка сравнением имеет по крайней мере н ! , так час LG н ! "=" Ом ( н LG н ) . ∎

Я тоже боролся с этим. Теперь, когда я посещаю некоторые курсы по теоретической чистой математике... Я пытался переопределить или попытаться получить «статическое» определение алгоритма и не пытался использовать какой-либо «глагол», например, сравнить , двигаться и т. д. Определение Кнута предполагает, что существует по крайней мере модель машины Тьюринга или фон Неймана. Для математиков не должно быть машинной модели для теоретического анализа. Вот кое-что, что, как мне кажется, ближе к математическому мышлению... Ни в коем случае не строгое... но я демонстрирую подход.

Defn: Пусть набор А "=" { а я } 0 я н . Позволять о : А А быть отсортированной по возрастанию картой, такой что о ( а я ) "=" а к со следующим ограничением

  1. Если я < Дж затем о ( а я ) о ( а Дж ) (возрастающая карта)
  2. Пусть «карты алгоритмов» будут семейством функций ф т : { [ 0 , 1 ] , о } { А , Б т { а к + 1 } , Б 1 } где Б т "=" { а к } к н А такое, что... (1) выполняется для Б т и о ( а я ) "=" а я если я > к . ф ( 0 , о ) "=" А , ф ( 1 , о ) "=" Б 1 и к "=" н . Вовремя т ф ( т , о ) "=" Б т { а к + 1 } и существует такой к и Б т .

Самая быстрая карта алгоритма ф т где т минимальна. Это не зависит от модели, такой как Тьюринг или ОЗУ и т. д. Это сродни определениям «ретракции деформации» из алгебраической топологии, например,

Тем не менее, я бы сказал, что в математике все еще есть некоторые «глаголы», такие как «вращение» или групповая операция, например, которые невольно вводят физический мир. ИМХО их должно быть как можно меньше