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