αα½ααααΈα’αααααΆααααααΆα
αα αααα»ααααααα αααΆαααα αααα»αααΆααααααα α α·αααααΆααααααΈαα ααΆαααααααααα·ααααααααααΆααααααααααΎαααααΆαααααααΆαα»αααααΆα αααααα»ααα·ααααΆααΆααααααα»αααααΌααα α αΎααααα»αααααΉααα·ααΆαα’αααΈαα ααΆααααααααααααααααΈαααΈααα αααααΌα ααααα ααΆα "ααααΈααααΆαα" αααααΆαααααα»αα
ααΌα ααααααΌαα αΆααααααΎαα ααα»αααααα·ααααααΆααααΈααΎαααααΌαα‘αΎα - αααα»ααα·αααΆααΎαααΆααα’ααααααΆααΉααα½α α αΎαααΆααααΆα ααααΊααΆα’αααΈ αα·αα’αααΈαααααΆααααΆα αα (ααΉαααΆα αα·αααΉαααΆα αααααα ααααΆααααααα αααααΆαα¬ααααΆαααα αα·αααααα·ααα»αα αααΎα)α
ααΌα
αααα ααααα
α ααΎβααΎαβααΆαβαααααΎαβα’αααΈβααααβαααααΆααβαα
ααΆααααααααβαα·ααααααβαααααΆαα "ααΆαβαααα»αβααααΆα αα"?
1. αα ααΆαααααααααα·αααααααααΆααααΈα
1.1 αααΆααααΈαααΆααααααΆα αααΆααααΈαβααΆααβααααΆβααΊβααΆβαααΆααααΈαβαααβααααΆαβαα½αβααα αα·αβαα½αβααβααααΌαβααααΆβααΉαβαααβααβα ααα»α βααααΌαβααβααααΆα αα α αΎαβαααααβααβααΆαα»βααΈαα½ααβααααβααΆ a(i,j) ααααΌαβααΆαβαααααβαααβααααααΆα α¬βα’ααααααΆαβααβαααβαααΆαβα ααα»α βααααΌαα i αα·α j (ααΆα αααΆααααΆααααΆαααααΆααααααΆα ααααααα·αααΆααα·ααα ααΌα ααΆαααΆααααΈαααΉααααΈααααααΈα¬ααΎαα’αΆα αααααααααΆααΎααααααΆαα»ααααααααΆααα’ααααααΆαααΎα’αααααααααΌααα) α αααααΆααααααΆα αααααααααΆααααααα a(i,j) α’αΆα ααααΌαααΆαααααααααα ααα½ααααααΈ i ααα j (ααααα·αααΎαα·αααΆαααααααααααα ααα a(i,j)= 0) α αΎααααααΆααααααΆα αααααααΆαααααααααααααααααααααααα (αααααααα»α) ααααααααααΆααααααΆααα
1.2 αααΆααααΈαα§ααααααα·α ααα»α αααα»αααααΈααα ααααΆα ααααααααΎαααααααΌαααΆααααααΆαα»ααααα»αααΆααΆαααααα αααααΆααααα½αααααα½ααααααααΌαααααΆαα ααΉααααααα ααα»α ααααΌαααααααΆ α αΎαααααα½αααααααΌαααααΆαα ααΉαααααα»ααααα ααααα·αααΎ vertex αα·α edge ααΆαα§αααααα ααα»α ααααααααΆ αααααααααα·ααααααΌαααααααΌαααΆαααααααααα»ααααα‘αΆαααααααΌαααααΆ (αααααΆααααααΆα ααααααα·αααΆααα·ααα 1 ααααΌαααΆααααααααααα·αααΎ vertex αα·α edge ααΆα§ααααααα·α ααα» αααααΆααααααΆα αααααααααα·α - "1" ααααα·αααΎααα "α αα" ααΈα ααα»α ααααΌα αα·α "-1" ααααα·αααΎααΆ "αα½ααααα αΌα" αα αααα»αααΆ (ααΆααΆααααα½ααααααααααΆαααααα»αααΆαα αα αΆα ααΈααααααααααΆ "αα" ααα αΆααααΌα ααΆ "αα½ααααα αΌα" αα αααα»αααα "-1")) α αααααΆααααααΆα αααααααΆααααααα ααΆααααΈααααααααααα½αα±αα 1 αα·α -1 α’αααα’αΆα αααααΆααααααααααα»ααααααα
2. αα ααΆαααααααααα·ααααααααΆαααααα αΌα
2.1 αααααΈααΆααααααΆα ααΆααΆααααααΎαααΆαα α’αααΈααααααααΆαα αΆααααΌα ααΆααΆαααααα ααΈαααα ααΆααΌαα α ααα»α ααααΌαααΈαα½ααααααααΆα ααα’αΆα ααααΆααααΆαα½ααα ααΆααααααααααΆαααααααΆαα½α (αααααΈ ααα·α ααα α’αΆαα...) αααααΉααααααΆαα»ααααααααααΌαααΆααα’αααα ααΆααααΉαααααααααΆααααααα±ααα αααααΆααααααΆα αααααααΉαααΆα ααΎαααΉααααααααα αααα»ααααααΈααααααααα ααα»α ααααΌαααΆααααααααααΆαααα "αααααα" ααΈα ααα»α ααααΌαα αααααΆααααααΆα αααααααΆααααααα ααΆαα’αα»ααααααΉαααΆαααααααα»αααααΆαα
2.2 αααααΈααααα’αΉαααααΈα αα ααΆαααααααααα·ααααααααααααα·ααα αααααΈααααα ααΌα ααα Captain Obviousness ααααΆααααΎα ααΆααα·αααΊααΆαααααΈαααααααααΆα αα αααααΈαα½ααααααΌαααΆααααααΆαααααα ααα»α α αΆααααααΎα α ααα»α αααα αα (αααααΆααααααΆα ααααααα·αααΆαααΉαααΆα ααααΆαααα·αααααΆαααα ααΈααααα αααααΈααΆαααααΆααααΆαααααα½αααααα½αα’αααα’αΆα ααααΎβα αααΆααβααααααβααΆβα§ααΆα ααα ααΆαβαααααΆααβα ααα»α βααααΌαβαααα»αβααααΆααβαααβααΎαβα‘αΎα) αα·αβαααααα (αααααΆααβααβααααΆα ααβααααααβααα»ααααα)α
α’αααβα’αΆα
βααΎαβαααααΈβαααΆααααΈαβαααβααΆαβααΆαβααΆαβααΎβαααβαααα’α·αβααααααβααα (αα·αβααΆαα½αβααΉαβααΆαβαααα αΆα) α§ααΆα ααα
2.3 α’αΆααααΆααααααΆα αα·ααααααΆαα ααΆααααααααααΌαα αααα»αααα αα ααααΌαααααααΆ ααΆααΊααΆαααααααα "ααΆαααα ααα αα" αααααΈαα ααΆααααααΆα αΌααα αααα»ααα ααΆααααααααααΆαααααα αΌααα½α (α’αΆαα ααα·α ααα)α ααΆαα» n ααΈαα½α (αααααΆαα ααα½ααααααααααααΆα αα) ααα’αΆααααααααααΆααααααααααα αΆααααααΎαααα’αΆααααΌα ααααΆ αααα αΆααααααΎαααΈαααα ααα»α ααααΌαααΆααα’αααα ααΆααααΉααα½ααααααΆααααααα±ααααααΌαααΆααααααααΆαα½αα
αα
ααΈααααααα»αααΆαααααΎαααΆααααααααααα’αΆα
αααααΆααααα»α (αααααΆαααααα½ααααα»α)α
3. Adjacency Vector αα·α Associative Adjacency Array
ααΆααΆαααααααααΆαααΆα’ααααα·αααααααααααΆααααΆααααα αα·ααααααΆα’αααααααααααααα·ααΈαααααΆαααααΆααα·ααααΆααΈααααααα ααα»ααααα’αααααααααααααΆαααααΆα ααα·αααΆαααΆαααααα ααΆαα αααΎαααααααααααααΆαααΆαα½αααΉααααααΈαααα ααΆααΆααα·α ααΆααΆααααα½αααααα·αααΎααααΆα ααααΆαααααα·ααα»α αα·ααααα αααΎαα ααΌα ααααα αΎα αααα»αααΆαα’αα·αααααααααααΈααααα»ααΆα αααα»αααααΎα±ααααα α·ααααα»αααΆααααΎ "ααΆαα’αα·αααααα/ααΆααΆ/ααΆααααααα/ααΆαααααΆααααααΌα" αααααα½ααα αααααΊα ααα·α ααααα ααΆαα αα·αα’αΆααααΆααααΆαααααααα
3.1 ααα·α ααααα ααΆααααααΆα
ααααΈ (a1)α ααααΆα ααααααΆααααααα
ααΎαααΉαα α
ααα·α
αααααααα
ααΆααααααΆαααααΆααααααΆα ααααααα·αααΆαααααααααΆαααα»αααααΆααααα
ααα½ααααααα
ααα½αααα (a[2i], a[2i+1],... ααααααα»αααααΌαααΆαααΆααααα c 0) ααααααα»αααααααααΌααΈαα½αα ααΊ a[2i], a[2i+1] αααααΆαααααααααΆα αααααΆαα
ααα»α
ααααΌα a[2i] αα·α a[2i+1] αααααααΆα
ααααααααααΆαααααααα·αααΆαααααααΆαα’αααΈααΆααΎααααΆα ααααααΌαααΆαααΉαααΆααα (αααααΎαααΆααααΈαααΊα’αΆα
ααααΎαα
ααΆα)α αα
αααααααΎαααααα digraph αααααααΌαααΆαα
αΆαααα»αααΆααααΌαααΆαααΉαααΆαααΈ a[2i] αα
a[2i+1]α αα
ααΈααα αα·αααΆααααααα αααααΆααααααΆα ααααααα·αααααααα·ααα
ααααα·αααΎα
αΆαααΆα
α αααααΌαααΆααααααΆααααααΆααααααΆααααααααΆαααααα’αΆα
ααααΌαααΆαα’αα»αααα (α§ααΆα ααα ααΆα
ααα»α
ααααΌααααααΆααααααααΆαααΆαααααααααΆαααααααα
ααΆαααα»α)α
αα αααα»α C++ ααΆααααΌαααΆαααααΆαα±αααααααΆααααα·α ααααα ααΆαααααααααΎ std::vector ααΌα ααααααααααααα ααΆαααααααααα·αααααααααα
ααααΈ (a2)α ααααΆα ααααααΆααααααα αααααααααααΊααΆα ααα½αααα
αααααΆαααααααααααΆααΆαα½α case (a1) ααΎαα α ααα·α ααααα ααΆααααααΆαααααΆααααααΆα αααααααααααααΆααααα ααα½ααααααΆαααααααααΆαααα»αααααΆαα (α’αΆααααΆααααα) ααααα (a[3i], a[3i+1], a[3i+2], ... αααααΆααααααααααααα»αααααΌαααΆαααΆααααα 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 α
ααααααΆαααΆααααα ααΆααααΌαααααααΌαααΆαααα½αααααΆααααΆ "αααααΈ" ααααα·αααΆααααααΆααΆαα αΌααα ααΆααααααα αααααααα α αΎααα ααΈααα Associative Adjacency Array αααα½ααααααααα αααααααΌαααΆααα·ααΆααααΆααΆααααααα
3.2 α’αΆααααΆααααΆααααααααΆα
ααΌα αααα ααααα·αααΎααΆαα αΌααα ααΆαααααααΆααααΆαα ααααααααααααΆ αα·ααααααααααααααα·ααααααααααΊααααΆαααααααΆααααΎα α αΎααααααΌαααΆαααααΆαα αα αΆααα·αα’αα»ααααΆαα±ααααΎαααααΎαααΆααααΈα adjacency ααααα α αΌαααΎααα·αα’αααΈαααααααααΎαα’αΆα ααααΆααααααΌαααα·α ααα adjacency ααΎααααΈαααααααΆααααα αΆαααα ααΌα αααα αααααΉαααΊααΆαααααααααΆα αα αααα’αΆα ααααΌαααΆααααααΆααααΆααΌα ααα½ααααααΆαααααΆααα ααΎαααααΎααα ααΌα α’αααΈ? ααΎβααΆβαα·αβαααβααΆβααΌαααβαααα»αβα’αΆααβαα ααΆαβαα? α αΎαβααααα·αβααΎβααΌα αααα α ααα»α’αααΈβααΆαβααΆβααΎαβαα·αβα’αα»ααααβααΆ? α’αα»ααααΆαα±ααααΎαααΆαα’αΆααααΆααααααα αααααΌαααααΈαα½αα - ααΌα ααα½ααααααααΆαα - ααΉαααααΌαααΆαααααΆααααΆαα½αααααα - α ααα½αααα α¬α ααα½ααα·αααααααααΆαααααααααααααα αα αααα»α C++ ααΆααααΌαααΆαααααΆαα±ααα’αα»αααααα ααΆααααααααααααααααα’ααααΎ std::map container (std::map , int> α¬ std::map , double>), α¬ std::multimap ααααα·αααΎαααα αααΎαααααΌαααΆαααααΉααα»αα ααΆααΆααααααΎαααΆαα, ααΎαααΆααα ααΆαααααααααααααΆαααααααΆαα»αααααΆα αααααααα’αααα αα αΆααα·α ααΆααα ααΆαααααααα "αααΆααααΈα" α’αΆα αααααααααΆα αααααααΆαααααα·ααα»ααα·ααααααΆα αααΎαα αΎααα·αααΆααααααΌαααΆαααΉααααΉααααααΆααααΆααα·αα’αα·αααααΆαααααα vertex (αααα»ααα·αααΉααα α’αααααΆααααΌαααΆαααΆ ααα»αααααα αα)α
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++ αααααΈα associative adjacency arrays α’αΆα ααααΌαααΆααααααααΌα ααΆααααααα std::map , std::vector> α¬ std::map , std::vector ααααααααααααΌααα αααα»α "key-value-vector" ααΉαααΆαααααααααααα α αΎααααααΆααααααΆααααααααΆααααααα»αααααααααααααΆααΆαααΈααΆαααα α
α―αααΆααααα
α’αααΈααααΆα αα αα·ααααα½ααααααααΆαααΆααΌαα α
1. Cormen, Thomas H., Leiserson, Charles I., Rivest, Ronald L., Stein, Clifford α αααα½ααααααααΆαα ααΆαααΆαααα αα·αααΆααα·ααΆα ααΆαααααα»αααααΎαααΈα’α ααααααΆααα ααΈααΆααΆα’ααααααα - M. : Williams Publishing House, 2 α
2. Harari Frank α ααααΉααααΈααααΆα ααα·αα M.: Mir, 1973 α
αααΆαααΆαααααααα’ααααα·ααααα’αααΈααα·α
αααααΌα
ααααΆ αα·αα’αΆααααΆααααααααα adjacencies:
3. Chernoukhov S.A. ααα·α
ααα adjacency αα·α associative adjacency array ααΆαα·ααΈααααΆα αα·ααααααΆαα»αααααΆα αα / SA Chernouhov α ααα·α
ααα αα·ααααααΈαα
ααΆααααααΆ ααΆαα
ααΆαααααααααα·ααααααααααΆαα±ααααααΆα αα // ααΆααααααΌαα’αααααααααααα·ααΈααα·ααααΆααΆααααα αα·αααΆαα’αα»ααααα’ααααααΆαα· βαααα αΆααααΆαα’αα»ααααααααααααααΆαα’αα·ααααααααααααααΆαα
αααααααα·α αα·ααα·ααΈααΎααααΈαααααααΆαααΆβ (ααΆαααΆααΌα ααααααΈ α‘α€ αααααααΆ ααααΆα α’α α‘α©)α β Sterlitamakα AMI, 14.09.2019, ααα α¦α₯-α¦α©
αααααα’ααΈαααΊαα·αααΆαααααααααααΎαααααΆαααα
4.
5.
ααααα: www.habr.com