ЁЯМ│ рдзрдбрд╛ 09 тАФ Trees рдЖрдгрд┐ heaps: рдХреЕрдЯрд▓реЙрдЧрдЪрд╛ рдЦрдг рдЖрдгрд┐ рд╡реНрдпрд╛рд╕рдкреАрда
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдкреБрдвреЗ: lesson-10-graphs
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ09. structure рд░реВрдкрд╛рддрд▓рд╛ binary search, рддреНрдпрд╛рд▓рд╛ balance рдХрд╛ рд▓рд╛рдЧрддреЛ, tree рдордзреВрди рдЪрд╛рд▓рдгреНрдпрд╛рдЪреНрдпрд╛ рддреАрди рдкрджреНрдзрддреА, рдЖрдгрд┐ рд╡рд░ рдХреЛрдг рдЖрд╣реЗ рд╣реЗ рдиреЗрд╣рдореА рдорд╛рд╣реАрдд рдЕрд╕рдгрд╛рд░рд╛ structure.
- dsa/structures.py тАФ
BST(insert, step count рд╕рд╣ search, in-order, height),MinHeap(sift up/down) - dsa/demo.py тАФ
trees
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдЪрд╛ рдХреЕрдЯрд▓реЙрдЧрдЪрд╛ рдЦрдг: рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рд╕рд╛рдВрдЧрддреЗ "рд▓рд╣рд╛рди рдХрд╛рд░реНрдбреЗ рдорд╛рдЭреНрдпрд╛ рдбрд╛рд╡реАрдХрдбреЗ, рдореЛрдареА рдЙрдЬрд╡реАрдХрдбреЗ". рдХрд╛рд░реНрдб рд╢реЛрдзрдгреЗ рд╣рд╛ рдкреБрдиреНрд╣рд╛ binary search рдЪ тАФ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдбрд╛рдЬрд╡рд│ рдЦрдгрд╛рдЪрд╛ рдЕрд░реНрдзрд╛ рднрд╛рдЧ рд╕реЛрдбрд╛. рдбрд╛рд╡реЗ-рдореА-рдЙрдЬрд╡реЗ рдЕрд╕реЗ рдЪрд╛рд▓рд▓рд╛рдд рддрд░ рдХрд╛рд░реНрдбреЗ рдЖрдкреЛрдЖрдк sorted рдмрд╛рд╣реЗрд░ рдпреЗрддрд╛рдд. рдкрдг рдХрд╛рд░реНрдбреЗ sorted рдХреНрд░рдорд╛рдиреЗ рд▓рд╛рд╡рд▓реА рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдЖрдзреАрдЪреНрдпрд╛рдЪреНрдпрд╛ рдЙрдЬрд╡реАрдХрдбреЗ рдЬрд╛рддреЗ: рдЦрдг рдПрдХ рд▓рд╛рдВрдмрд▓рдЪрдХ рд╕рд╛рдЦрд│реА рдмрдирддреЛ тАФ рд╡реЗрд╖рд╛рдВрддрд░ рдХреЗрд▓реЗрд▓реА list, O(n). Balanced trees рдЦрдг рдЫреЛрдЯрд╛ рдареЗрд╡рд╛рдпрд▓рд╛ рдХрд╛рд░реНрдбреЗ рдлрд┐рд░рд╡рддрд╛рдд (rotate).
рдХреНрд░реАрдбрд╛ рджрд┐рдирд╛рдЪреЗ рд╡реНрдпрд╛рд╕рдкреАрда: рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдзрд╛рд╡рдкрдЯреВ рдиреЗрд╣рдореА рд╡рд░ рдЕрд╕рддреЗ. рдирд╡реА рд╡реЗрд│ рдЖрд▓реА? рддреА рддрд│рд╛рд╢реА рдареЗрд╡рд╛ рдЖрдгрд┐ рд╣рд│реВ рд╡реЗрд│рд╛рдВрдирд╛ рдУрд▓рд╛рдВрдбреВрди рд╡рд░ рдЪрдвреВ рджреНрдпрд╛. рд╡рд░рдЪреА рдХрд╛рдврд╛рдпрдЪреА? рд╢реЗрд╡рдЯрдЪреА рд╡рд░ рдЖрдгрд╛ рдЖрдгрд┐ рддрд┐рд▓рд╛ рдЦрд╛рд▓реА рдмреБрдбреВ рджреНрдпрд╛. рдкреНрд░рддреНрдпреЗрдХ рджреБрд░реБрд╕реНрддреА рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реА рдЕрджрд▓рд╛рдмрджрд▓реА тАФ O(log n) тАФ рдЖрдгрд┐ рддреБрдореНрд╣реА рдХрдзреАрдЪ рдкреВрд░реНрдг list sort рдХрд░рдд рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TD
R["50"] --> A["25"] & B["75"]
A --> A1["12"] & A2["37"]
B --> B1["62"] & B2["87"]
A1 --> A11["6"] & A12["18"]
тЭУ рдХрд╛рдп
- BST: left < node < right. Insert/search O(height): balanced рдЕрд╕реЗрд▓ рддрд░ O(log n), degenerate рдЕрд╕реЗрд▓ рддрд░ O(n). In-order рдЪрд╛рд▓ = sorted; pre-order = copy; post-order = delete; level-order = queue рд╕рд╣ BFS.
- Balanced trees (AVL, red-black) height O(log n) рдареЗрд╡рд╛рдпрд▓рд╛ insert рд╡реЗрд│реА
rotate рдХрд░рддрд╛рдд; B-trees рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ database index рдорд╛рдЧрдЪреА рд░реБрдВрдж,
disk рд▓рд╛ рд╕реЛрдпреАрдЪреА рдЖрд╡реГрддреНрддреА; рдХрд╛рдорд╛рд╡рд░ Python рдЪреЗ
sortedcontainersрдХрд┐рдВрд╡рд╛ list рд╡рд░bisect. - Heap: array рдордзрд▓реЗ complete binary tree (
children of iрдореНрд╣рдгрдЬреЗ2i+1,2i+2); parent тЙд children (min-heap). Push: append + sift up; pop: рд╢реЗрд╡рдЯрдЪрд╛ рд╡рд░ swap + sift down; рджреЛрдиреНрд╣реА O(log n); peek O(1). Python рдордзреНрдпреЗheapq. рдЙрдкрдпреЛрдЧ: priority queues, Dijkstra (рдзрдбрд╛ 10), top-k, schedulers.
ЁЯдФ рдХрд╛
рдмрджрд▓рдд рдЕрд╕рддрд╛рдирд╛рд╣реА sorted data sorted рд░рд╛рд╣рддреЛ рддреЛ trees рдореБрд│реЗ; рдкреБрдиреНрд╣рд╛ sort рди рдХрд░рддрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░ minimum рдорд┐рд│рддреЛ рддреЛ heaps рдореБрд│реЗ. рджреЛрдШреЗ рдорд┐рд│реВрди database indexes, schedulers, рдЖрдгрд┐ рдЕрдВрддрд░ рдореЛрдЬрдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ graph algorithm рдордзрд▓реА priority queue рд╕рдордЬрд╛рд╡рддрд╛рдд.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
BST.search рдХрд┐рддреА рдХрд╛рд░реНрдбреЗ рдкрд╛рд╣рд┐рд▓реА рддреА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд рдХрд░рддреЛ; demo.py trees рддреНрдпрд╛рдЪ
11 keys balanced рдХреНрд░рдорд╛рдиреЗ (height 4) рдЖрдгрд┐ sorted рдХреНрд░рдорд╛рдиреЗ (height
11) insert рдХрд░рддреЛ. MinHeap рд╣рд╛ array рдЖрд╣реЗ, рдЬреНрдпрд╛рдд push/pop index рдЧрдгрд┐рддрд╛рдиреЗ
sifts рдХрд░рддрд╛рдд.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 dsa/demo.py trees
python3 - <<'EOF'
import sys, heapq, random; sys.path.insert(0, "dsa"); from structures import BST, MinHeap
t = BST(); [t.insert(k) for k in random.Random(4).sample(range(1000), 500)]
print("500 random keys тЖТ height", t.height(), "(log2 500 тЙИ 9; a random tree runs about twice that)")
print("in-order first 5:", t.inorder()[:5])
times = [12.9, 11.4, 13.7, 10.8, 12.1]
print("top 3 with heapq.nsmallest:", heapq.nsmallest(3, times)) # O(n log k) тАФ no full sort
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
Balanced рдХреНрд░рдо: height 4, search(43) 4 рдХрд╛рд░реНрдбреЗ рдкрд╛рд╣рддреЛ; sorted рдХреНрд░рдо:
height 11, 11 рдХрд╛рд░реНрдбреЗ; heap 10.8, 11.4, 12.1 pop рдХрд░рддреЛ. рддреБрдордЪреНрдпрд╛ random tree рдЪреА
height 18 рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА in-order рдЪрд╛рд▓ sorted рдЖрд╣реЗ; nsmallest рддреНрдпрд╛рдЪ
рддреАрди рд╡реЗрд│рд╛ рджреЗрддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
BST рдореНрд╣рдгрдЬреЗ рдЬреНрдпрд╛рдд insert рдХрд░рддрд╛ рдпреЗрддреЛ рдЕрд╕рд╛ binary search, balance рдореБрд│реЗрдЪ рддреЛ O(log n) рд░рд╛рд╣рддреЛ, рдЖрдгрд┐ heap sorting рд╢рд┐рд╡рд╛рдп O(log n) рдордзреНрдпреЗ minimum рджреЗрддреЛ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- sorted input рд╡рд░ рд╕рд╛рдзрд╛ BST (рд╡реЗрд╖рд╛рдВрддрд░ рдХреЗрд▓реЗрд▓реА list). balanced tree рдХрд┐рдВрд╡рд╛ list рд╡рд░ bisect рд╡рд╛рдкрд░рд╛.
- sorted рдХреНрд░рдо рдорд┐рд│рд╡рд╛рдпрд▓рд╛ heap рд╡рд╛рдкрд░рдгреЗ (рддреЛ рд╡рд╛рд░рдВрд╡рд╛рд░ min рджреЗрддреЛ; рддреЗрдЪ heap sort рдЖрд╣реЗ, O(n log n)).
- "binary tree" (рдХреЛрдгрддреАрд╣реА рджреЛрди children) рдЖрдгрд┐ "binary search tree" (рдХреНрд░рдордмрджреНрдз) рдпрд╛рдВрдд рдЧреЛрдВрдзрд│.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ
CREATE INDEXрдореНрд╣рдгрдЬреЗ B-tree; рдкреНрд░рддреНрдпреЗрдХ scheduler рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ "рдкреБрдврдЪрд╛ event" loop рдореНрд╣рдгрдЬреЗ heap; рдкреНрд░рддреНрдпреЗрдХ JSON document рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА recursively рдЪрд╛рд▓рддрд╛ рдЕрд╕реЗ tree.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 10 тАФ graphs: рдХреЙрд░рд┐рдбреЙрд░рдЪрд╛ рдирдХрд╛рд╢рд╛, рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдЪрд╛рд▓рдгреНрдпрд╛рдЪреНрдпрд╛ рддреАрди рдкрджреНрдзрддреА.