ืฉืืื ืืืืื.
ืืืขืจื ืื, ืืืืืชื ืืจืฉืื ืืช ืืื ื ืื ืชืื ืื ืืขืืงืจืืื ืืืฉืืฉืื ืืืืกืื ืืจืคืื ืืืืขื ืืืืฉื, ืืืืืจ ืื ืขื ืขืื ืืื ืืื ืื ืืืื ืฉืืืืฉืื "ืืชืืืฉื" ืขืืืจื.
ืื ืืืื ื ืชืืื. ืืื ืื ืืืืชืืื - ืื ื ืืืฉื ืฉืืืื ื ืืืจ ืืืืขืื ืื ืื ืืจืฃ ืืืื (ืืืืื, ืื ืืืืื, ืืฉืืงืื, ืื ืืฉืืงืื, ืขื ืื ืืื ืงืฆืืืช ืืืืืืืช ืืจืืืืช).
ืื ืืื ื ืื. ืืืื ืืคืฉืจืืืืช ืืืื ื ื ืชืื ืื ื"ืืืกืื ืืจืคืื" ืืฉ ืื ื?
1. ืืื ื ื ืชืื ืื ืืืจืืฆืืช
1.1 ืืืจืืงืก ืฉืื ืืช. ืืืจืืฆืช ืืกืืืืืช ืืื ืืืจืืฆื โโืฉืื ืืืชืจืืช ืืฉืืจื ืืืขืืืืืช ืืชืืืืืช ืืืกืคืจื ืงืืืงืืื ืืืจืฃ, ืืืขืจื ืฉื ืื ืืื ืืืืืื ืืื ืฉืื a(i,j) ื ืงืืข ืขื ืคื ื ืืืืืช ืื ืืืขืืจ ืงืฆืืืช ืืื ืงืืืงืืืื i ื-j (ืืจืืจ ืฉืขืืืจ ืืจืฃ ืื ืืืืื ืืืจืืฆื โโืืื ืชืืื ืกืืืืจืืช, ืื ืฉืื ืื ื ืืืืืื ืืืกืืื ืฉืื ืื ื ืืืืกื ืื ืืช ืื ืืขืจืืื ืจืง ืืขื ืืืืืกืื ืืจืืฉื). ืขืืืจ ืืจืคืื ืื ืืฉืืงืืืื, ื ืืชื ืืืืืืจ ืืช a(i,j) ืืคื ืืกืคืจ ืืงืฆืืืช ื-i ืขื j (ืื ืืื ืงืฆื ืืื, ืื a(i,j)= 0), ืืืืจืคืื ืืฉืืงืื, ืื ืืคื ืืืฉืงื (ืืฉืงื ืืืื) ืฉื ืืงืฆืืืช ืืืืืืจืื.
1.2 ืืืจืืฆืช ืฉืืืืืช. ืืืงืจื ืื, ืืืจืฃ ืฉืื ื ืืืืืกื ืื ืืืืื ืฉืื, ืืืื, ืืกืคืจื ืืฉืืจืืช ืชืืืืื ืืืกืคืจื ืืงืืืงืืืื ืฉืื, ืืืกืคืจื ืืขืืืืืช ืชืืืืื ืืงืฆืืืช ืืืืกืคืจืื ืืจืืฉ. ืื ืงืืืงืื ืืงืฆื ื ืืคืืื ืื ืืื, ืืื ื ืืชื ืขืจื ืฉืืื ื ืืคืก ืืชื ืืืชืืื (ืขืืืจ ืืจืคืื ืื ืืืืื ืื, 1 ื ืืชื ืื ืืงืืืงืื ืืืงืฆื ืชืงืคืื, ืขืืืจ ืืจืคืื ืืืืื ืื - "1" ืื ืืงืฆื "ืืืฆื" ืืืงืืืงืื ื-"-1" ืื ืืื "ืืืื" ืื (ืงื ืืกืคืืง ืืืืืจ, ืื ื ืจืื ืฉืื ืกืืื "ืืื ืืก" "ืืืื" ืืืกืคืจ "-1")). ืขืืืจ ืืจืคืื ืืฉืืงืืืื, ืฉืื, ืืืงืื 1 ื-1, ืืชื ืืืื ืืฆืืื ืืช ืืืฉืงื ืืืืื ืฉื ืืงืฆื.
2. ืืื ื ื ืชืื ืื ืฉื ืกืคืืจื
2.1 ืจืฉืืืช ืกืืืืืช. ืืืื, ื ืจืื ืฉืืื ืคืฉืื ืืื. ืื ืงืืืงืื ืฉื ืืืจืฃ ืืืื, ืืืืคื ืืืื, ืืืืืช ืืฉืืื ืืื ืืื ื ืกืคืืจื (ืจืฉืืื, ืืงืืืจ, ืืขืจื,...), ืืฉืจ ืืืืกื ืืช ืืืกืคืจืื ืฉื ืื ืืงืืืงืืืื ืืกืืืืื ืืื ืื ืชืื. ืขืืืจ ืืจืคืื ืืืืื ืื, ื ืืกืืฃ ืืจืฉืืื ืืื ืจืง ืืช ืืงืืืงืืืื ืฉืืืืื ืืฉ ืงืฆื "ืืืืื" ืืงืืืงืื ืชืืื ื. ืขืืืจ ืืจืคืื ืืฉืืงืืืื ืืืืฉืื ืืืื ืืืจืื ืืืชืจ.
2.2 ืจืฉืืื ืฉื ืฆืืขืืช. ืืื ื ื ืชืื ืื ืคืืคืืืจื ืืืื. ืจืฉืืืช ืืงืฆืืืช, ืืคื ืฉืืืืจ ืื ื ืงืคืื ืืจืืจ, ืืื ืืืขืฉื ืจืฉืืื ืฉื ืงืฆืืืช ืฉื ืืืจืฃ, ืฉืื ืืื ืืื ืืฆืืื ืขื ืืื ืงืืืงืื ืืืชืืื, ืงืืืงืื ืืกืืื (ืขืืืจ ืืจืคืื ืื ืืืืื ืื ืืกืืจ ืื ืืฉืื ืืื, ืื ืื ืืืืืื ื ืืชื ืืฉืชืืฉ ืืืืืื ืฉืื ืื, ืืืฉื, ืฆืืื ืืงืืืงืืืื ืืคื ืกืืจ ืืืืืช) ืืืฉืงื (ืขืืืจ ืืจืคืื ืืฉืืงืืืื ืืืื).
ืืชื ืืืื ืืืกืชืื ืขื ืจืฉืืืืช ืืืืจืืฆืืช ืืืคืืจืืืช ืืขืื ืืืชืจ ืคืืจืื (ืืขื ืืืืจืื), ืืืฉื,
2.3 ืืขืจื ืกืืืืืช. ืื ืืืื ื ืื ืคืืฅ ืืืืชืจ. ืืืกืืกื, ืืืื ืฆืืจื ืฉื "ืืจืืื" ืฉื ืจืฉืืืืช ืกืืืืืช ืืืื ื ืกืคืืจื ืืื (ืืขืจื, ืืงืืืจ). n ืืืืื ืืื ืืจืืฉืื ืื (ืืคื ืืกืคืจ ืืงืืืงืืืื ืฉื ืืืจืฃ) ืฉื ืืขืจื ืืื ืืืืืื ืืช ืืืื ืืืชืืื ืฉื ืืืชื ืืขืจื, ืฉืืชืืืืื ืืื ืื ืืงืืืงืืืื ืืกืืืืื ืืื ืื ืชืื ืืชืืืื ืืฉืืจื.
ืืื ืืฆืืชื ืืช ืืืกืืจ ืืื ืืืื (ืขืืืจ ืขืฆืื):
3. Adjacency Vector ืืืขืจื Adjacency Associative
ืืชืืจืจ ืฉืืืืจ ืฉืืจืืช ืืื, ืื ืืืืืชื ืืชืื ืช ืืงืฆืืขื, ืืื ืฉืขืกืง ืืขืช ืืขืช ืืืจืคืื, ืขืกืง ืืจืื ืืจืฉืืืืช ืงืฆืืืช. ืืื, ืื ื ืื ืื ืืืจืฃ ืืฉ ืืกืคืจ ืืืืืืช ืืงืฆืืืช. ืืื, ืืคืืชืื ืจืฉืืืืช ืืงืฆืืืช ืืงืืืกืืืช, ืื ื ืืฆืืข ืืฉืื ืื ื"ืืชืคืชืืืช/ืขื ืฃ/ืฉืื ืื/ืืืืฆืื" ืฉืืื, ืืืืืจ: ืืงืืืจ ืืกืืืืืช ืืืขืจื ืืกืืืืืช ืืืกืืฆืืืืืืืช.
3.1 ืืงืืืจ ืกืืืืืช
ืืงืจื (a1): ืืจืฃ ืื ืืฉืืงืื
ื ืงืจื ืืืงืืืจ ืกืืืืืช ืืืจืฃ ืื ืืฉืืงืื ืงืืืฆื ืืกืืืจืช ืฉื ืืกืคืจ ืืืื ืฉื ืืกืคืจืื ืฉืืืื (a[2i], a[2i+1],..., ืืืฉืจ i ืืืืกืคืจ c 0), ืฉืื ืื ืืื ืืกืคืจืื ืืื a[2i], a[2i+1 ] ืืฆืืื ืงืฆื ืืจืฃ ืืื ืืงืืืงืืืื a[2i] ื-a[2i+1], ืืืชืืื.
ืคืืจืื ืืงืืื ืื ืืื ื ืืืื ืืืืข ืืืื ืืื ืืืจืฃ ืืืืื (ืฉืชื ืืืคืฉืจืืืืช ืืคืฉืจืืืช). ืืขืช ืฉืืืืฉ ืืคืืจืื ืืืืืจืฃ, ืืงืฆื ื ืืฉื ืืืืืื ื-a[2i] ื-a[2i+1]. ืืื ืืืืื: ืขืืืจ ืืจืคืื ืื ืืืืื ืื, ืืืืืช ืืฆืืจื, ื ืืชื ืืืืฉื ืืจืืฉืืช ืืกืืจ ืืงืืืงืืืื ืฉื ืจืืฉืื (ืืืืืื, ืฉืืงืืืงืื ืขื ืืขืจื ืื ืืื ืฉื ืืืกืคืจ ืฉืืืงืฆื ืื ืืืืข ืจืืฉืื).
ื-C++, ืจืฆืื ืืฆืืื ืืงืืืจ ืกืืืืืช ืืืืฆืขืืช std::vector, ืืืืื ืฉืื ืฉื ืืื ื ืื ืชืื ืื ืืื.
ืืงืจื (a2): ืืจืฃ ืื ืืฉืืงืื, ืืฉืงืื ืืงืฆืืืช ืื ืืกืคืจ ืฉืื
ืืื ืืืืื ืืืงืจื (a1), ืื ื ืงืืจืืื ืืืืงืืืจ ืืกืืืืืช ืขืืืจ ืืจืฃ ืืฉืืงืื ืขื ืืฉืงืื ืงืฆื ืฉืืืื ืงืืืฆื ืืกืืืจืช (ืืขืจื ืืื ืื) ืฉื ืืกืคืจืื (a[3i], a[3i+1], a[3i+2], ..., ืืืฉืจ i ืืืืกืคืจ c 0), ืืืฉืจ ืื "ืฉืืืฉืืื" ืฉื ืืกืคืจืื a[3i], a[3i+1], a[3i+2] ืืฆืืื ืช ืงืฆื ืฉื ืืืจืฃ ืืื ืงืืืงืืืื ืืืืืกืคืจืื a[3i] ื-a[3i+1], ืืืชืืื, ืืืขืจื a [3i+2] ืืื ืืืฉืงื ืฉื ืงืฆื ืื. ืืจืฃ ืืื ืืืื ืืืืืช ืื ืืืืื ืื ืื.
ืืงืจื (ื): ืืจืฃ ืื ืืฉืืงืื, ืืฉืงืื ืงืฆื ืฉืืื ื ืฉืืืื
ืืืืืื ืฉืื ืืคืฉืจ ืืืืกื ืืืื ืืื ืืืจืืื ืืื ืืืขืจื ืืื (ืืงืืืจ), ืืืฉื, ืืืืฉืื ืืื ืืคืฉืจื. ืืืจืฃ ืืืืืกื ืืืื ืืงืืืจืื, ืฉืืื ืืืืงืืืจ ืืจืืฉืื ืืื ืืงืืืจ ืืกืืืืืช ืฉื ืืืจืฃ ืืืื ืืฆืืื ืืช ืืืฉืงืืืืช, ืืืืืงืืืจ ืืฉื ื ืืืื ืืช ืืืฉืงืืืืช ืืชืืืืืช (ืืืฉืื ืืคืฉืจื ืขืืืจ C++: std::pair ). ืืคืืื, ืขืืืจ ืงืฆื ืืืืืืจ ืขื ืืื ืืื ืงืืืงืืืื ืชืืช ืืื ืืงืกืื 2i, 2i+1 ืฉื ืืืืงืืืจ ืืจืืฉืื, ืืืฉืงื ืืืื ืฉืืื ืืืืื ื ืืชืืช ืืืื ืืงืก i ืฉื ืืืืงืืืจ ืืฉื ื.
ืืืื, ืืื ืื ื ืืืฅ?
ืืืื, ืืืืจ ืฉืืจืืช ืืื ืืฆื ืืช ืื ืฉืืืืฉื ืืืื ืืคืชืจืื ืืกืคืจ ืืขืืืช. ืืืื, ืื ืงืืืช ืืื ืคืืจืืืืช, ืืืื ืืืชืจืื ืืช ืืืืื:
- ืืงืืืจ ืืกืืืืืช, ืืื ืื ืืื ื "ืื ืืืจืืืื" ืืืจ, ืืื ืื ืงืืืคืงืื, ืชืืคืก ืคืืืช ืืืืจืื ืืืืจืืฆืช ืืกืืืืืช (ืขืืืจ ืืจืคืื ืืืืืื), ืืงื ืืืกืืช ืืืืฉืื.
- ืืช ืงืืืงืืื ืืืจืฃ, ืืืืคื ืขืงืจืื ื, ื ืืชื ืืกืื ืื ืืืกืคืจืื ืฉืืืืืื. ืื ืื ืืฉ ืฆืืจื ื"ืกืืื" ืืื?
- ืืจืคืื ืืืืืื ืืืืื ืงืฆืืืช ืืจืืืื ืืืืืืืช ืืจืืืืช, ืขื ืืฉืงืืื ืฉืื ืื (ืืืืื, ืฉืืืื, ืืคืืื ืืคืก). ืืื ืืื ืืืืืืช.
- ืืชื ืืืื ืื ืืืงืฆืืช ืืืคืืื ืื ืฉืื ืื ืืงืฆืืืช - ืื ืืืืืข ื ืืกืฃ ืขื ืื, ืจืื ืกืขืืฃ 4.
ืขื ืืืช, ืืฉ ืืืืืืช ืฉ"ืจืฉืืื" ืื ืืื ื ืืจืืืช ืขื ืืืฉื ืืืืจื ืืงืฆื. ืืืื ืื ืืืฆืื ืืขืจื ืืกืืืืืช ืืืกืืฆืืืืืืืช, ืฉื ืืื ืืืื.
3.2 ืืขืจื ืกืืืืืช ืืกืืฆืืืืืืืช
ืืื, ืื ืืืืฉื ืืงืฆื ืืกืืื, ืืฉืงืื ืืืืคืืื ืื ืืืจืื ืงืจืืืืื ืขืืืจื ื, ืืืจืืฉืืช ืืืืืจืื ืืื ื ืืืคืฉืจืืช ืื ื ืืืฉืชืืฉ ืืืืจืืฆืช ืืกืืืืืช, ืื ืืืื ื ืืฉืื ืืืฆื ื ืืื ืืฉื ืืช ืืช ืืงืืืจ ืืกืืืืืช ืืื ืืคืชืืจ ืืขืื ืื. ืื, ืืืคืชื ืืื ืงืฆื ืฉื ืืืจืฃ, ืืืชื ื ืืชื ืืฆืืื ืืืื ืืกืืืจ ืฉื ืืกืคืจืื ืฉืืืื. ืืื ืื ื ืจืื? ืื ืื ืืคืชื ืืืขืจื ืืกืืฆืืืืืื? ืืื ืื, ืืื ืื ืื ื ืื ืืืืฉืืื ืืช ืื? ืชื ื ืื ื ืืขืจื ืืกืืฆืืืืืื ืฉืื ืื ืืคืชื - ืืื ืืกืคืจืื ืฉืืืื ืืกืืืจ - ืืฉืืื ืืขืจื - ืืกืคืจ ืฉืื ืื ืืกืคืจ ืืืฉื ืืืฆืืื ืืช ืืฉืงื ืืงืฆื. ื-C++, ืจืฆืื ืืืืฉื ืืื ื ืื ืขื ืกืื ืืืื std::map (std::map , int> ืื std::map , double>), ืื std::multimap ืื ืฆืคืืืื ืงืฆืืืช ืืจืืืื. ืืืื, ืืฉ ืื ื ืืื ื ืืืืกืื ืืจืคืื ืฉืชืืคืก ืคืืืช ืืืืจืื ืืืื ื "ืืืจืืงืก", ืืืื ืืืืืืจ ืืจืคืื ืขื ืืกืคืจ ืืืืืืช ืืงืฆืืืช, ืืืคืืื ืืื ืื ืืจืืฉืืช ืืืืืจืืช ืืื-ืฉืืืืืืช ืฉื ืืกืคืจื ืงืืืงืื (ืื ื ืื ืืืืข ืื ืฆืจืื ืืช ืื, ืืื ืืื ืืืช).
4. ืืื ื ื ืชืื ืื ืืืืื, ืืื ืืฉืื ืืกืจ
ืืื ื ืืื: ืืืฉืจ ืคืืชืจืื ืืกืคืจ ืืขืืืช, ืืืชืื ืฉื ืฆืืจื ืืืงืฆืืช ืืื ืืืคืืื ืื ืืงืฆืืืช ืืืจืฃ ืืืืชืื, ืืืืกื ืืืชื. ืื ืืคืฉืจ ืืฆืืฆื ืืช ืืชืืื ืืช ืืืื ืืืืคื ืื ืืฉืืขื ืืืกืคืจืื ืฉืืืื, ืื ืืคืฉืจ ืืืืกื "ืืจืคืื ืขื ืชืืื ืืช ื ืืกืคืืช" ืืืื ืืืืฆืขืืช ืืจืกืืืช ืืืจืืืืช ืฉื ืืงืืืจ ืืกืืืืืช ืืืขืจื ืืกืืืืืช ืืืกืืฆืืืืืืืช.
ืื, ืชื ื ืื ื ืืจืฃ ืื ืืฉืืงืื, ืฉืืื ืงืฆื ืฉืื ืืฉ ืฆืืจื ืืืืกื, ืืืฉื, 2 ืชืืื ืืช ื ืืกืคืืช ืืืฆืืื ืืช ืืืกืคืจืื ืฉืืืื. ืืืงืจื ืื, ื ืืชื ืืืืืืจ ืืช ืืงืืืจ ืืกืืืืืช ืฉืื ืืงืืืฆื ืืกืืืจืช ืื ืฉื "ืืืืืช", ืืื ืฉื "ืจืืืขืืืช" ืฉื ืืกืคืจืื ืฉืืืื (a[2i], a[2i+1], a[2i+2], a [2i+3]...), ืืืฉืจ a[2i+2] ื-a[2i+3] ืืงืืขื ืืช ืืืืคืืื ืื ืฉื ืืงืฆื ืืืชืืื. ืขืืืจ ืืจืฃ ืขื ืืฉืงืืื ืฉืืืื ืฉื ืงืฆืืืช, ืืกืืจ ืืืจื ืืื ืืืื (ืืืืื ืืืืื ืืืื ืฉืืชืืื ืืช ืืืื ืืืจื ืืฉืงื ืืงืฆื ืืืฆืืื ื ืขื ืืื ืืืืื ืืื a[2i+3] ื-a[2i+4] , ืืืงืฆื ืขืฆืื ืืฆืืื ืื 4, ืืื 5 ืืกืคืจืื ืืกืืืจืื). ืืขืืืจ ืืจืฃ ืขื ืืฉืงืื ืงืฆื ืฉืืื ื ืฉืืืื, ื ืืชื ืืืชืื ืืช ืืชืืื ืืช ืืจืืื ืืื ืืฉืืงืื ืฉืื.
ืืืฉืจ ืืฉืชืืฉืื ืืืขืจื ืกืืืืืช ืืกืืฆืืืืืืืช ืขืืืจ ืืจืคืื ืขื ืืฉืงืื ืงืฆื ืฉืืืื, ื ืืชื ืืฆืืื ืืขืจื ืื ืืกืคืจ ืืืื, ืืื ืืขืจื (ืืงืืืจ) ืฉื ืืกืคืจืื ืืืฆืืื ืื, ืื ืืกืฃ ืืืฉืงื ืฉื ืงืฆื, ืืช ืื ืฉืืจ ืืืืจืื ืฉืื. ืืืคืืื ืื. ืืื ืขื ืืืช, ืื ื ืืืืช ืืืงืจื ืฉื ืืฉืงืืื ืฉืืื ื ืฉืืืื ืืืื ืืฆืืจื ืืฆืืื ืกืืื ืขื ืืกืคืจ ื ืงืืื ืฆืคื (ืื, ืื ืื ื ืืืืช, ืืื ืื ืืื ืื ืื ืืจืื ืกืืื ืื ืืืื, ืืื ืื. ืื ืชืืืืจ ืืืชื "ืืกืืืืื" ืืื ืืคืื, ืื ืืืื ืืืืืช ืฉืื ืืืื). ืืืฉืืขืืช ืืื ืฉื-C++ ื ืืชื ืืืืืืจ ืืขืจืื ืกืืืืืช ืืกืืฆืืืืืืืื ืืืจืืืื ืืืืคื ืืื: std::map , std::vector> ืื std::map , std::vector, ืฉืื ืืขืจื ืืจืืฉืื ื-"key-value-vector" ืืืื ืืฉืงื ืืงืฆื, ืืืืืจ ืืื ืืืืงืืื ืืืืขืืืื ืืืกืคืจืืื ืฉื ืืืืคืืื ืื ืฉืื.
ืกืคืจืืช:
ืขื ืืจืคืื ืืืืืืจืืชืืื ืืืืคื ืืืื:
1. ืงืืจืื, ืชืืืืก ื., ืืืืืจืกืื, ืฆ'ืืจืืก ืืจืืฉืื, ืจืืืกื, ืจืื ืื ื., ืกืืืื, ืงืืืคืืจื. ืืืืืจืืชืืื: ืื ืืื ืื ืืชืื, ืืืืืจื 2: ืืจื ืก. ืืื ืืืืช โ M.: Williams Publishing House, 2011.
2. ืืจืจื ืคืจื ืง. ืชืืจืช ืืืจืคืื. ื.: ืืืจ, 1973.
ืื"ื ืืืืืจ ืขื ืืืชื ืืขืจื ืืงืืืจ ืืืกืืฆืืืืืื ืฉื ืกืืืืืช:
3. Chernoukhov S.A. ืืงืืืจ ืกืืืืืช ืืืขืจื ืกืืืืืช ืืกืืฆืืืืืืืช ืืืจืืื ืืืืฆืื ืืืืกืื ืืจืคืื / SA Chernouhov. ืืงืืืจ ืกืืืืืช ืืืคืช ืกืืืืืช ืืืื ื ื ืชืื ืื ืืืืฆืื ืืจืฃ // ืืืกืฃ ืืืืจืื ืฉื ืืื ืก ืืืื ืืืืื ืืืืขื ืืืืขืฉื "ืืขืืืช ืืืืฉืื ืืชืืฆืืืช ืฉื ืคืืชืืืื ืืืฉื ืืื ืืืจืืื ืืคืชืืจ ืืืชื" (ืกืจืืืื, 14.09.2019 ืืกืคืืืืจ 2019). โ Sterlitamak: AMI, 65, p. 69-XNUMX
ืืงืืจืืช ืืงืืื ืื ืฉืืืืฉืืื ืื ืืฉื:
4.
5.
ืืงืืจ: www.habr.com