DEV//UNIT
← АлгоритмыSearch & Arrays

Бинарный поиск по ответу

Бинарный поиск в значении ответа: если свойство монотонно — работает.

время O(log(answer) · check)память O(1)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function minMaxLoad(weights: number[], days: number): number {
2 // можно ли увезти всё за days дней с лимитом L?
3 function fits(L: number): boolean {
4 let d = 1, cur = 0
5 for (const w of weights) {
6 if (cur + w > L) { d++; cur = w }
7 else cur += w
8 }
9 return d <= days
10 }
11
12 let lo = Math.max(...weights) // меньше не вывезти самый тяжёлый
13 let hi = weights.reduce((s, w) => s + w, 0) // всё за один день
14 while (lo < hi) {
15 const mid = Math.floor((lo + hi) / 2)
16 if (fits(mid)) hi = mid // помещаемся — пробуем меньше
17 else lo = mid + 1 // не помещаемся — увеличиваем
18 }
19 return lo
20}

Проблема

Бинарный поиск в значении ответа: если свойство монотонно — работает.

Что вы видите

Границы ответа [min..max]; проверка-чёрныйящик «хватит ли X» делит пополам.

Как это работает

Мощнейшая мета-техника: минимум максимума, «за сколько дней», «какая минимальная ёмкость» — всё сводится к бинарному по монотонному предикату.

Пошаговый разбор

  1. 01

    Предикат

    fits(x) монотонен.

  2. 02

    Деление

    mid: подходит?

  3. 03

    Сходимость

    lo == hi = ответ.

Complexity и ограничения

time
O(log(answer) · check)
space
O(1)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Логистика

Мин. грузоподъёмность.

Сроки

Мин. дней на задачи.

Мощности

Мин. серверов под SLA.

Связанные алгоритмы

Shorts

«Бинарный поиск, но не в массиве»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Бинарный поиск, но не в массиве
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/binary-search-answer