Розв'язання задач дискретної математики за допомогою Python може включати в себе використання різноманітних бібліотек та інструментів для обробки і аналізу даних, а також для вирішення конкретних задач, пов'язаних з теорією графів (networkx, igraph), комбінаторикою (itertools), теорією чисел (sympy) та іншими галузями дискретної математики.
Розглянемо особливості побудови неорієнтованого та орієнтованого псевдографів із використанням бібліотек igraph та networkx в Python. Зокрема, в табл. 1 показано код та результати побудови графа, що містить 4 вершини та отримано деякі його характеристики, в тому числі й показники центральності графа.
Таблиця 1. Реалізація алгоритмів у Python
У цьому коді граф має напрямлені ребра між вершинами (0, 1), (0, 3), (1, 2), (2, 3), (3, 3), а також паралельне ребро (0, 2) та петлю (3, 3). Функція add_edge в обох бібліотеках додає ребро лише один раз, тому для додавання паралельних ребер використано два виклики функції. Проте, в даному випадку паралельні ребра з використанням бібліотеки networkx не відображаються, а просто накладаються одне на одне (див. табл. 1). Тоді одним із шляхів побудови графа є створення файлу .dot за допомогою graphviz (agraph) із функцією write_do і подальше перетворення його на зображення за допомогою nx.nx_agraph.write_dot(g, path_to_store_dot_file).
Зазначимо, що розглянуто лише декілька базових операцій роботи з графами, які можна виконати із використанням бібліотек igraph та networkx. Вони також надають інші корисні функції та алгоритми для роботи з графами, такі як пошук шляхів, знаходження компонентів зв'язності, побудова графів за матрицями суміжності тощо.
Список використаних джерел:
1. Tutorial NetworkX. URL: https://networkx.org/documentation/stable/tutorial.html
2. python-igraph 0.9.8. URL: https://igraph.org/python/tutorial/0.9.8/index.html
3. Tutorial igraph. URL: https://python.igraph.org/en/stable/tutorial.html
|