π ΠΠ°ΠΊ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΡ Π² Python Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ NetworkX
ΠΠ°ΠΊ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΡ Π² Python?
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΎΠ² Π² Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NetworkX. ΠΠΎΡ ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠ°ΡΡ:
# Π¨Π°Π³ 1: Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NetworkX
pip install networkx
# Π¨Π°Π³ 2: ΠΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
import networkx as nx
# Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ Π³ΡΠ°ΡΠ°
G = nx.Graph()
# Π¨Π°Π³ 4: ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ
G.add_nodes_from([1, 2, 3])
# Π¨Π°Π³ 5: ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅Π±ΡΠ°
G.add_edge(1, 2)
G.add_edge(2, 3)
# Π¨Π°Π³ 6: ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π³ΡΠ°Ρ
nx.draw(G, with_labels=True)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NetworkX Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π³ΡΠ°ΡΠ°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΡΠ΅Π±Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³ΡΠ°ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ Π³ΡΠ°ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ Π½ΡΠΆΠ΄.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΡ Π² Python
ΠΡΠ°ΡΡ ΡΠ²Π»ΡΡΡΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΡΠ΅Π±Π΅Ρ. Π Python ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΎΠ² ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°.
1. Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΡΠ°ΡΠ° Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ. Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΡΠ°Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ, Π³Π΄Π΅ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²Π΅ΡΡΠΈΠ½Ρ Π³ΡΠ°ΡΠ°, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ - ΡΠΏΠΈΡΠΊΠΈ ΡΠΌΠ΅ΠΆΠ½ΡΡ Π²Π΅ΡΡΠΈΠ½.
graph = {
'A': ['B', 'C'],
'B': ['A', 'C', 'D'],
'C': ['A', 'B', 'D'],
'D': ['B', 'C']
}
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π³ΡΠ°Ρ Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ A, B, C ΠΈ D, ΠΈ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΈΡ ΡΠΌΠ΅ΠΆΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ.
2. ΠΠ°ΡΡΠΈΡΠ° ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΡΠ°ΡΠ° - ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΡΠΈΡΠ° ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΡΠ°Ρ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, Π³Π΄Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ i, j ΡΠ°Π²Π΅Π½ 1, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ i ΠΈ j Π΅ΡΡΡ ΡΠ΅Π±ΡΠΎ, ΠΈ 0 Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
graph = [
[0, 1, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 1, 1, 0]
]
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π³ΡΠ°Ρ Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ A, B, C ΠΈ D, ΠΈ ΡΠΊΠ°Π·Π°Π»ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ΅Π±Π΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ.
3. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NetworkX
Python ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠΎΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NetworkX Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΡΠ΅Π±Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³ΡΠ°ΡΠΎΠ².
import networkx as nx
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°
graph = nx.Graph()
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½
graph.add_node('A')
graph.add_node('B')
graph.add_node('C')
graph.add_node('D')
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π±Π΅Ρ
graph.add_edge('A', 'B')
graph.add_edge('A', 'C')
graph.add_edge('B', 'D')
graph.add_edge('C', 'D')
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NetworkX Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΡΠ°ΡΠ° Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ A, B, C ΠΈ D, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ΅Π±ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ.
4. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° igraph
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ Π² Python - ΡΡΠΎ igraph. ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΡΠ΅Π±Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ ΠΈ ΡΠΈΠΊΠ»ΠΎΠ² Π² Π³ΡΠ°ΡΠ°Ρ .
from igraph import Graph
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠ°
graph = Graph()
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½
graph.add_vertices(4)
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π±Π΅Ρ
graph.add_edges([(0, 1), (0, 2), (1, 3), (2, 3)])
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ igraph Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΡΠ°ΡΠ° Ρ 4 Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ΅Π±ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΎΠ² Π² Python. ΠΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ - NetworkX ΠΈ igraph - Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ±ΡΠ°Π½ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ Π·Π°Π΄Π°ΡΠΈ.
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΎΠ² Π² Python ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ Π½Π°Π²ΡΠΊΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π΄Π°Π½Π½ΡΡ . ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ Π² Python.
Π£Π΄Π°ΡΠΈ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ!