Сортировка в области компьютерных наук и сортировка в "реальном" мире

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

С учетом сказанного, похоже, что почти все алгоритмы сортировки, программное обеспечение должно знать положение каждого элемента. Что имеет смысл, иначе, как бы он знал, где разместить каждый элемент в соответствии с некоторыми критериями сортировки?

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

Было бы возможно с некоторыми накладными расходами на каждом node (какое-то значение или метод, привязанный к каждому из узлов), чтобы "принудительно" упорядочить список? Что-то вроде центрифуги, где только каждый элемент заботится об относительном положении в пространстве (по отношению к другим узлам). Или это нарушает какое-то правило при вычислении?

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

Возможно, классические компьютеры по сути ограничивают сортировку в домене O(nlogn), где, поскольку квантовые компьютеры могут пересечь этот порог в алгоритмы O(logn), которые действуют параллельно.

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

Я предполагаю, что следующая мысль заключается в том, что если природа может сортироваться в O(n), почему компьютеры не могут быть?

Ответ 1

EDIT: я неправильно понял механизм центрифуги, и кажется, что он проводит сравнение, в котором есть параллель. Однако существуют физические процессы, которые работают над свойством сортируемого объекта, а не сравнивают два свойства. Этот ответ охватывает алгоритмы, которые имеют такую ​​природу.

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

Некоторые другие не сравнительные алгоритмы сортировки Сортировка bucket и Counting Sort. Вы можете обнаружить, что сортировка ковша также вписывается в общую идею центрифуги (радиус может соответствовать корзине).

Другим так называемым "алгоритмом сортировки", где каждый элемент рассматривается изолированно, является Sleep Sort. Здесь время, а не центробежная сила, действует как величина, используемая для сортировки.

Ответ 2

Сложность вычислений всегда определяется относительно некоторой вычислительной модели. Например, алгоритм, что O (n) на типичном компьютере может быть O (2 n), если он реализован в Brainfuck.

Расчетная модель центрифуги имеет некоторые интересные свойства; например:

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

Учитывая, что у нас нет возможности реализовать что-то подобное в аппаратных средствах общего назначения, модель может не иметь практической значимости; но его все равно стоит изучать, чтобы узнать, есть ли что-нибудь, что можно извлечь из него. Недетерминированные алгоритмы и квантовые алгоритмы были активными областями исследований, например, хотя ни один из них не реализуется сегодня.

Ответ 3

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

Рассмотрим вопрос: "Как долго вы должны запускать свою центрифугу?"
Если вы только запустили его на пикосекунду, ваш образец может быть менее отсортирован, чем начальное состояние.. или если вы запустили его на несколько дней, он может быть полностью отсортирован. Однако вы не знаете, не проверяя содержимое.

Ответ 4

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

Для "сортировки" дроны могут быть запрограммированы на формирование линии или шаблона в определенном порядке, первоначально выпущенном в любой перестановке или форме, и вместе и параллельно они быстро формируют упорядоченную линию или шаблон.

Возвращаясь к сортировке на компьютере, одна проблема заключается в том, что есть одна основная шина памяти, и нет возможности для большого количества объектов перемещаться в памяти параллельно.

знать положение каждого элемента

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

Ответ 5

ИМХО, люди опрокидывают журнал (n). O (nlog (n)) IS практически O (n). И вам нужно O (n) только для чтения данных.

Многие алгоритмы, такие как quicksort, обеспечивают очень быстрый способ сортировки элементов. Вы можете реализовать варианты быстрой сортировки, которые были бы очень быстрыми на практике.

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

Из комментариев:

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

  • Еще один способ подумать об этом - скажем, у вас есть маленький процессор, подключенный к каждому номеру, и каждый процессор может общаться со своими соседями, вы можете сортировать все эти числа в O (log (n)) времени.

Ответ 6

Я работал в офисе летом после окончания школы, когда начал учиться. Я изучал в AP Computer Science, среди прочего, сортировку и поиск.

Я применил это знание в нескольких физических системах, которые я могу вспомнить:

Сортировка естественного слияния для запуска...

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

Я начал с кучи их и сначала разобрал кучу. Первый шаг - собрать 5 или около того, достаточно немногих, чтобы их можно было легко расположить в руке. Поместите отсортированный пакет вниз, пересекая каждый стек, чтобы разделить их.

Затем объедините каждую пару стеков, создав больший стек. Повторяйте, пока не будет только один стек.

... Сортировка вставки для завершения

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

Сорт Radix

Этот никто еще не понимал, как я делал это так быстро, несмотря на неоднократные попытки научить его.

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

Обычно

30 лет назад я заметил то, о чем вы спрашиваете: передача идей в физические системы совершенно напрямую, потому что существуют относительные затраты сравнений и обработки записей, а уровни кеширования.

Переход за хорошо понятые эквиваленты

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

Затем вы схватите связку и коснитесь одного конца на столе. Они выравниваются по нижним краям, и теперь они сортируются. Вы можете тривиально снять самый длинный и повторить. Считывание также O (n).

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

Во-вторых, как выравнивание ребер выполняет сортировку? Реальная сортировка - это считывание, которое позволяет вам найти самый длинный за один шаг, даже если вы сравнили все их, чтобы найти самый длинный. Опять же, разделим на множитель n, поэтому найти наибольший теперь O (1).

Другим примером является использование аналоговых вычислений: физическая модель решает проблему "мгновенно", а подготовка - O (n). В принципе, вычисление масштабируется с количеством взаимодействующих компонентов, а не количеством подготовленных элементов. Таким образом, вычисление масштабируется с n². Пример, который я имею в виду, представляет собой взвешенное многофакторное вычисление, которое было выполнено путем сверления отверстий на карте, подвешивания весов от строк, проходящих через отверстия, и сбора всех строк на кольце.

Ответ 7

Сортировка по-прежнему O (n) общее время. Это быстрее, чем из-за Параллелизации.

Вы можете просмотреть центрифугу как Bucketsort из n атомов, распараллеленных над n ядрами (каждый атом действует как процессор).

Вы можете сделать сортировку быстрее путем распараллеливания, но только постоянным фактором, поскольку количество процессоров ограничено, O (n/C) все еще O (n) (у процессоров обычно есть < 10 ядер и графические процессоры < 6000)

Ответ 8

Центрифуга не сортирует узлы, она применяет силу к ним, а затем реагирует параллельно ей. Поэтому, если вы собираетесь реализовать сортировку пузырьков, где каждый node будет перемещаться параллельно или вниз на основе "плотности", у вас будет реализация центрифуги.

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

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

Ответ 9

Было бы возможно с некоторыми накладными расходами на каждом node (некоторое значение или метод, привязанный к каждому из узлов), чтобы "заставить" порядок список?

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

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

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

Итак, чтобы ответить на этот вопрос, разве мы не делаем что-то подобное в сортировке на основе программного обеспечения?

Ответ 10

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

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

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

Ответ 11

Другая перспектива заключается в том, что то, что вы описываете с помощью центрифуги, аналогично тому, что называлось "сортировкой спагетти" (https://en.wikipedia.org/wiki/Spaghetti_sort). Скажите, что у вас есть коробка из сырых спагетти с разной длиной. Держите их в кулаке и ослабьте руку, чтобы опустить их вертикально, чтобы концы все опирались на горизонтальный стол. Boom! Они отсортированы по высоте. O (постоянное) время. (Или O (n), если вы включаете сбор выводов по высоте и поместите их в стойку с спагетти, я думаю?)

Вы можете заметить, что O (константа) в количестве кусков спагетти, но из-за конечной скорости звука в спагетти это O (n) в длине самой длинной нити. Так что ничего не приходит бесплатно.

Ответ 12

Рассмотрим: "сортировка центрифуги" действительно лучше масштабируется? Подумайте о том, что происходит при масштабировании.

  • Пробирки должны быть длиннее и длиннее.
  • Тяжелый материал должен путешествовать все дальше и дальше, чтобы добраться до дна.
  • Момент инерции увеличивается, требуя большей мощности и более длительного времени для ускорения до скорости сортировки.

Также стоит рассмотреть другие проблемы с сортировкой центрифуг. Например, вы можете работать только в узкой шкале размера. Алгоритм сортировки компьютеров может обрабатывать целые числа от 1 до 2 ^ 1024 и выше, без пота. Поместите то, что весит в 2 ^ 1024 раза больше, чем атом водорода, в центрифугу и, ну, что черная дыра и галактика были уничтожены. Ошибка алгоритма.

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