awesome-everything EN
↑ Обратно к восхождению

Алгоритмы с нуля

Сортировка и поиск: тест с выбором

Суть Синтез по всему юниту в формате выбора: когда сортировка окупается, stable-сортировки, merge sort против quicksort, инвариант binary search и бинарный поиск по ответу.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 13 min

Шесть вопросов через весь юнит. Каждый — это решение, которое вы принимаете, когда берётесь за сортировку или поиск в реальном коде: не определение для пересказа, а компромисс, который надо взвесить.

Цель

Убедитесь, что вы связываете стержень юнита: сортировка — это препроцессинг, за который платят один раз; сортировки за O(n log n) меняют stable-свойство на память и худший случай; а binary search обобщается с массивов на любое монотонное пространство ответов.

Викторина

Вам пришёл неотсортированный массив из 1 000 000 элементов, и нужно ответить ровно на один запрос: есть ли в нём значение X? Какой подход дешевле всего и при этом корректен?

Викторина

Вы сортируете список заказов по сумме, где несколько заказов имеют одинаковую сумму, и нужно, чтобы при равенстве сохранялся исходный порядок поступления. Какая сортировка безопасна?

Викторина

Merge sort и quicksort оба O(n log n) в среднем. Для сортировки огромного массива на месте при жёстком ограничении по памяти и без требования stable — почему quicksort часто выбирают в продакшене?

Викторина

Quicksort, который всегда берёт последний элемент как pivot, нормально работает на случайных данных, но тратит минуты на уже отсортированных. Почему и как это стандартно чинят?

Викторина

Binary search использует while (lo < hi) с hi = arr.length - 1 и возвращает -1 после цикла. На большинстве входов он работает, но промахивается, когда цель стоит в позиции, где lo равно hi. В чём дефект?

Викторина

Нужно найти минимальную грузоподъёмность корабля, чтобы доставить все посылки за D дней, и нет отсортированного массива грузоподъёмностей, по которому можно индексироваться. Когда binary search всё равно применим?

Итог

Сквозная мысль юнита — одна привычка: решить, стоит ли покупать порядок. Сортируйте, только если переиспользуете порядок; берите stable-сортировку (merge, insertion), когда равные элементы должны сохранять место; меняйте O(n) буфер merge sort на in-place O(log n) стек quicksort, когда памяти мало, и помните, что плохие pivot грозят O(n²), если не рандомизировать. Когда порядок есть, binary search находит ответы за O(log n) — но только при корректном включающем инварианте, и обобщается на любой монотонный предикат, а не только на массивы.

Продолжить восхождение ↑Сортировка и поиск: свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.