Что такое пик?

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

Обратите внимание, что в этом случае пик всегда будет существовать.

Теперь мы попробуем найти пик в массиве из n элементов, и мы постараемся минимизировать время, затрачиваемое программой, с применением различных алгоритмов.

Для одномерного массива:

Случай 1, линейное перемещение:

Худший случай - смотреть на каждый элемент и сравнивать соседние элементы.

Обход по массиву займет линейное время, то есть время, затрачиваемое на обход, имеет порядок n или O (n). В то время как сравнение занимает постоянное время, общее время, затрачиваемое в этом случае, составляет O (n) + C, умноженное на O (n), то есть O (n) {C + 1} единицы времени.

Случай 2, метод двоичного поиска:

В этом случае мы применим алгоритм двоичного поиска, чтобы найти пик. Пусть массив будет a.

Необходимые шаги:

  1. Посмотрите на позицию (n-1) / 2.
  2. Сравните сначала справа, а затем слева. (особенно по порядку).
  3. If a[(n-1)/2] < a[(n-1)/2 -1]:

Затем переходите к левой половине массива.

Иначе, если a [(n-1) / 2] ‹a [(n-1) / 2 +1]:

Затем переходите к правой половине массива.

Иначе [(n-1) / 2] - это пик.

В этом случае время значительно сокращается. Обход массива с помощью метода двоичного поиска занимает время порядка n.

Сравнение здесь также требует постоянного времени. Таким образом, общее время, затраченное здесь, равно O (log (n)) {C + 1}.

Обратите внимание, здесь журнал относится к базе 2, а ln используется как журнал для базы e.

Для двумерного массива:

Пик - это позиция, в которой элементы по сторонам всех четырех сторон, вверх - вниз - влево - вправо, меньше, чем элемент в этой позиции.

Случай 1, прямое движение вперед:

Просмотрите всю двумерную матрицу и сравните все элементы.

Это займет O (n2) {C + 1} раз.

Случай 2, алгоритм жадного восхождения:

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

Если в какой-то точке все четыре направления имеют меньшее, чем центральное значение, то это пик.

НАИХИЙ СЛУЧАЙ - нам нужно пройти большую часть двумерной матрицы, даже если это выгодно в конце с точки зрения затраченного времени.

Сложность по времени в этом случае равна O (mn), где m и n - строки и столбцы. Для квадратной матрицы m = n.

Случай 3, алгоритм метода двоичного поиска с помехами, приведенный выше:

Для этого мы выполним следующие шаги:

  1. Выберите средний столбец j = m / 2. Найдите глобальный максимум в столбце j в точке (i, j).
  2. Сравнить (i, j-1); (i, j); (я, j + 1)
  3. Выберите левые столбцы, если (i, j-1) ›(i, j), или выберите правые столбцы, если (i, j + 1)› (i, j).
  4. Else (i, j) - пик.