Library for graphs.
Project description
allforgraphs Library
What is this?
allforgraphs – это библиотека для работы с графами и построением матриц. Она включает в себя два модуля: алгоритмы для задач с графами и методы генерации матриц.
Quick Guide
Структура библиотеки
allforgraphs состоит из двух модулей:
- algorithms - Модуль для работы с алгоритмами графа.
- matrices - Модуль для работы с матрицами, связанными с графами.
Installation
Чтобы начать работу с allforgraphs, установите её через pip:
pip install allforgraphs
Using
После установки библиотеку можно импортировать с помощью:
from allforgraphs import *
Modules Overview
Algorithms Module
Функция find_shortest_path(edges_input, start_node, end_node) позволяет находить кратчайший путь между двумя узлами в ориентированном графе, используя алгоритм Дейкстры.
Параметры:
- edges_input: список рёбер графа, где каждое ребро представлено кортежем (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
- start_node: узел, от которого начинается поиск кратчайшего пути.
- end_node: узел, до которого необходимо найти путь.
Возвращает: Кортеж, содержащий кратчайшее расстояние и сам путь в виде списка узлов.
Пример использования:
from allforgraphs.algorithms.dr import find_shortest_path
edges_input = [
(11, 3, 1), (5, 4, 3), (8, 5, 4), (12, 6, 5), (3, 8, 6),
(14, 8, 20), (7, 19, 20), (2, 19, 7), (9, 2, 7), (4, 1, 2),
(10, 7, 32), (6, 32, 31), (15, 32, 34), (13, 31, 7),
(1, 34, 31), (8, 19, 21), (11, 21, 20), (7, 29, 8),
(2, 29, 30), (5, 33, 29), (14, 8, 30), (6, 30, 33),
(12, 31, 22), (3, 24, 22), (9, 22, 25), (5, 26, 24),
(7, 25, 26), (13, 26, 23), (1, 23, 30), (4, 26, 27),
(8, 27, 28), (2, 23, 28), (10, 11, 12), (15, 13, 14),
(12, 16, 15), (6, 18, 17)
]
start_node = 34
end_node = 8
distance, path = find_shortest_path(edges_input, start_node, end_node)
print(f"Кратчайшее расстояние от {start_node} до {end_node}: {distance}")
print(f"Путь: {' -> '.join(map(str, path))}")
Функция kruskal_maximum_tree(edges_input) реализует алгоритм Краскала для нахождения максимального охватывающего дерева в графе
Параметры:
- edges_input: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
Возвращает: Кортеж, содержащий список рёбер максимального покрывающего дерева и его общий вес.
Пример использования:
from allforgraphs.algorithms.kr_max import kruskal_maximum_tree
edges_input = [
(9, 0, 1), (12, 0, 2), (10, 1, 2), (15, 1, 3),
(5, 2, 3), (20, 2, 4), (25, 3, 4), (30, 4, 5)
]
max_tree_edges, max_tree_weight = kruskal_maximum_tree(edges_input)
print('Максимальное покрывающее дерево:')
for edge in max_tree_edges:
print(f'Вес: {edge[0]}, Вершины: ({edge[1]}, {edge[2]})')
print('Общий вес максимального покрывающего дерева:', max_tree_weight)
Функция kruskal_minimum_tree(edges_input) реализует алгоритм Краскала для нахождения минимального охватывающего дерева в графе.
Параметры:
- edges_input: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
Возвращает: Кортеж, содержащий список рёбер минимального покрывающего дерева и его общий вес.
Пример использования:
from allforgraphs.algorithms.kr_min import kruskal_minimum_tree
edges_input = [
(11, 3, 1), (5, 4, 3), (8, 5, 4), (12, 6, 5), (3, 8, 6),
(14, 8, 20), (7, 19, 20), (2, 19, 7), (9, 2, 7), (4, 1, 2),
(10, 7, 32), (6, 32, 31), (15, 32, 34), (13, 31, 7), (1, 34, 31),
(8, 19, 21), (11, 21, 20), (7, 29, 8), (2, 29, 30), (5, 33, 29),
(14, 8, 30), (6, 30, 33), (12, 31, 22), (3, 24, 22), (9, 22, 25),
(5, 26, 24), (7, 25, 26), (13, 26, 23), (1, 23, 30), (4, 26, 27),
(8, 27, 28), (2, 23, 28), (10, 11, 12), (15, 13, 14), (12, 16, 15),
(6, 18, 17)
]
min_tree_edges, min_tree_weight = kruskal_minimum_tree(edges_input)
print('Минимальное покрывающее дерево:')
for edge in min_tree_edges:
print(f'Вес: {edge[0]}, Вершины: ({edge[1]}, {edge[2]})')
print('Общий вес минимального покрывающего дерева:', min_tree_weight)
Метод prima_maximum_covering_tree реализует алгоритм Прима для построения максимального покрывающего дерева на основе заданного графа.
Класс Graph_1 используется для представления графа, который инициализируется списком рёбер. Каждый элемент рёбер представляет собой кортеж, содержащий вес ребра и узлы, которые оно соединяет.
Параметры: Не имеет параметров, так как использует внутреннее состояние объекта Graph, включающее список рёбер, узлы и другие переменные.
Возвращает:
- total_weight: Общий вес максимального покрывающего дерева (целое число).
- tree_ribs: Список рёбер, входящих в максимальное покрывающее дерево. Каждый элемент списка представляет собой кортеж (узел1, узел2, вес).
Пример использования:
from allforgraphs.algorithms.prima_max import prima_maximum_covering_tree
E = [
(18, 1, 2), (14, 2, 3), (23, 4, 5), (12, 5, 6),
(16, 1, 6), (28, 6, 8), (24, 8, 9), (3, 9, 10)
]
graph = Graph_1(E)
total_weight, max_tree_ribs = graph.prima_maximum_covering_tree()
print("Общий вес максимального покрывающего дерева:", total_weight)
print("Рёбра максимального покрывающего дерева:")
for u, v, weight in max_tree_ribs:
print(f"Вес: {weight}, Ребро: ({u}, {v})")
Метод prima_minimum_covering_tree реализует алгоритм Прима для построения минимального покрывающего дерева.
Класс Graph используется для представления графа, который инициализируется списком рёбер. Каждый элемент рёбер представляет собой кортеж, содержащий вес ребра и узлы, которые оно соединяет.
Параметры: Не имеет параметров, так как использует внутреннее состояние объекта Graph_2, включающее список рёбер, узлы и другие переменные.
Возвращает:
- total_weight: Общий вес минимального покрывающего дерева (целое число).
- min_tree_ribs: Список рёбер, входящих в минимальное покрывающее дерево, заданный в формате (узел1, узел2, вес)
Пример использования:
from allforgraphs.algorithms.prima_min import prima_minimum_covering_tree
E = [
(1, 1, 3), (1, 2, 6), (2, 2, 4),
(3, 1, 5), (4, 3, 4), (5, 4, 5),
(6, 3, 5), (7, 1, 2), (7, 4, 6)
]
graph = Graph_2(E)
total_weight, min_tree_ribs = graph.prima_minimum_covering_tree()
print("Общий вес минимального покрывающего дерева:", total_weight)
print("Рёбра минимального покрывающего дерева:")
for u, v, weight in min_tree_ribs:
print(f"Вес: {weight}, Ребро: ({u}, {v})")
Функция find_eulerian_cycle находит Эйлеров цикл в неориентированном графе, заданном списком рёбер.
Параметры:
- edges: Список рёбер графа, где каждое ребро представлено как кортеж (узел1, узел2).
- start_vertex: Узел, с которого начинается поиск Эйлерова цикла.
Возвращает:
- path: Список вершин, представляющий Эйлеров цикл. Если Эйлеров цикл отсутствует, возвращается пустой список.
Пример использования:
from allforgraphs.algorithms.euler_gr import find_eulerian_cycle
edges = [
(1, 2), (1, 5), (1, 7), (1, 4), (2, 3),
(2, 5), (2, 6), (4, 5), (5, 6), (5, 7),
(5, 8), (6, 7), (7, 8), (6, 8), (6, 9),
(6, 3), (8, 9)
]
start_vertex = 5
cycle = find_eulerian_cycle(edges, start_vertex)
print("Эйлеров цикл:", cycle)
Matrices Module
Функция build_incidence_matrix(edges) строит матрицу инцидентности для графа, заданного списком рёбер.
Параметры:
- edges: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
Возвращает: Матрицу инцидентности в виде списка списков. Если список рёбер пуст, возвращает None.
Пример использования:
from allforgraphs.matrices.matr_sm import build_incidence_matrix
edges = [
(5, 1, 2),
(0, 1, 3),
(4, 2, 3),
(3, 3, 4),
(2, 4, 1),
(0, 2, 4)
]
incidence_matrix = build_incidence_matrix(edges)
if incidence_matrix:
print("Матрица инцидентности:")
print(incidence_matrix)
else:
print("Список рёбер пуст.")
Функция build_adjacency_matrix(edges) строит матрицу смежности для графа, заданного списком рёбер.
Параметры:
- edges: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
Возвращает: Матрицу смежности в виде списка списков. Если список рёбер пуст или не содержит рёбер с ненулевым весом, возвращает None.
Пример использования:
from allforgraphs.matrices.matr_sm import build_adjacency_matrix
edges = [
(5, 1, 2),
(0, 1, 3),
(4, 2, 3),
(3, 3, 4),
(2, 4, 1),
(0, 2, 4)
]
adjacency_matrix = build_adjacency_matrix(edges)
if adjacency_matrix:
print("Матрица смежности:")
print(adjacency_matrix)
else:
print("Список рёбер пуст.")
Функция build_weight_matrix(edges) строит матрицу весов для графа, заданного списком рёбер.
Параметры:
- edges: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
Возвращает: Матрицу весов в виде списка списков. Если список рёбер пуст, возвращает None. Веса, отсутствующие в графе, инициализируются значением бесконечности (inf). Для диаметрических рёбер диагональные элементы устанавливаются в 0.
Пример использования:
from allforgraphs.matrices.matr_sm import build_weight_matrix
edges = [
(5, 1, 2),
(10, 1, 3),
(0, 2, 3),
(7, 3, 4),
(2, 4, 1),
(3, 2, 4)
]
weight_matrix = build_weight_matrix(edges)
if weight_matrix:
print("Матрица весов:")
print(weight_matrix)
else:
print("Список рёбер пуст.")
Функция transitive_closure(edges, num_vertices) вычисляет матрицу транзитивного замыкания для графа, заданного списком рёбер.
Параметры:
- edges: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
- num_vertices: общее количество вершин в графе.
Возвращает: Матрицу транзитивного замыкания в виде списка списков, где значение 1 указывает на наличие пути между вершинами, а 0 — на отсутствие пути.
Пример использования:
from allforgraphs.matrices.matr_sm import transitive_closure
edges_input = [
(5, 1, 2), (4, 2, 4), (4, 2, 3), (7, 3, 1)
]
num_vertices = max(max(i, j) for _, i, j in edges_input)
closure_matrix = transitive_closure(edges_input, num_vertices)
print("Матрица транзитивного замыкания:")
for row in closure_matrix:
print(" ".join(map(str, row)))
Функция floyd_warshall(edges, num_vertices) реализует алгоритм Флойда-Уоршелла для нахождения кратчайших расстояний между всеми парами вершин в графе.
Параметры:
- edges: список рёбер графа в формате (weight, node1, node2), где weight — это вес ребра, а node1 и node2 — вершины, соединённые этим ребром.
- num_vertices: общее количество вершин в графе.
Возвращает: Матрицу расстояний в виде списка списков, где значение на позиции [i][j] представляет кратчайшее расстояние от вершины i до вершины j. Если путь отсутствует, значение будет равно float('inf').
Пример использования:
from allforgraphs.matrices.matr_sm import floyd_warshall
edges_input = [
(2, 1, 2), (1, 2, 3), (6, 2, 3), (1, 3, 1), (5, 1, 3)
]
num_vertices = max(max(i, j) for _, i, j in edges_input)
shortest_paths_matrix = floyd_warshall(edges_input, num_vertices)
print("Матрица кратчайших расстояний:")
for row in shortest_paths_matrix:
print(" ".join(map(lambda x: f"{x:5}" if x != float('inf') else " INF", row)))
Developers
Авторы библиотеки: Бызова Мария, Верниковская Екатерина, Ольга Калашникова.
GitHub Бызовой Марии: link
GitHub Верниковской Екатерины: link
GitHub Калашниковой Ольги: link
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file allforgraphs-1.0.1.tar.gz.
File metadata
- Download URL: allforgraphs-1.0.1.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9310885b96183a9df27d6aee7ca0aa015d4e18d91e8d577f47849454af8f044
|
|
| MD5 |
d855f269bdf1315b449c7cb6d2d53f05
|
|
| BLAKE2b-256 |
a5195ba348df1add27f5fe308855632dbf0843a18dbeb911c5e9aed5d82f34e3
|
File details
Details for the file allforgraphs-1.0.1-py3-none-any.whl.
File metadata
- Download URL: allforgraphs-1.0.1-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a35feed4cd0643fba418d9d3744c2adef596623a65692bae7a9ae3693df627b
|
|
| MD5 |
74ca8d18b38b911c272c0ea7bf1df06f
|
|
| BLAKE2b-256 |
428a0b85a34d44ab6ee93a39cee84c4910a9475c9bb84be543ed08d32d1f5236
|