поиск и сортировка - PullRequest
       2

поиск и сортировка

0 голосов
/ 01 марта 2010

Если в списке 1024 элемента (lg1024 = 10), в какой момент (количество поисков) сначала выполняется сортировка списка и использование двоичного поиска? Как изменится ваш ответ, если в списке 2048 пунктов? вместо последовательного поиска

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Если кривая «линейного доступа» пересекает кривую «бинарного поиска», зависит от того, сколько времени потребуется для доступа / вставки одного элемента в зависимости от количества элементов. Это будет отличаться для каждой комбинации архитектуры компилятора, памяти и процессора, типа данных / узла в списке, распределения значений данных, используемых вами алгоритмов сортировки и вставки и т. Д. Но с «достаточно большим» набором времени работы можно описать, упомянув, как увеличивается его верхняя граница с увеличением количества элементов, даже если эта граница «Big-O» может точно не описывать какой-либо конкретный прогон.

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

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

Например, поиск одного элемента может занять 1 единицу. Сравнение двух предметов может занять 0.5us. Выполнение вставки отсортированного списка со 100 элементами в списке может потребовать X количества поисков, Y количества сравнений и Z количества обновлений / записей .... В то время как для неупорядоченного списка может потребоваться больше или меньше, в зависимости от того, что уже есть и что вы вставляете.

1 голос
/ 01 марта 2010

если ваш список не отсортирован, потребуется O (n), чтобы найти его. Сортировка с быстрой сортировкой стоит O (n * log n), тогда двоичный поиск - O (log n). Предположим, что x - это количество поисков. x * n = x * logn + n * logn. выставив разные значения вы можете оценить динамику. моя грубая оценка говорит о том, что если n = 1024 и числовой поиск больше ~ 10, то в первую очередь эффективнее сортировать. поставьте 1024 вместо n и попробуйте.

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