Поиск в матрице — различия между версиями
Kolchanov (обсуждение | вклад) |
Kolchanov (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
{{Задача | {{Задача | ||
| − | |definition = Задана двумерная матрица, состоящая из n строк и m столбцов. Необходимо найти расположение указанного элемента в матрице или определить, что данный элемент в матрице отсутствует. | + | |definition = Задана отсортированная двумерная матрица, состоящая из n строк и m столбцов. Необходимо найти расположение указанного элемента в матрице или определить, что данный элемент в матрице отсутствует. |
}} | }} | ||
| + | {{Определение | ||
| + | |id=def1 | ||
| + | |definition=Отсортированная матрица - матрица, для которой выполнено следующее условие: <tex> a[row][col] \le a[row + 1][col], a[row][col] \le a[row][col + 1] </tex> | ||
| + | }} | ||
== Решение за O(n<tex>\cdot</tex>m) == | == Решение за O(n<tex>\cdot</tex>m) == | ||
Для начала рассмотрим наивный алгоритм поиска элемента. В каждой строке исходной матрицы запускаем линейный поиск, если находим элемент, то возвращаем его координаты <tex>(row, col)</tex>. Время работы — <tex>O(n \cdot m)</tex>. | Для начала рассмотрим наивный алгоритм поиска элемента. В каждой строке исходной матрицы запускаем линейный поиск, если находим элемент, то возвращаем его координаты <tex>(row, col)</tex>. Время работы — <tex>O(n \cdot m)</tex>. | ||
Версия 15:01, 10 января 2016
| Задача: |
| Задана отсортированная двумерная матрица, состоящая из n строк и m столбцов. Необходимо найти расположение указанного элемента в матрице или определить, что данный элемент в матрице отсутствует. |
| Определение: |
| Отсортированная матрица - матрица, для которой выполнено следующее условие: |
Решение за O(nm)
Для начала рассмотрим наивный алгоритм поиска элемента. В каждой строке исходной матрицы запускаем линейный поиск, если находим элемент, то возвращаем его координаты . Время работы — .
Решение за O(nlog(m))
Данный способ решения использует наивное решение за , улучшенное с помощью двоичного поиска. Для этого в каждой строке запускается двоичный поиск. Время работы — .
Замечание
Время работы может быть улучшено до . Для этого необходимо модифицировать алгоритм так, чтобы в том случае, если столбцов больше чем строк, он бы запускал двоичный поиск по строкам, если строк больше — наоборот.