Несколько вопросов сортировки - PullRequest
15 голосов
/ 20 января 2010

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

  1. Одним из видов, которые я сравнивал со своей быстрой сортировкой, является std :: sort из стандартной библиотеки C ++. Тем не менее, это выглядит очень медленно. Я только сортирую массивы целых и длинных, но, похоже, это примерно в 8-10 раз медленнее, чем моя быстрая сортировка и стандартная быстрая сортировка Бентли и Макилроя (и, возможно, Седжвика). У кого-нибудь есть идеи, почему это так медленно? Код, который я использую для сортировки, просто станд :: сортировать (а, а + numelem); где a - массив длинных или целых чисел, а Numberlem - количество элементов в массиве. Числа очень случайные, и я пробовал разные размеры, а также разное количество повторяющихся элементов. Я также попробовал qsort, но это еще хуже, чем я ожидал. Изменить: Игнорировать этот первый вопрос - он был решен.

  2. Я хотел бы найти больше хороших реализаций быстрой сортировки для сравнения с моей быстрой сортировкой. Пока у меня есть Bentley-McIlroy, и я также сравнил с первой опубликованной версией двуядерной быстрой сортировки Владимира Ярославского. Кроме того, я планирую портировать timsort (который я считаю слиянием) и оптимизированную двойную сводную сортировку из источника jdk 7. О каких других хороших реализациях быстрой сортировки вы знаете? Если они не в C или C ++, то это может быть хорошо, потому что я довольно хорошо умею переносить, но я бы предпочел C или C ++, если вы о них знаете.

  3. Как бы вы посоветовали мне рассказать о моих дополнениях к быстрой сортировке? Пока что моя быстрая сортировка кажется значительно быстрее, чем у всех других быстрых сортировок, с которыми я проверял. Основным источником его скорости является то, что он обрабатывает повторяющиеся элементы гораздо эффективнее, чем другие методы, которые я нашел. Он почти полностью устраняет наихудшее поведение, не тратя много времени на проверку повторяющихся элементов. Я написал об этом на форумах Java, но не получил ответа. Я также попытался написать Джону Бентли, потому что он работал с Владимиром над его быстрой сортировкой с двумя точками и не получил ответа (хотя меня это не сильно удивило). Должен ли я написать статью об этом и поместить ее на arxiv.org? Должен ли я размещать сообщения на некоторых форумах? Существуют ли списки рассылки, в которые я должен публиковать сообщения? Я работал над этим в течение некоторого времени, и мой метод является законным. У меня есть некоторый опыт публикации исследований, потому что я кандидат наук в области вычислительной физики. Должен ли я попытаться обратиться к кому-то на факультете компьютерных наук моего университета? Кстати, я также разработал другую быструю сортировку с двумя точками, но она не лучше, чем моя быстрая сортировка с двумя точками (хотя она лучше, чем быстрая сортировка Владимира с двумя точками с некоторыми наборами данных).

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

Ответы [ 2 ]

11 голосов
/ 20 января 2010

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

7 голосов
/ 20 января 2010

Если вы действительно совершили прорыв и у вас есть математика, чтобы доказать это, постарайтесь опубликовать ее в Журнале ACM . Это определенно один из самых престижных журналов по информатике.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...