it-roy-ru.com

Сортировка в информатике против сортировки в "реальном" мире

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

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

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

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

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

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

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

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

87
Kris

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

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

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

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

72
user1952500

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

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

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

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

36
ruakh

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

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

30
ti7

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

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

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

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

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

5
rcgldr

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

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

Естественное слияние, чтобы начать ...

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

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

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

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

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

Radix sort

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

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

В общем

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

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

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

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

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

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

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

4
JDługosz

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

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

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

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

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

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

4
ElKamina

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

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

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

3
Siphor

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

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

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

2
Foxtrot Romeo

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

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

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

1
Mr.Q

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

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

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

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

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

1
Sudip Bhandari

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

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

0
eac2222

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

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

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

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

0
Craig Gidney