Рубрики
Без рубрики

Матрица найти алгоритм в Python

Введение Python: Сегодняшняя тема – это матрица находит алгоритм.

Автор оригинала: Chris.

Вызов : Как найти элемент в сортированной матрице, где строки и значения столбцов увеличиваются монотонно?

Что такое матрица? Матрица представляет собой таблицу значений, состоящих из рядов и столбцов. Здесь мы представляем матрицу как Список целочисленных списков Отказ Следовательно, мы можем получить доступ к значениям матрицы с Индексирование и нарезка Обозначение.

Как найти элемент в матрице в 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] Отказ Есть три случая.

  1. Верхнее правильное значение матрицы Матрица [I] [J] равно обыскому значению. В этом случае алгоритм возвращает Правда Отказ
  2. Верхнее правильное значение матрицы Матрица [I] [J] меньше, чем искали значение. Поскольку матрица сортируется, верхнее правое значение матрицы является самым большим элементом в строке I. Таким образом, мы можем пропустить ряд, я полностью собираюсь на следующий ряд Я + 1 Отказ Далее мы повторяем эту процедуру с меньшей матрицей, которая имеет одну строку меньше (то есть ряд я).
  3. Верхнее правильное значение матрицы Матрица [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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.