Знание основ, это то, что отличаются от великих от промежуточных кодеров. Другими словами, простой и эффективный способ выращивать свои навыки – изучать основы информатики.
Алгоритм Python Pathfinder
В этом руководстве вы узнаете о алгоритме PathFinder, который рекурсивно определяет, есть ли прямая или косвенная дорожка между двумя вершинами на графике. Например, в графике есть ли путь от вершины 4 к вершине 1? Как насчет пути от вершины 3 к вершине 4?
Вот код, который решает проблему PathFinder в Python:
# The graph represented as adjancy matrix # See https://en.wikipedia.org/wiki/Adjacency_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]] n = len(G) # The number of vertices in the graph # Is there a path from vertex i to vertex j? def find_path(i, j, path_length): # The maximal length of a path without a cycle is n # (traverse each vertex once) if path_length>n: return False # Is there a direct path from i to j? if G[i][j]==1: return True # Is there an indirect path from i to j over i's neighbor k? for k in range(n): if G[i][k]==1: # Vertex k is a neighbor of i if find_path(k, j, path_length+1): return True # We have not found any path return False # Path from vertex 1 to vertex 1? print(find_path(1, 1, 0)) # Path from vertex 4 to vertex 1? print(find_path(4, 1, 0))
Угадайте … Какой вывод этого кода фрагмент?
Фундаментальная область информатики – теория графика. Конечно, вы могли бы решить фрагмент кода, даже не зная о теории графика. Ведь это то, что делает ваш компьютер при запуске этого кода. Но компьютер не должен кодировать людей. Итак, давайте погрузимся в теорию графика через Ultra Quick Crash Course.
Что такое график?
Так что такое график? График представляет собой сложную структуру данных, такую как список, набор или словарь. Структура данных сложна не потому, что вы не можете этого понять, но поскольку он состоит из других структур данных. Вы используете структуру данных графика, если вы хотите представлять отношения между элементами данных. Обозначим отношения как края и предметы данных как вершины Отказ Примером является социальный график Facebook. Facebook представляет пользователей как вершины и отношения дружбы, как к краям. Два пользователя подключены через край на графике, если они (Facebook) друзья.
Матрица соседних
Как выглядит структура данных? В головоломке мы используем Матрица соседних Как структура данных графа данных G. Каждая строка I в матрице хранит изнутри соседей вершины I. Каждый столбец J хранит в соседей вершины j. Таким образом, если мы хотим знать, есть ли ребро из вершины i к вершине j, мы проверяем ли G [I] [J] == 1
Отказ
Объяснение алгоритма Pathfinder
Как мы проверяем, есть ли путь между двумя вершинами? Функция GreetPath (i, j, pathlength)
Проверяет, есть ли прямая или косвенная дорожка между двумя вершинами i и j. Мы знаем, что между вершинами I и j есть прямой путь, если они уже соседи, то есть G [I] [J] == 1
Отказ Чтобы определить, есть ли косвенный путь, идея состоит в том, чтобы использовать рекурсивный подход. Есть косвенный путь, если вершина k существует так, что есть путь I -> ... -> k -> ... -> j
Отказ
Переменная PathLength
хранит длину текущего пути. Мы увеличиваем его в каждом уровне рекурсиона, поскольку длина текущего пути увеличивается на один. Обратите внимание, что все пути с длиной > n
состоят из более чем n вершин. Другими словами, по меньшей мере, одна вершина посещается дважды, а цикл существует в этом экземпляре рекурсии. Следовательно, мы пропускаем рекурсию для путей длиной больше, чем количество вершин в графике.
Эта головоломка спрашивает, есть ли путь между 3 и 0. Если вы понимаете, что делает код, это хватает, чтобы посмотреть на матрицу смежности G. Есть прямой путь от вершины 3 до вершин 1 и 2 (и к себе) Отказ Но обе вершины 1 и 2 не имеют никаких соседей. Следовательно, такого пути от 3 до одной другой вершины (кроме вершин 1 и 2).
Связанное видео.
PathFinder Python интерактивная оболочка
Вы можете попробовать алгоритм самостоятельно в нашем интерактивном оболочке кода:
Упражнение : Измените матрицу смежности, чтобы существовать косвенный путь от вершины 0 до вершины 4!
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.