Я обсуждал этот вопрос здесь вчера, включая разрывные последовательности, которые я нашел для работы лучше всего, учитывая конкретное (низкое) n.
В середине я пишу
Противный побочный эффект сортировки раковин заключается в том, что при использовании набора случайных
комбинации из n записей (для экономии времени обработки / оценки) для тестирования
пробелы вы можете в итоге либо лучшие пробелы для n записей или
лучшие промежутки для вашего набора комбинаций - скорее всего, последний.
Проблема заключается в проверке предложенных пробелов, позволяющих сделать обоснованные выводы. Очевидно, что тестирование пробелов против всех n! упорядочения, что набор из n уникальных значений может быть выражен как неосуществимый. Например, тестирование для n = 16 означает, что 20 922 789 888 000 различных комбинаций из n значений должны быть отсортированы для определения точного среднего, наихудшего и обратно отсортированного случаев - просто для проверки одного набора пробелов, и этот набор может не быть Лучший. Возможны 2 ^ (16-2) набора пробелов для n = 16, первый из которых {1}, а последний {15,14,13,12,11,10,9,8,7,6,5,4 , 3,2,1}.
Чтобы проиллюстрировать, как использование случайных комбинаций может давать неверные результаты, предположим, что n = 3 может принимать шесть различных порядков 012, 021, 102, 120, 201 и 210. Вы создаете набор из двух случайных последовательностей для проверки двух возможных наборов пропусков , {1} и {2,1}. Предположим, что эти последовательности оказываются равными 021 и 201. для {1} 021 можно отсортировать с тремя сравнениями (02, 21 и 01) и 201 с (20, 21, 01), что дает в общей сложности шесть сравнений, разделенных на два и вуаля, в среднем 3 и наихудший случай 3. Использование {2,1} дает (01, 02, 21 и 01) для 021 и (21, 10 и 12) для 201. Семь сравнений с наихудшим случаем 4 и в среднем 3,5. Фактическое среднее и наихудшее значение для {1] составляет 8/3 и 3 соответственно. Для {2,1} значения равны 10/3 и 4. Средние значения были слишком высокими в обоих случаях, а худшие случаи были правильными. Если бы 012 был одним из случаев, {1} дал бы 2,5 в среднем - слишком низко.
Теперь расширим это, чтобы найти набор случайных последовательностей для n = 16, так что ни один из протестированных наборов пробелов не будет предпочтительным по сравнению с другими, и результат будет близок (или равен) истинным значениям, все время сохраняя обработку до минимума. Это можно сделать? Возможно. В конце концов, все возможно - но возможно ли это? Я думаю, что для этой проблемы случайным является неправильный подход. Выбор последовательностей в соответствии с некоторой системой может быть менее плохим и даже хорошим.