Вызов : Как найти элемент в сортированной матрице, где строки и значения столбцов увеличиваются монотонно?
Что такое матрица? Матрица представляет собой таблицу значений, состоящих из рядов и столбцов. Здесь мы представляем матрицу как Список целочисленных списков Отказ Следовательно, мы можем получить доступ к значениям матрицы с Индексирование и нарезка Обозначение.
Как найти элемент в матрице в Python?
Наивный алгоритм нахождения элемента в матрице Python – это повторить все строки и значения в том, что в строках и сравнение этих элементов к значению поиска:
def matrix_find(matrix, value): for row in matrix: for element in row: if element == value: return True return False matrix = [[3, 4, 4, 6], [6, 8, 11, 12], [6, 8, 11, 15], [9, 11, 12, 17]] print(matrix_find(matrix, 7)) # False print(matrix_find(matrix, 17)) # True
Если имеет матрицу N ряды и м Колонны, сложность выполнения алгоритма – O (n * m) потому что вы должны выполнить n * m сравнения. Это не оптимально для отсортировано Матрица (см. Далее)!
Как найти элемент в отсортированной матрице в Python?
Что такое отсортировано Матрица? Матрица отсортировано Поскольку целые числа в рядах и столбцах монотонно увеличиваются с номером строки и столбца.
Matrix-найдите алгоритм Красивый способ найти ценность в сортировке Матрица Не посещая все значения в отсортированной матрице.
Вот алгоритм:
def matrix_find(matrix, value): if not matrix or not matrix[0]: return False j = len(matrix) - 1 for row in matrix: while row[j] > value: j = j - 1 if j == -1: return False if row[j] == value: return True return False matrix = [[3, 4, 4, 6], [6, 8, 11, 12], [6, 8, 11, 15], [9, 11, 12, 17]] print(matrix_find(matrix=matrix, value=7))
Функция Matrixfind
принимает отсортированную целочисленную матрицу и целочисленное значение. Это возвращает Правда
Если матрица содержит целочисленное значение.
Объяснение
В первых нескольких линиях алгоритм проверяет, пустая матрица и возвращает Ложь
Если это так.
Тогда Хотя петля итерации по ряду Я
и колонна J
матрицы, начиная с первого ряда I = 0
и последняя колонна J = N-1
Отказ
Но вместо того, чтобы поискать всю матрицу, алгоритм использует умную стратегию. Он пропускает целые ряды и колонны одновременно со следующим способом.
Проверьте последнее значение первого ряда (верхнее правое значение матрицы). Обозначим это значение как Матрица [I] [J]
Отказ Есть три случая.
- Верхнее правильное значение матрицы
Матрица [I] [J]
равно обыскому значению. В этом случае алгоритм возвращаетПравда
Отказ - Верхнее правильное значение матрицы
Матрица [I] [J]
меньше, чем искали значение. Поскольку матрица сортируется, верхнее правое значение матрицы является самым большим элементом в строке I. Таким образом, мы можем пропустить ряд, я полностью собираюсь на следующий рядЯ + 1
Отказ Далее мы повторяем эту процедуру с меньшей матрицей, которая имеет одну строку меньше (то есть ряд я). - Верхнее правильное значение матрицы
Матрица [I] [J]
больше, чем обысканное значение. Это означает, что весь столбец j имеет только элементы, которые больше, чем значение поиска. Таким образом, мы уверены, что наше значение искали не в столбце j, и мы можем полностью пропустить этот столбец, уменьшаяJ-1
Отказ Далее мы повторяем эту процедуру с меньшей матрицей, которая имеет один столбец меньше (то есть ряд j).
Метрикс сложности времени выполнения
Таким образом, идея этого великого Алгоритм из Кейта Шварц Уменьшает один ряд или один столбец в каждой итерации. Время выполнения только O (2n)
вместо O (n ^ 2)
Для квадратной матрицы с N рядами и колоннами.
Пазл Матрикс-Найти
Проверьте свое понимание, решив следующую головоломку Python в нашем приложении Finxter:
Вы мастер-кодер? Проверьте свои навыки сейчас!
Связанное видео.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.