Эффективность алгоритмов сортировки
-
07-07-2019 - |
Вопрос
Я готовлюсь к завтрашнему очень важному собеседованию, и есть одна вещь, с которой у меня большие проблемы:Алгоритмы сортировки и эффективность BigO.
Какое число важно знать?Лучшая, худшая или средняя эффективность?
Решение
худшее, затем среднее. знать о реальном влиянии так называемых «скрытых констант»; тоже - например, классический алгоритм быстрой сортировки имеет O (n ^ 2) в худшем случае и O (n log n) в среднем, тогда как mergesort равен O (n log n) в худшем случае, но быстрая сортировка превзойдет сортировку слиянием на практике. Р>
Другие советы
Все они, конечно, важно знать. Вы должны понимать, что преимущества алгоритма одного вида в среднем случае могут стать ужасным дефицитом в худшем случае, или худший случай не так уж плох, но лучший случай не так хорош, и он только хорошо работает на несортированные данные и т. д.
Суммируя.
Эффективность алгоритма сортировки будет зависеть от входных данных и задачи.
- максимальная скорость сортировки, которую можно заархивировать, равна n*log(n)
- если данные содержат отсортированные подданные, максимальная скорость может быть лучше, чем n*log(n)
- если данные состоят из дубликатов, сортировку можно выполнить практически за линейное время.
- большинство алгоритмов сортировки имеют свое применение
Большинство вариантов быстрой сортировки также имеют средний случай n*log(n), но они обычно работают быстрее, чем другие не сильно оптимизированные алгоритмы.Он работает быстрее, когда он нестабилен, но стабильные варианты лишь немного медленнее.Основная проблема – худший вариант.Лучшее казуальное решение — Introsort.
Для большинства вариантов сортировки слиянием лучший, средний и худший случай зафиксирован как n*log(n).Он стабилен и относительно легко масштабируется.НО для этого требуется двоичное дерево (или его эмуляция) относительно размера общего количества элементов.Основная проблема - память.Лучшее случайное решение — тимсорт.
Алгоритмы сортировки также различаются в зависимости от размера входных данных.Я могу заявить новичку, что при вводе данных размером более 10T нет совпадения для вариантов сортировки слиянием.
Я рекомендую вам не просто запомнить эти фактоиды. Узнайте, почему они такие, какие они есть. Если бы я брал у вас интервью, я обязательно задавал вопросы, которые показывают, что вы понимаете, как анализировать алгоритм, а не просто можете выплевывать то, что вы видели на веб-странице или в книге. Кроме того, за день до собеседования не время заниматься этим изучением.
Я желаю тебе удачи !! Пожалуйста, сообщите в комментарии, как все прошло!
Я только что закончил интервью в моем колледже ...
Каждый алгоритм имеет свои преимущества, иначе он не будет существовать. Поэтому лучше понять, что же хорошо с алгоритмом, который вы изучаете. Где это хорошо? Как это можно улучшить?
Я полагаю, что когда вы это сделаете, вам автоматически нужно будет читать различные нотации эффективности. Примите во внимание наихудший случай и обратите внимание на средний случай, лучшие случаи редки.
Всего наилучшего в вашем интервью.
Вы также можете рассмотреть другие типы сортировки, которые могут использоваться при определенных условиях. Например, рассмотрим сортировку Radix. http://en.wikipedia.org/wiki/Radix_sort