Поиск элемента в матрице — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{Задача | {{Задача | ||
|definition = Дана матрица <math>\alpha_k^m</math>. Все столбцы и строки матрицы отсортированы. Требуется найти заданный элемент <tex>x</tex>.}} | |definition = Дана матрица <math>\alpha_k^m</math>. Все столбцы и строки матрицы отсортированы. Требуется найти заданный элемент <tex>x</tex>.}} |
Текущая версия на 19:31, 4 сентября 2022
Задача: |
Дана матрица | . Все столбцы и строки матрицы отсортированы. Требуется найти заданный элемент .
Содержание
Варианты решения
Наивное решение
Заметим, что:
- Если первый элемент столбца больше , то находится в колонке слева.
- Если последний элемент строки меньше , то находится в строке, расположенной ниже.
Изначально рассматриваем матрицу
.Описание алгоритма
- Начнем с правого столбца и будем двигаться влево, рассматривая первые элементы этих столбцов.
- Если первый элемент столбца меньше искомого, то по правилу (1) мы можем выкинуть этот столбец.
- После того, как мы выкинули некоторые столбцы, получили новую матрицу. Будем рассматривать последние элементы ее строк.
- Если элемент меньше искомого, то нам нужно "двигаться вниз".
- Если не можем применить ни одно из правил, то поиск закончен. Осталось проверить элемент на равенство искомому.
Заметим, что мы можем применять эти правила, постепенно сокращая матрицу, пока в левом верхнем углу подматрицы не останется элемент, равный искомому.
Рассмотрим решение на примере
Будем искать элемент, значение которого - 46.
- Рассмотрим первые 3 строки. По правилу (2), искомый элемент находится ниже. Значит остаются только строки с 4 по 6.
- Рассмотрим последние 2 столбца. По правилу (1) искомый элемент находится левее. Значит остаются столбцы с 1 по 4.
- В левом верхнем углу матрицы остался элемент равный 46. Успех.