Я пытаюсь понять концепцию Batcher Sort. Однако большинство ресурсов, которые я нашел в Интернете, сосредоточены на доказательстве целиком или на псевдокоде низкого уровня. Прежде чем я посмотрю на доказательства, я хотел бы понять, как работает Batcher Sort. Может ли кто-нибудь дать обзор на высоком уровне о том, как работает сортировка дозатора (в частности, слияние) без излишнего подробного псевдокода (я хочу получить идею за сортировкой дозатора, а не реализовать ее)? Благодаря!Как работает Batcher Merge на высоком уровне?
ответ
Сортировка дозатора сливается с объединением Бэтчера.
Чтобы объединить два массива A и B, объединение Batcher объединяет A в прямом порядке с B в обратном порядке, создавая битномический массив. Затем он применяет битоновую сортировку Бэтчера.
Битчерский сорт Бэтчера - двоюродный брат быстрой сортировки. Он делит массив на две половины, делает некоторые свопы, чтобы гарантировать, что ни один элемент в первой половине больше, чем элемент во втором, и рекурсивно сортирует половинки.
Массив битнитовый, если его можно поворачивать так, чтобы его элементы увеличивались, а затем уменьшались. По принципу «нуль-1» для забытых сортов достаточно доказать правильность на нулевых входах, и мы сделаем это предположение сейчас. Возможности
0^a 1^b 0^c = 0 ... a copies ... 0 1 ... b copies ... 1 0 ... c copies ... 0 (rotate right by c positions)
и
1^a 0^b 1^c (rotate left by a positions)
где а, б, в неотрицательные целые числа. Bitonic рода первый расщепляет этот массив на две равные половины размера А и B. Есть несколько возможностей:
A = 0^w
B = 1^x 0^y 1^z
или
A = 0^w 1^x
B = 1^y 0^z
или
A = 0^w 1^x 0^y
B = 1^z
или три других с нулем и одним взаимозаменяемым. Догадка Бэтчера заключается в том, что, применяя компаратор для всех i к A [i], B [i], либо A - все нули, и B - битноидный, либо A - битонический, а B - все. В любом случае, предварительное условие для рекурсивных сортов выполняется.
Единственные нетривиальные случаи
A = 0^w 1^x
B = 1^y 0^z
и его дополнение. Если ш> = у, то A, B стал
A = 0^(w+x)
B = 1^y 0^(w-y) 1^x
так А все нули и В bitonic. Если ж < у, то
A = 0^w 1^(y-w) 0^z
B = 1^(y+z)
так Б все из них, а А bitonic. Если мы рекурсивно сортируем A и B, то их конкатенация является отсортированным массивом.
- 1. Merge-Exchange Batcher Сортировка
- 2. Группировка на высоком уровне
- 3. поддержка касания на высоком уровне
- 4. На высоком уровне, как работает синхронизация градиента в Android?
- 5. Показать элемент на более высоком уровне
- 6. Программа Windows работает на высоком уровне целостности без права администратора
- 7. - Проводник Windows, созданный на высоком уровне?
- 8. Ищете библиотеку SSL на высоком уровне
- 9. Обработка ошибок на более высоком уровне
- 10. Основная опасность на высоком уровне Postgres
- 11. Array merge на втором уровне
- 12. Как узнать концепцию веб-разработки на высоком уровне Java
- 13. На высоком уровне, как я буду строить карусель для изображений?
- 14. Имеет ли Common Lisp (SBCL) функции параллелизма на высоком уровне?
- 15. COUNT количество строк в GROUP на более высоком уровне агрегата
- 16. Несколько сюжетов с функциями построения на высоком уровне, особенно plot.rqs()
- 17. React Page рекомендует рекомендацию поддерживать логику на высоком уровне
- 18. Сделать методы, доступные на более высоком уровне в пакете
- 19. Будет ли моя шкала архитектуры на высоком уровне?
- 20. Кто должен давать оценки проекта на высоком уровне?
- 21. Различия на высоком уровне между node.js и ZeroMQ?
- 22. Может ли MatLab «поймать» на более высоком уровне, чем «попробовать»?
- 23. Какие обозначения используются для разработки на высоком уровне программного обеспечения?
- 24. Спектральный дисплей Python не остается на высоком уровне
- 25. На высоком уровне, как работает struts2? Я исхожу из фона mvc
- 26. Может ли кто-нибудь дать на высоком уровне простое объяснение начинающему о том, как работает Hadoop?
- 27. Сортировка нечетно-четных долей Batcher
- 28. Результаты рекурсивной очереди в «слишком высоком уровне стека»
- 29. обнаруживает кнопку «вверх» на устройстве, когда находится на самом высоком уровне
- 30. Работает ли ptrace на уровне пользователя или на уровне ядра?