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

Рекурсивный алгоритм Pathfinder в Python

Простой и эффективный способ вырастить навыки вашей науки, состоит в том, чтобы освоить основы. Знание основных оснований устанавливает отличные кодер из просто промежуточных. Одной из таких основных районов в области компьютерных наук является теория графиков, специфическая подпроблема которой — Алгоритм Pathfinder – – мы обратимся в этом руководстве. Итак, первыми вещами в первую очередь: что … рекурсивный алгоритм Pathfinder в Python Подробнее »

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

Простой и эффективный способ вырастить навыки вашей науки, состоит в том, чтобы освоить основы. Знание основных оснований устанавливает отличные кодер из просто промежуточных.

Одна такая основная область в области компьютерных наук – Теория графика Конкретная подпроблема которого – алгоритм Pathfinder – мы обратимся в это руководство. Так Первые вещи первыми:

Что такое график?

Вы можете уже знать структуры данных, такие как списки, наборы и словари. Эти структуры данных обозначены как сложные структуры данных – не потому, что им трудно понять, но поскольку они строят на других структурах данных.

График – это еще одна сложная структура данных для реляционных данных.

Реляционные данные состоят из краев и вершин. Каждая вершина стоит в одном или нескольких отношениях с другими вершинами. Примером реляционных данных является социальный график Facebook. Facebook представляет пользователей как вершины и отношения дружбы, как к краям. Два пользователя подключены через край на графике, если они (Facebook) друзья.

Что такое график? График представляет собой основную структуру данных в информатике. Это моделирует отношения между элементами данных. Использование графов к модели реальных явлений не новая идея. В 1736 году Леонхард Эйлер изобрел структуру данных графика, чтобы решить проблему «Семь мостов Кенигсберга» Отказ Графики существовали до того, как первый компьютер был даже идеей. На самом деле, как мы увидим в этой статье, графики помогали сделать возможным компьютер. Без графов не было бы компьютера, так как мы сейчас знаем это сегодня.

Как представлять структуру данных графика в коде?

В этом руководстве мы будем использовать Матрица соседних Как структура данных графика грамм . Каждый ряд Я В матрице хранится все соседи вершины i . И каждый столбец J хранит в соседей вершины j . Таким образом, есть край от вершины Я к вершине J , если G [i] [j] == 1 .

Вы можете увидеть пример представления графика матрицы соседних в следующем коде алгоритма PathFinder:

Алгоритм Pathfinder в Python

Как определить, есть ли путь между двумя вершинами?

Функция find_path (график, v_start, v_end, path_len) проверяет, есть ли прямая или косвенная дорожка между двумя вершинами V_START и v_end на графике. Мы знаем, что между V_START. и вкус Если оба уже соседи, то есть, График [v_start] [v_end] == 1 Отказ

def find_path(graph, v_start, v_end, path_len=0):
    '''Is there a path between vertex v_start and vertex v_end?'''

    # Traverse each vertex only once
    if path_len >= len(graph):
        return False

    # Direct path from v_start to v_end?
    if graph[v_start][v_end]:
        return True

    # Indirect path via neighbor v_nbor?
    for v_nbor, edge in enumerate(graph[v_start]):
        if edge:
            # between v_start and v_nbor
            if find_path(graph, v_nbor, v_end, path_len + 1):
                return True

    # No direct or indirect path found
    return False

# The graph represented as adjancy matrix
G = [[1, 1, 0, 0, 0],
     [0, 1, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 1, 1, 1, 0],
     [1, 0, 0, 1, 1]]

print(find_path(graph=G, v_start=3, v_end=0))
# False

print(find_path(G, 3, 1))
# True

Однако, даже если нет прямого пути, может быть косвенный путь между вершинами v_star т и v_end Отказ Чтобы проверить это, алгоритм использует рекурсивный подход. В частности, есть косвенный путь, если вершина v_nbor существует такое, что есть путь:

 v_start --> v_nbor --> ... --> v_end.

Переменная path_len хранит длину текущего пути. Мы увеличиваем его в каждом уровне рекурсиона, поскольку длина текущего пути увеличивается на один. Обратите внимание, что все пути с длиной > = n состоять из по крайней мере N вершины. Другими словами, по меньшей мере, одна вершина посещается дважды, а цикл существует в этом экземпляре рекурсии. Следовательно, мы пропускаем рекурсию для путей длиной, превышающей или равно количеству вершин на графике.

В фрагменте кода мы проверяем, есть ли путь между 3 и 0. Если вы понимаете, что делает код, это хватает, чтобы посмотреть на матрицу соседних G . Существует прямой путь от вершины 3 к вершинам 1 и 2 (и к себе). Но ни вершина 1, ни 2 не имеет никаких соседей. Следовательно, нет пути от вершины 3 на любую другую вершину (кроме вершин 1 и 2).

Связанное видео.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Оригинал: “https://blog.finxter.com/recursive-pathfinder-algorithm-python/”