ЁЯЧ║я╕П рдзрдбрд╛ 10 тАФ Graphs: рдХреЙрд░рд┐рдбреЙрд░рдЪрд╛ рдирдХрд╛рд╢рд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 10 ┬╖ рдкреБрдвреЗ: lesson-11-dp-greedy
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ10. рдЦреЛрд▓реНрдпрд╛ рдЖрдгрд┐ рдХреЙрд░рд┐рдбреЙрд░, рджреЛрди рдореВрд▓рднреВрдд рдЪрд╛рд▓реА, рдЕрдВрддрд░ рдореЛрдЬрдгрд╛рд░реА рдЪрд╛рд▓, рдЖрдгрд┐ cycle рдУрд│рдЦрдгреЗ.
- dsa/structures.py тАФ adjacency list рдореНрд╣рдгреВрди
Graph, weighted, directed рдХрд┐рдВрд╡рд╛ рдирд╛рд╣реА - dsa/algorithms.py тАФ
bfs,dfs,dijkstra,has_cycle - dsa/demo.py тАФ
graphs: рд╕рд╣рд╛ рдЦреЛрд▓реНрдпрд╛, рддреАрди рдкреНрд░рд╢реНрди
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│рд╛ рдореНрд╣рдгрдЬреЗ рдХреЙрд░рд┐рдбреЙрд░рдиреА рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛ тАФ рд╣рд╛рдЪ graph. рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдкрд╛рд╕реВрди рд╢реЛрдз рдШреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рддреАрди рдкрджреНрдзрддреА: BFS рдкрд╕рд░рдд рдЬрд╛рддреЛ тАФ рдПрдХрд╛ рдХреЙрд░рд┐рдбреЙрд░ рдЕрдВрддрд░рд╛рд╡рд░рдЪреНрдпрд╛ рд╕рдЧрд│реНрдпрд╛ рдЦреЛрд▓реНрдпрд╛, рдордЧ рджреЛрди, рдордЧ рддреАрди (рднреЗрдЯ рджреНрдпрд╛рдпрдЪреНрдпрд╛ рдЦреЛрд▓реНрдпрд╛рдВрдЪреА рдЬреЗрд╡рдгрд╛рд╕рд╛рд░рдЦреА рд░рд╛рдВрдЧ) тАФ рдореНрд╣рдгреВрди рдПрдЦрд╛рджреНрдпрд╛ рдЦреЛрд▓реАрдд рдкрд╣рд┐рд▓реНрдпрд╛рдВрджрд╛ рдкреЛрд╣реЛрдЪрддрд╛ рддреЗрд╡реНрд╣рд╛ рддреЗ рд╕рд░реНрд╡рд╛рдд рдХрдореА рдХреЙрд░рд┐рдбреЙрд░рдордзреВрди рдЕрд╕рддреЗ. DFS рдПрдХ рдХреЙрд░рд┐рдбреЙрд░ рдЕрдЧрджреА рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рдзрд░рддреЛ, рдордЧ рдорд╛рдЧреЗ рдпреЗрдКрди рдкреБрдврдЪрд╛ рдХрд░реВрди рдкрд╛рд╣рддреЛ (рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рдЪрд│рдд). Dijkstra рдореЛрдЬрддреЛ тАФ рдХреЙрд░рд┐рдбреЙрд░рдирд╛ рд▓рд╛рдВрдмреА рдЕрд╕рддреЗ, рдореНрд╣рдгреВрди рдЖрддрд╛рдкрд░реНрдпрдВрдд рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓реА рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдЪрд╛рд▓ рдиреЗрд╣рдореА рдкреБрдвреЗ рд╡рд╛рдврд╡рд╛ (рдЪрд╛рд▓реАрдВрдЪреЗ рд╡реНрдпрд╛рд╕рдкреАрда). рдЖрдзреА рдкрд╛рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдЦреЛрд▓реАрдХрдбреЗ рдкрд░рдд рдиреЗрдгрд╛рд░рд╛ рдХреЙрд░рд┐рдбреЙрд░ рдореНрд╣рдгрдЬреЗ cycle.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
O["office"] ---|20| H["hall"]
H ---|30| L["lab"] ; H ---|10| B["library"]
B ---|60| G["gym"] ; L ---|15| G
G ---|40| F["field"]
тЭУ рдХрд╛рдп
- рдорд╛рдВрдбрдгреА: adjacency list
{room: [(neighbour, weight)]}тАФ O(V + E) memory; рджрд╛рдЯ graphs рд╕рд╛рдареА adjacency matrix. - BFS: queue; O(V + E); hops рдордзреНрдпреЗ рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди path; level order.
- DFS: recursion рдХрд┐рдВрд╡рд╛ stack; O(V + E); reachability, cycles, topological order, backtracking.
- Dijkstra: (distance, room) рдЪрд╛ min-heap; O(E log V); weight рдиреБрд╕рд╛рд░ рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди path; negative рдХреЙрд░рд┐рдбреЙрд░ рдЪрд╛рд▓рдд рдирд╛рд╣реАрдд (рддреЗ Bellman-Ford рд╣рд╛рддрд╛рд│рддреЛ).
- Cycle (undirected): рдЖрдзреАрдЪ рдкрд╛рд╣рд┐рд▓реЗрд▓рд╛ рдЕрд╕рд╛ рд╢реЗрдЬрд╛рд░реА рдЬреЛ parent рдирд╛рд╣реА. Topological sort: рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд░рд┐рдбреЙрд░ рдкреБрдвреЗрдЪ рджрд╛рдЦрд╡реЗрд▓ рдЕрд╢рд╛ рдХреНрд░рдорд╛рдиреЗ tasks рд▓рд╛рд╡рдгреЗ (build systems, dependency resolvers).
- рдиреЗрд╣рдореА visited рдЦреВрдг рдХрд░рд╛ тАФ рдирд╛рд╣реАрддрд░ рдХрд╛рдпрдо рдЪрд╛рд▓рдд рд░рд╛рд╣рд╛рд▓.
ЁЯдФ рдХрд╛
рдирдХрд╛рд╢реЗ, dependencies, social networks, state machines, Networking school рдЪреЗ routes рдЖрдгрд┐ Kubernetes school рдЪреЗ pods тАФ рд╕рдЧрд│реЗ graphs рдЖрд╣реЗрдд. BFS рдЖрдгрд┐ DFS рд╣реА рддреБрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рдЖрдзреА рд╣рд╛рддреА рдШреЗрдгрд╛рд░реА рджреЛрди рд╕рд╛рдзрдиреЗ; рдЕрдВрддрд░ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ Dijkstra.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
bfs deque рд╡рд╛рдкрд░рддреЛ; dfs seen set рд╕рд╣ recursive рдЖрд╣реЗ; dijkstra
heapq рд╡рд╛рдкрд░рддреЛ рдЖрдгрд┐ рд╢рд┐рд│реНрдпрд╛ (stale) entries рд╕реЛрдбреВрди рджреЗрддреЛ; has_cycle parent рдЦрд╛рд▓реА рдкрд╛рдард╡рддреЛ.
demo.py graphs рд╕рд╣рд╛ рдЦреЛрд▓реНрдпрд╛рдВрдЪрд╛ рдирдХрд╛рд╢рд╛ рдмрдирд╡рддреЛ рдЖрдгрд┐ hops, рдХреНрд░рдо рдЖрдгрд┐ рдореАрдЯрд░ рд╡рд┐рдЪрд╛рд░рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 dsa/demo.py graphs
python3 - <<'EOF'
import sys; sys.path.insert(0, "dsa"); from structures import Graph; from algorithms import bfs, dijkstra, has_cycle
g = Graph(directed=True)
for a, b in (("wake", "wash"), ("wash", "dress"), ("wake", "eat"), ("dress", "leave"), ("eat", "leave")): g.add_edge(a, b)
print("hops from wake:", bfs(g, "wake"))
# topological order: DFS post-order, reversed
seen, order = set(), []
def go(r):
seen.add(r); [go(n) for n in g.neighbours(r) if n not in seen]; order.append(r)
go("wake"); print("do things in this order:", order[::-1])
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
BFS hops {office: 0, hall: 1, lab: 2, library: 2, gym: 3, field: 4}, office рдкрд╛рд╕реВрди
рд╕реБрд░реВ рд╣реЛрдгрд╛рд░рд╛ DFS рдХреНрд░рдо, Dijkstra рдореАрдЯрд░ {тАж, gym: 65, field: 105}
(library рдорд╛рд░реНрдЧреЗ рдирд╛рд╣реА, lab рдорд╛рд░реНрдЧреЗ), рдЖрдгрд┐ cycle? True. рддреБрдордЪрд╛ рд╕рдХрд╛рд│рдЪрд╛ graph
wake рдкрд╣рд┐рд▓рд╛ рдЖрдгрд┐ leave рд╢реЗрд╡рдЯреА рдЕрд╕рд▓реЗрд▓рд╛ рдпреЛрдЧреНрдп рдХреНрд░рдо print рдХрд░рддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА graph рдорд╛рдВрдбрд▓рд╛, рддреНрдпрд╛рддреВрди рддреАрди рдкреНрд░рдХрд╛рд░реЗ рдЪрд╛рд▓рд▓рд╛рдд, рд╕рд░реНрд╡реЛрддреНрддрдо рдорд╛рд░реНрдЧрд╛рд╡рд░ hops рдЖрдгрд┐ рдореАрдЯрд░ рдПрдХрдордд рд╣реЛрдд рдирд╛рд╣реАрдд рд╣реЗ рдкрд╛рд╣рд┐рд▓реЗ, рдЖрдгрд┐ DFS рд╡рд░реВрди tasks рдЪрд╛ рдХреНрд░рдо рдХрд╛рдврд▓рд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
visitedрд╡рд┐рд╕рд░рдгреЗ тАФ рдХреЛрдгрддреНрдпрд╛рд╣реА cycle рд╡рд░ рдЕрдирдВрдд loops.- рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди path рд╕рд╛рдареА DFS (рддреЛ рдПрдЦрд╛рджрд╛ path рд╢реЛрдзрддреЛ).
- negative edge рд╕рд╣ Dijkstra; рдХрд┐рдВрд╡рд╛ рд╢рд┐рд│реНрдпрд╛ heap entries рдкреБрдиреНрд╣рд╛ process рдХрд░рдгреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: package managers, build systems, CI pipelines (DAGs), routing tables, recommendation graphs, рдЖрдгрд┐ "рдпрд╛ outage рдЪрд╛ рдХреЛрдгрддреНрдпрд╛ services рд╡рд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЛ?" тАФ рд╕рдЧрд│реНрдпрд╛ graph рдЪрд╛рд▓реА.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 11 тАФ dynamic programming рдЖрдгрд┐ greedy: рдлрд│реНрдпрд╛рд╡рд░рдЪреА рдЙрддреНрддрд░реЗ, рдЖрдгрд┐ рд╕рд░рд│ рджрд┐рд╕рдгрд╛рд░реА рдкрд╛рдпрд░реА рдХрдзреА рдкреБрд░реЗрд╢реА рдЕрд╕рддреЗ.