1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6

# конспект · шаг 6 из 6

Конспект: случаи и память

выжимка - её можно унести в заметки

Понятия

Худший случай - максимум цены по входам размера n. Гарантия «дольше не будет», берётся по умолчанию.

Лучший случай - минимум цены. Средний - ожидание по входам (не полусумма лучшего и худшего).

Два «в среднем». Средний случай - ожидание по распределению ВХОДОВ (нужно предположение, есть плохой вход). Рандомизированное среднее - ожидание по МОНЕТКЕ алгоритма (держится на любом входе, плохого входа нет).

Вспомогательная память - память сверх входа. O(1) = «на месте», O(n) = копия. Стек рекурсии глубины d - это O(d) вспомогательной памяти.

Что унести

По умолчанию оценивают худший случай: это гарантия без предположений о входах, и худший вход (поиск не нашёл, проверка отказала) в жизни частый.

Средний считают ожиданием. У сортировки вставками лучший Θ(n), худший и средний Θ(n²) - средний рядом с худшим, а не посередине. Единую Θ пишут, только когда все случаи одного порядка.

«В среднем» двойственно. Средний случай зависит от того, каковы входы: обычный quicksort (опорный - первый) на отсортированном входе выдаёт Θ(n²). Рандомизированный (опорный случайный) - Θ(n·log n) на любом входе: плохого входа нет, только редкое невезение. Если входы бывают враждебными, случайность уводят внутрь алгоритма (случайный опорный, случайное зерно хеша).

Память сравнивают по вспомогательной (вход есть у всех). Слияние - O(n) (буфер), быстрая сортировка - O(log n) (стек), разворот на месте - O(1). Стек рекурсии - это память, даже если функция ничего не выделяет.

Время и память меняют друг на друга: хеш-таблица тратит O(n) памяти ради O(1) поиска.

Ловушки джокера

Выдал лучший случай за сложность. «Поиск за O(1)» - только при удачном входе; гарантия - O(n). Так меряются в рекламе и падают в проде.

Посчитал средний как (лучший + худший)/2. У среднего своё определение - ожидание; у вставок он вплотную к худшему.

Понадеялся на средний случай при неслучайных входах. В проде данные часто отсортированы или враждебны, и детерминированный алгоритм получает худший случай стабильно. Лечит рандомизация внутри алгоритма.

Назвал алгоритм «на месте», забыв стек или буфер. Рекурсия глубины n - это O(n) стека, даже без единого массива; слияние - O(n) буфера.

Забыл, что копия удваивает память. На больших данных O(n) вспомогательной может не влезть - тогда решение на месте единственно возможное.

Проверь себя

Почему по умолчанию оценивают худший случай, а не средний?

Почему средний случай сортировки вставками Θ(n²), а не (n + n²)/2?

Чем средний случай (по входам) отличается от рандомизированного среднего (по монетке) и какой из них защищает от враждебного входа?

Что такое вспомогательная память и почему стек рекурсии в неё входит?

Сколько вспомогательной памяти у сортировки слиянием и у быстрой сортировки?

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

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