Второй алгоритм, приведенный в связанном PDF, - это O (n).«Окно» определяется как совокупность границы (т. Е. Всех четырех внешних ребер), среднего столбца и среднего ряда текущего субквадрата.Вот краткое изложение алгоритма:
- Найти максимальное значение в текущем окне
- Вернуть его, если это пик
- В противном случае, найти более крупного соседа этого максимума иrecurse в соответствующем квадранте.
Как описано в слайдах, сложность времени определяется как T (n) = T (n / 2) + cn (* 1013Член * T (n / 2) обусловлен уменьшением длины ребра на каждом рекурсивном шаге; член cn - это время, необходимое для нахождения максимума в текущем окне).Следовательно, сложность составляет O (n).
Правильность этого алгоритма основана на нескольких наблюдениях, которые перечислены на одном из слайдов:
Если вы введетеквадрант, он содержит пик всего массива
Это в основном обобщение одного и того же 1D-аргумента.Квадрант вводится только в том случае, если он содержит некоторый элемент, превышающий все элементы на границе.Таким образом, либо этот элемент будет вершиной, либо вы можете продолжать «подниматься», пока не найдете вершину где-то в квадранте.
Максимальный элемент окна никогда не уменьшается, когда мы спускаемся врекурсия
Следующее окно в рекурсии всегда содержит максимальный элемент текущего окна, поэтому это так.
Пик в посещенном квадрантетакже является пиковым в общем массиве
Это следует из определения пика, поскольку оно зависит только от непосредственных соседей.