Я думал об алгоритмах сортировки в программном обеспечении и возможных способах преодоления O(nlogn)
препятствий. Я не думаю, что с практической точки зрения можно сортировать быстрее, поэтому, пожалуйста, не думайте, что я это делаю.
С учетом сказанного, похоже, что почти для всех алгоритмов сортировки программное обеспечение должно знать положение каждого элемента. Что имеет смысл, иначе как он узнает, где разместить каждый элемент в соответствии с некоторыми критериями сортировки?
Но когда я скрестил это мышление с реальным миром, центрифуга понятия не имела, в каком положении находится каждая молекула, когда она «сортирует» молекулы по плотности. На самом деле, его не волнует положение каждой молекулы. Однако он может отсортировать триллионы и триллионы предметов за относительно короткий период времени из-за того, что каждая молекула следует законам плотности и гравитации, что заставило меня задуматься.
Можно ли с некоторыми накладными расходами на каждом узле (какое-то значение или метод, прикрепленный к каждому из узлов) «принудительно» упорядочить список? Что-то вроде центрифуги, где только каждый элемент заботится о своем относительном положении в пространстве (по отношению к другим узлам). Или это нарушает какое-то правило вычислений?
Я думаю, что один из важных моментов, затронутых здесь, - это квантово-механические эффекты природы и то, как они применяются параллельно ко всем частицам одновременно.
Возможно, классические компьютеры по своей сути ограничивают сортировку областью O(nlogn)
, где, как квантовые компьютеры, могут преодолевать этот порог в O(logn)
алгоритмах, действующих параллельно.
Утверждение о том, что центрифуга, по сути, представляет собой сортировку с параллельными пузырьками, кажется правильным, что имеет временную сложность O(n)
.
Думаю, следующая мысль заключается в том, что если природа может сортировать O(n)
, то почему компьютеры?
n
процессоры (ядра) для сортировки массива простыхn
элементов, вы можете легко добитьсяO(n)
сложности. Горькая правда заключается в том, что нам обычно приходится сортировать длинные массивы (тысячи и миллионы элементов) на процессоре только с 2..10 ядрами.O(n)
сам по себе ничего не говорит вам - это полезно только для сравнения алгоритмов с похожими ограничениями и работающих на схожих архитектурах; во вводных курсах по алгоритмической сложности мы используем очень упрощенную модель «компьютера», которая имеет мало общего с центрифугами или реальными компьютерами :)Ответы:
РЕДАКТИРОВАТЬ: Я неправильно понял механизм центрифуги, и, похоже, он выполняет сравнение, причем массово-параллельное. Однако существуют физические процессы, которые работают со свойством сортируемой сущности, а не сравнивают два свойства. Этот ответ касается алгоритмов такого рода.
Центрифуга применяет механизм сортировки, который на самом деле работает не путем сравнения элементов, а на основе свойства («центробежная сила») каждого отдельного элемента в отдельности.Некоторые алгоритмы сортировки относятся к этой теме, особенно Radix Sort . При распараллеливании этого алгоритма сортировки он должен приближаться к примеру центрифуги.Некоторые другие алгоритмы несравнительной сортировки - это сортировка по сегментам и сортировка с подсчетом . Вы можете обнаружить, что сортировка Bucket также вписывается в общую идею центрифуги (радиус может соответствовать бункеру).
Еще один так называемый «алгоритм сортировки», в котором каждый элемент рассматривается изолированно, - это спящая сортировка . Здесь время, а не центробежная сила, действует как величина, используемая для сортировки.
источник
Вычислительная сложность всегда определяется относительно некоторой вычислительной модели. Например, алгоритм, который O ( n ) на типичном компьютере, может быть O (2 n ), если он реализован в Brainfuck .
Вычислительная модель центрифуги обладает некоторыми интересными свойствами; например:
Учитывая, что у нас нет возможности реализовать что-то подобное в вычислительном оборудовании общего назначения, модель может не иметь практического значения; но его все же стоит изучить, чтобы увидеть, можно ли из него чему-нибудь научиться. Например, недетерминированные алгоритмы и квантовые алгоритмы были активными областями исследований, хотя ни один из них фактически не реализуем сегодня.
источник
Уловка в том, что у вас есть только вероятность отсортировать свой список с помощью центрифуги. Как и в случае с другими реальными сортировками [необходима ссылка], вы можете изменить вероятность того, что вы отсортировали свой список, но никогда не будьте уверены, не проверив все значения (атомы).
Обдумайте вопрос: «Как долго вы должны эксплуатировать центрифугу?»
Если вы запускали его только в течение пикосекунды, ваша выборка может быть менее отсортирована, чем исходное состояние ... или если вы запускали ее в течение нескольких дней, она может быть полностью отсортирована. Однако вы бы не узнали, не проверив содержимое.
источник
Реальным примером компьютерного «упорядочивания» могут быть автономные дроны, которые совместно работают друг с другом, известные как «рой дронов». Дроны действуют и общаются как по отдельности, так и в группе, и могут отслеживать несколько целей. Дроны коллективно решают, какие дроны будут следовать за какими целями, и очевидную необходимость избегать столкновений между дронами. Ранними версиями этого были дроны, которые двигались через точки пути, оставаясь в строю, но построение могло меняться.
Для «сортировки» дроны можно запрограммировать так, чтобы они формировали линию или узор в определенном порядке, первоначально выпускались в любой перестановке или форме, а вместе и параллельно они быстро формировали упорядоченную линию или узор.
Возвращаясь к компьютерной сортировке, одна проблема заключается в том, что есть одна основная шина памяти, и нет возможности для большого количества объектов перемещаться в памяти параллельно.
В случае сортировки на ленте положение каждого элемента (записи) «известно» только «ленте», но не компьютеру. Сортировка на основе ленты должна работать только с двумя элементами одновременно и иметь способ обозначения границ прогона на ленте (метка файла или запись другого размера).
источник
IMHO, люди задумываются log (n). O (nlog (n)) ЕСТЬ практически O (n). И вам нужно O (n) только для чтения данных.
Многие алгоритмы, такие как быстрая сортировка, действительно обеспечивают очень быстрый способ сортировки элементов. Вы можете реализовать варианты быстрой сортировки, которые на практике будут очень быстрыми.
По сути, все физические системы бесконечно параллельны. У вас может быть куча атомов в песчинке, у природы достаточно вычислительных мощностей, чтобы определить, где должен быть каждый электрон в каждом атоме. Итак, если у вас достаточно вычислительных ресурсов (O (n) процессоров), вы можете отсортировать n чисел за время log (n).
Из комментариев:
Если у физического процессора есть k элементов, он может достичь параллельности не более O (k). Если вы обрабатываете n чисел произвольно, он все равно будет обрабатывать их со скоростью, связанной с k. Также вы можете сформулировать эту задачу физически. Вы можете создать n стальных шариков с весом, пропорциональным числу, которое вы хотите закодировать, что теоретически можно решить с помощью центрифуги. Но здесь количество используемых атомов пропорционально n. Тогда как в стандартном случае у вас ограниченное количество атомов в процессоре.
Другой способ подумать об этом: скажем, у вас есть небольшой процессор, прикрепленный к каждому числу, и каждый процессор может общаться со своими соседями, вы можете отсортировать все эти числа за время O (log (n)).
источник
Я работал в офисе летом после школы, когда поступил в колледж. Я изучал AP Computer Science, среди прочего, сортировку и поиск .
Я применил эти знания в нескольких физических системах, которые могу вспомнить:
Начало естественной сортировки слиянием…
Система печатала многоэкземплярные формы, включая отрывок размером с карточку, который нужно было хранить в ящиках.
Я начал с их стопки и для начала отсортировал ее. Первый шаг - собрать около пяти штук, достаточно немного, чтобы их можно было легко положить в руки. Положите отсортированный пакет вниз, перекрещивая каждую стопку, чтобы они оставались отдельными.
Затем объедините каждую пару стопок, получив большую стопку. Повторяйте, пока не останется только одна стопка.
… Сортировка вставкой до завершения
Отсортированные карточки легче подавать, поскольку каждая следующая находится немного дальше в том же открытом ящике.
Radix sort
Этого никто не понимал, как я сделал это так быстро, несмотря на неоднократные попытки научить его.
Большой ящик корешков чеков (размер перфокарт) необходимо отсортировать. Это похоже на раскладывание пасьянса на большом столе - раздайте, складывайте, повторяйте.
В общем
30 лет назад я заметил, о чем вы спрашиваете: идеи передаются в физические системы напрямую, потому что существуют относительные затраты на сравнение и обработку записей , а также уровни кэширования.
Выход за рамки понятных эквивалентов
Я вспоминаю эссе на вашу тему, и в нем говорилось о спагетти . Вы обрезаете кусок сушеной лапши, чтобы указать значение ключа, и маркируете его идентификатором записи. Это O (n), простая обработка каждого элемента один раз.
Затем вы берете сверток и ударяете одним концом о стол. Они выровнены по нижним краям, и теперь они отсортированы. Можно банально снять самый длинный и повторить. Считывание также O (n).
Здесь, в «реальном мире», происходят две вещи, не соответствующие алгоритмам. Во-первых, выравнивание краев - это параллельная операция. Каждый элемент данных также является процессором (к нему применяются законы физики). Итак, как правило, вы масштабируете доступную обработку с помощью n, по существу разделяя классическую сложность на коэффициент n.
Во-вторых, как выравнивание краев выполняет сортировку? Реальная сортировка в считанного , который позволяет найти самый длинный в один шаг, даже если вы ничего сравнить все из них , чтобы найти самый длинный. Снова разделите на множитель n, чтобы найти наибольшее значение теперь O (1).
Другой пример - использование аналоговых вычислений: физическая модель решает проблему «мгновенно», а подготовительная работа - O (n). В принципе, вычисление масштабируется с учетом количества взаимодействующих компонентов, а не количества подготовленных элементов. Таким образом, вычисление масштабируется с n². Пример, о котором я думаю, - это взвешенное многофакторное вычисление, которое было выполнено путем просверливания отверстий на карте, подвешивания гирь на струнах, проходящих через отверстия, и сбора всех струн на кольце.
источник
Общее время сортировки по-прежнему составляет O (n). Это быстрее благодаря распараллеливанию .
Вы можете рассматривать центрифугу как группу из n атомов, распараллеленных по n ядрам (каждый атом действует как процессор).
Вы можете ускорить сортировку за счет распараллеливания, но только с постоянным коэффициентом, потому что количество процессоров ограничено, O (n / C) по-прежнему O (n) (процессоры обычно имеют <10 ядер, а графические процессоры <6000)
источник
Центрифуга не сортирует узлы, она применяет к ним силу, после чего они реагируют параллельно с ней. Итак, если бы вам пришлось реализовать пузырьковую сортировку, при которой каждый узел перемещается параллельно вверх или вниз в зависимости от своей «плотности», у вас будет реализация центрифуги.
Имейте в виду, что в реальном мире вы можете запускать очень большое количество параллельных задач, тогда как на компьютере вы можете иметь максимум реальных параллельных задач, равный количеству физических процессоров.
В конце концов, вы также будете ограничены доступом к списку элементов, потому что он не может быть изменен одновременно двумя узлами ...
источник
Когда мы сортируем с помощью компьютерных программ, мы выбираем свойство сортируемых значений. Обычно это величина числа или алфавитный порядок.
Эта аналогия очень напоминает мне простую сортировку пузырей. Как меньшие числа появляются на каждой итерации. Как ваша логика центрифуги.
Итак, чтобы ответить на этот вопрос, разве мы не делаем что-то подобное в программной сортировке?
источник
Прежде всего, вы сравниваете два разных контекста, один - это логика (компьютер), а другой - физика, которая (пока) доказала, что мы можем моделировать некоторые ее части, используя математические формулы, и мы, как программисты, можем использовать эти формулы для моделирования. (некоторые части) физики в логической работе (например, физический движок в игровом движке).
Во-вторых, у нас есть некоторые возможности в компьютерном (логическом) мире, что почти невозможно в физике, например, мы можем получить доступ к памяти и найти точное местоположение каждой сущности в каждый момент времени, но в физике это огромная проблема. принципом неопределенности Гейзенберга .
В-третьих, если вы хотите сопоставить центрифуги и их работу в реальном мире с миром компьютеров, это как если бы кто-то (Бог) дал вам суперкомпьютер со всеми применяемыми физическими правилами, и вы выполняете в нем свою небольшую сортировку ( используя центрифугу) и говоря, что ваша проблема сортировки была решена за o (n), вы игнорируете огромное физическое моделирование, происходящее в фоновом режиме ...
источник
Другая точка зрения заключается в том, что то, что вы описываете с помощью центрифуги, аналогично так называемой «сортировке спагетти» ( https://en.wikipedia.org/wiki/Spaghetti_sort ). Допустим, у вас есть упаковка сырых стержней для спагетти разной длины. Удерживая их в кулаке, расслабьте руку, чтобы опустить их вертикально, так чтобы все концы лежали на горизонтальном столе. Бум! Они отсортированы по высоте. O (постоянное) время. (Или O (n), если вы включаете в себя выбор стержней по высоте и их размещение в ... решетке для спагетти, я думаю?)
Вы можете отметить, что это O (константа) в количестве кусочков спагетти, но из-за конечной скорости звука в спагетти это O (n) в длине самой длинной пряди. Так что ничего не дается бесплатно.
источник
Подумайте: действительно ли "центрифужная сортировка" лучше масштабируется? Подумайте о том, что происходит по мере увеличения масштабов.
Стоит учесть и другие проблемы с сортировкой центрифуг. Например, вы можете работать только с узкой шкалой размеров. Алгоритм компьютерной сортировки может обрабатывать целые числа от 1 до 2 ^ 1024 и более, без проблем. Поместите что-то, что весит 2 ^ 1024 раз больше, чем атом водорода, в центрифугу, и, ну, это черная дыра, и галактика была разрушена. Алгоритм не удался.
Конечно, настоящий ответ здесь заключается в том, что вычислительная сложность связана с некоторой вычислительной моделью, как упоминалось в другом ответе. И «центрифужная сортировка» не имеет смысла в контексте обычных вычислительных моделей, таких как модель RAM, модель ввода-вывода или многолентые машины Тьюринга.
источник