Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ d-ΠΊΡΡΠΈ ΠΈ Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° Π³ΡΠ°ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠ°ΡΠΊΠ°Π»Π°.
- ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
- Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
- ΠΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "d-Π°ΡΠ½Π°Ρ ΠΊΡΡΠ°"
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΠΠ"
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΠΠ-Π΄Π΅ΡΠ΅Π²ΡΡ"
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "Π’Π°Π±Π»ΠΈΡΡ"
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"
- Π‘Ρ Π΅ΠΌΠ° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²
- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΠ»Π°ΡΡΠΎΠ²
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "d-Π°ΡΠ½ΠΎΠΉ ΠΊΡΡΠ°"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΠΠ"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΠΠ-Π΄Π΅ΡΠ΅Π²ΡΡ"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "Π’Π°Π±Π»ΠΈΡΠ°"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ"
- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
- ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
Π¦Π΅Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ β ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠ° "d-ΠΊΡΡΠ°" ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°.
- ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Google C++ Testing Framework.
- Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΠ°ΡΠΊΠ°Π»Π°. Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, Π³Π΄Π΅ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΡΠ΅Π±Π΅Ρ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠ°ΡΡ ΡΠ΅Π±Π΅Ρ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β Π³ΡΠ°Ρ Ρ ΡΠ°ΡΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΌ ΠΎΡΡΠΎΠ²Π½ΡΠΌ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ.
- ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ΅ΠΉΠΊΡΡΡΠ° ΠΈ ΠΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
###ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½ΡΡ ###
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠ° ΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°ΠΉΠ» view_graph.exe
ΠΈ Π΄Π°Π»Π΅Π΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ. Π Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ "create random" .
ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π³ΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π»Π΅Π΅ Π²ΡΠ±Π΅ΡΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²: ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° Π² ΠΎΠ΄Π½ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠ°ΡΠΊΠΈ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ "step by step":
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ "find spanning tree":
ΠΠ½ΠΎΠΏΠΊΠ° "cancel" ΠΎΡΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΡΠ΅ Ρ Π³ΡΠ°ΡΠΎΠΌ.
ΠΠ½ΠΎΠΏΠΊΠ° "delete img" ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ Π³ΡΠ°Ρ.
###ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ###
Π Ρ ΠΎΠ΄Π΅ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ:
- Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΡΡΠΎΠ² Google Test.
- Π‘ΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Microsoft Visual Studio 2015.
###ΠΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°###
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°:
gtest
β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Google Test.img
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΠΎΡΡΠ΅ΡΠ΅ ΠΊ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅.include
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².samples
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.sln
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ Visual Studio 2015.src
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² (cpp-ΡΠ°ΠΉΠ»Ρ).test
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΌ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ².README.md
β ΠΎΡΡΠ΅Ρ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅.
Π‘Π»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ:
.gitignore
β ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌΡΡ Git ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 7 ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
d-tree-lib
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²Data
,Tree
.Data
β ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π²Π΅ΡΠ°(ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ) ΡΠ·Π»ΠΎΠ².Tree
β ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ d-ΠΊΡΡΠ°ΠΌΠΈ.
queue
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ d-Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°.Queue
β ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 5 Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².QueueHeap
β ΠΊΠ»Π°ΡΡ, Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Queue, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ 5-ΠΈ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
graph
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²Graph
ΠΈEdges
.Graph
β ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΠ½ΠΎΡΡΡ Π³ΡΠ°Ρ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ 14 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².Edges
β ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΠ½ΠΎΡΡΡ ΡΠ΅Π±ΡΠΎ.
sep-set
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°separatedSet
.separatedSet
β ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°.
Dijkstra
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²Dijkstra
ΠΈDijkstraData
.Dijkstra
β ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅ΠΉΠΊΡΡΡΠ°.DijkstraData
β ΠΊΠ»Π°ΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Data.
Kruskl
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Kruskl ΠΈ KrusklEdges.Kruskl
β ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΠ°ΡΠΊΠ°Π»Π°.KrusklEdges
β ΠΊΠ»Π°ΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊData
.
HeapSort
β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²HeapSort
ΠΈDataHeap
.HeapSort
β ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΠ΅ΡΠΎΠ΄ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.DataHeap
β ΠΊΠ»Π°ΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊData
.
sample-Dijkstra
β ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ΅ΠΉΠΊΡΡΡΡ.sample-Kruskl
β ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠ°ΡΠΊΠ°Π»Π°.sample-heapsort
β ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.view_graph
β Windows Forms ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.gtest
β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Google Test.test
β ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Google Test, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ². Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ 78 ΡΠ΅ΡΡΠΎΠ².
###ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ###
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "d-Π°ΡΠ½Π°Ρ ΠΊΡΡΠ°"####
ΠΠ°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠ΅ d-Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ β ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π±ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π°, ΡΠΎΠ²Π½ΠΎ d ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ². ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ·Π»ΠΎΠ²:
- ΠΠΎΡΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΎΠΌΠ΅Ρ 0.
- ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ Π½ΠΎΠΌΠ΅Ρ i, ΡΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ id + 1,id + 2, ... , id + d.
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ·Π΅Π» Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ i ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅Π΄ΠΊΠ° (i-1)/d.
ΠΡΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ·Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ d-Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΈΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π½Π΅ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΠ» Π²Π΅ΡΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°Ρ , ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ d-ΠΊΡΡΠ΅ΠΉ.
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ d-ΠΊΡΡΠ°ΠΌΠΈ (ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΡΠΏΠ»ΡΡΠΈΠ΅, ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅) ΠΈ ΠΈΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ d-ΠΊΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ (ΡΠ½Π°ΡΠ°Π»Π° ΠΊΠΎΡΠ΅Π½Ρ, ΠΏΠΎΡΠΎΠΌ έ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², Π·Π°ΡΠ΅ΠΌ έ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΊΠΎΡΠ½Ρ ΠΈ Ρ.Π΄), Π½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ, Ρ.ΠΊ. ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΡΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ·Π»Π°ΠΌΠΈ d-ΠΊΡΡΠΈ:
- Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ² Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ i ΠΈ jέ
tmp = key[i];
key[i] = key[j];
key[j] = tmp;
- ΠΡΠΏΠ»ΡΡΠΈΠ΅ ΡΠ·Π»Π° Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ έ . ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π² d-ΠΊΡΡΠ΅. ΠΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΊΠ° ΠΈ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠ»ΡΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°.
while (i > 0){
P = (i - 1) / d;
if (key[p] > key[i])
{
Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅(i, p);
i = p;
}
else
{
break;
}
}
- ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠ·Π»Π° Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ έ . ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ° Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ.
c = minchild(i);
while (c != -1 && key[c] < key[i]){
Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅(c, i);
i = c;
c = minchild(i);
}
minchild(i)
{
if (id + 1 > n) return -1;
else
{
firstChild = id + 1;
lastChild = min{id + d, n};
minKey = key[firstChild];
minChild = firstChild;
for (int i = firstChild; i < lastChild; i++)
if (key[i] < minKey)
{
minKey = key[i];
minChild = i;
}
return minChild;
}
}
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ·ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ (Π²Π΅ΡΠΎΠΌ)
ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, Ρ.ΠΊ. ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠΎΡΠ½Π΅ Π΄Π΅ΡΠ΅Π²Π°, ΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
- Π£Π±ΠΈΠ²Π°Π΅ΠΌ ΡΠ·Π΅Π» Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ.
- ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΎΡ ΡΠ·Π΅Π» Π² ΠΊΠΎΡΠ΅Π½Ρ.
- ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
key[0] = key[n - 1];
n--;
ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅(0);
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΊΡΡΠΈΠ²Π°Π½ΠΈΡ
ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΠΊΠ»ΡΡΠ΅ΠΉ d-ΠΊΡΡΡ. ΠΡΡΠ΅ΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Π΅ΡΠ° ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π±ΠΎΠ»ΡΡΠ΅ Π²Π΅ΡΠ° ΡΡΠΎΠ³ΠΎ ΡΠ·Π»Π°. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΄Π΅ΡΠ΅Π²ΡΡ Ρ ΠΊΠΎΡΠ½ΡΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ Π½ΠΎΠΌΠ΅ΡΠ° n β 1, n β 2, ... , n - i ΠΎΠΊΡΡΠ΅Π½Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ·Π»Π° n β i β 1, Π΄Π΅ΡΠ΅Π²ΠΎ Ρ ΠΊΠΎΡΠ½Π΅ΠΌ n β i β 1 ΡΠΎΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠΊΡΡΠ΅Π½Π½ΡΠΌ.
for (int i = n β 1; i >= 0; i--){
ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅(i);
}
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΠΠ"####
ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ β ΡΠ°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΠ·Π»Π°ΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΏΠΈΡΠ°Π½Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΠΊ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅: Ρ.Π΅. Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ, Π° ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ β Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ ΠΈ ΠΈΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ
ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π£Π·Π΅Π» Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:
- Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°.
- Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°.
- ΠΠ»ΡΡ ΡΠ·Π»Π°.
- ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΌ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡΠΌ. // ΡΠ΅ΠΊΡΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°
Node* search(Node *root, int key){
if (root == NULL) return NULL;
if (root->key == key) return root;
if (key < root->key) return search(root->left, key);
else return search(root->right, key);
}
// ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°
Node* search(Node* root, int key){
Node *curr = root;
while (curr != NULL && curr->key != key);
{
if (key < curr->key) curr = curr->left;
else curr = curr->right;
}
return curr;
}
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΏΡΠ°Π²ΠΎΠΉ Π²Π΅ΡΠ²ΠΈ Π΄Π΅ΡΠ΅Π²Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°.
Node* searchMax(Node* root){
Node* curr = root;
while (curr->right != NULL)
{
curr = curr->right;
}
return curr;
}
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΠ²ΠΈ Π΄Π΅ΡΠ΅Π²Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°.
Node* searchMin(Node* root){
Node* curr = root;
while (curr->left != NULL)
{
curr = curr->left;
}
return curr;
}
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π°. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠΎ ΠΈΡΠ΅ΠΌ ΡΠ·Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»Π΅Π²ΡΠΌ ΡΡΠ½ΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Node* searchNext(Node* curr){
Node *res = NULL;
if (curr->right != NULL)
{
res = searchMin(curr);
return res;
}
res = curr->parent;
Node *tmp = curr;
while (res != NULL && tmp == res->right)
{
tmp = res;
res = res->parent;
}
return res;
}
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π°. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠΎ ΠΈΡΠ΅ΠΌ ΡΠ·Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΡΠΌ ΡΡΠ½ΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Node* searchPrev(Node* curr){
Node *res = NULL;
if (curr->left != NULL)
{
res = searchMax(curr);
return res;
}
res = curr->parent;
Node *tmp = curr;
while (res != NULL && tmp == res->left)
{
tmp = res;
res = res->parent;
}
return res;
}
- ΠΡΡΠ°Π²ΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ Π² Π½Π΅ΠΏΡΡΡΠΎΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ·Π΅Π» Ρ ΠΊΠ»ΡΡΠΎΠΌ key ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ data. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠΎΠ³Π΄Π° Π² Π΄Π΅ΡΠ΅Π²Π΅ Π²ΡΠ΅Π³Π΄Π° Π½Π°ΠΉΠ΄Π΅ΡcΡ ΡΠ·Π΅Π» Y, ΡΠ°ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ Y->key>key, ΡΠΎ Ρ ΡΠ·Π»Π° Y Π½Π΅Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, Π΅ΡΠ»ΠΈ ΠΆΠ΅ Y->key<key, ΡΠΎ Ρ ΡΠ·Π»Π° Y Π½Π΅Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°.
void insert(Node **root, Node *node){
if (*root == NULL)
{
*root = node;
return;
}
Node *x = *root, *y;
while (x != NULL)
{
y = x;
if (node->key < x->key) x = x->left;
else x = x->right;
}
node->parent = y;
if (node->key < y->key) y->left = node;
else y->right = node;
}
- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ, Ρ.ΠΊ. ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»Π° Π΄Π΅ΡΠ΅Π²ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡΠ°ΡΡΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΌ. ΠΡΡΡΡ z - ΡΠ·Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ 3 ΡΠ»ΡΡΠ°Ρ:
- Π£Π·Π΅Π» z ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΡΠΎΠΌ, Ρ.Π΅. Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ². Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΎΠ±Π½ΡΠ»ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°.
- Π£Π·Π΅Π» z ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° (Π ΠΈΡ. 1). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠΈΠ½ΡΡΡ ΠΏΡΠ°Π²ΡΡ ΠΈΠ»ΠΈ Π»Π΅Π²ΡΡ ΡΡΡΠ»ΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π±Π΅Π½ΠΎΠΊ.
- Π£Π·Π΅Π» z ΠΈΠΌΠ΅Π΅Ρ Π΄Π²ΡΡ
ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² (ΠΎΠ±ΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π° Ρ Π΄Π²ΡΠΌΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π΅ΡΠ΅Π²Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Π ΠΈΡ. 2:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ·Π΅Π» Y ,ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡ Π·Π° ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΠΌ.
- ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ·Π΅Π» Y Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΠ·Π»Π° z.
- ΠΠΎΡΠΎΠΌΠΊΠ° ΡΠ·Π»Π° Y Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ Π΅Π³ΠΎ ΡΡΠ°ΡΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΏΡΠ½ΠΊΡΠΈΡΠ½Π°Ρ ΡΡΡΠ΅Π»ΠΊΠ°). ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ·Π΅Π» Y Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°. Π£ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ.
Π ΠΈΡ.1. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π° Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ.
Π ΠΈΡ.2. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π° Ρ Π΄Π²ΡΠΌΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ (ΡΠΈΠ½ΠΈΠΉ ΡΠ·Π΅Π» β ΡΠ·Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π°Π»ΡΠ΅ΠΌ).
void remove(Node *z){
Node *y = NULL, *x = NULL;
if (z->left != NULL && z->right != NULL)
{
y = searchNext(z); // 3d case
}
else
{
y = z; // 1st and 2d cases
}
if (y->left != NULL)
{
x = y->left;
}
else
{
x = y->right;
}
if (x != NULL) x->parent = y->parent;
if (y->parent != NULL)
{
if (y == y->parent->left) y->parent->left = x;
else y->parent->right = x;
}
if (y != z)
{
z->key = y->key;
delete z->data;
z->data = y->data;
}
}
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΠΠ-Π΄Π΅ΡΠ΅Π²ΡΡ"####
ΠΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΠΠ-ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π²ΡΡΠΎΡΡ Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΈ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠΠ-ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ Π²ΡΠ°ΡΠ΅Π½ΠΈΠΉ (Π ΠΈΡ. 3.). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΏΡΠ°Π²ΠΎΠΌΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ:
-
ΠΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ (Π ΠΈΡ. 4.). Π’Π°ΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠ·Π΅Π», Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ Π½Π°ΡΡΡΠ°Π΅ΡΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΡΠ΅Π½Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠΎΡΠ½Π΅ΠΌ Π²ΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, Π° Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»Π΅Π²ΡΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ Β«Π±ΡΠ²ΡΠ΅Π³ΠΎΒ» ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
-
ΠΠ²ΡΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ (Π ΠΈΡ. 10). ΠΠ²ΡΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠ·Π΅Π» ΠΈ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, Π΄Π΅ΡΠ΅Π²ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π·Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ²:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ·Π΅Π» Π, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° ΠΊΠΎΡΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Π.
- Π£Π·Π΅Π» Π ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠΎΡΠ½Π΅ΠΌ Π΄Π΅ΡΠ΅Π²Π°.
- ΠΠ΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π’2 ΡΠ·Π»Π° Π ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠ°Π²ΡΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΡΠ·Π»Π° Π.
- ΠΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π’3 ΡΠ·Π»Π° Π ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»Π΅Π²ΡΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΡΠ·Π»Π° Π‘.
Π ΠΈΡ.3. ΠΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ.
Π ΠΈΡ.4. ΠΠ²ΡΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ.
ΠΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ Π² ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π΅ΡΠ΅Π²ΡΡ, Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΠ°ΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π»Π΅Π²ΠΎΠ³ΠΎ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π° ΠΈΠ· ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΡΠΈΡΡΠ°ΡΠΈΡΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠ°Π²ΡΠΉ Π³ΡΠ°Ρ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½Π° Π ΠΈΡ. 3 ΠΈ Π ΠΈΡ. 4, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°ΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ ΡΠ·Π»ΠΎΠ².
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΠΠ-ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ
ΠΠ°Π½ΠΎ: Π΄Π΅ΡΠ΅Π²ΠΎ Π’ ΠΈ ΠΏΠ°ΡΠ° (K,V). ΠΠ°Π΄Π°ΡΠ°: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΡ (K, V) Π² Π΄Π΅ΡΠ΅Π²ΠΎ Π’.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
- ΠΡΠ»ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΡΡΠΎ, Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π½Π° Π΄Π΅ΡΠ΅Π²ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΡΠ·Π»ΠΎΠΌ ((K,V),null, null) ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ.
- ΠΠ½Π°ΡΠ΅ ΡΡΠ°Π²Π½ΠΈΡΡ K Ρ ΠΊΠ»ΡΡΠΎΠΌ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° X. a. ΠΡΠ»ΠΈ K>=X, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ (K,V) Π² ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π’. b. ΠΡΠ»ΠΈ K<X, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ (K,V) Π² Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π’.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π° ΠΈΠ· ΠΠΠ-ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°
ΠΠ°Π½ΠΎ: Π΄Π΅ΡΠ΅Π²ΠΎ Π’ Ρ ΠΊΠΎΡΠ½Π΅ΠΌ root ΠΈ ΠΊΠ»ΡΡΠΎΠΌ K. ΠΠ°Π΄Π°ΡΠ°: ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· Π΄Π΅ΡΠ΅Π²Π° Π’ ΡΠ·Π΅Π» Ρ ΠΊΠ»ΡΡΠΎΠΌ K (Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ Π΅ΡΡΡ).
ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
- ΠΡΠ»ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ T ΠΏΡΡΡΠΎ, ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ.
- ΠΠ½Π°ΡΠ΅ ΡΡΠ°Π²Π½ΠΈΡΡ K Ρ ΠΊΠ»ΡΡΠΎΠΌ X ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° root:
- ΠΡΠ»ΠΈ K>X, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ K ΠΈΠ· ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Π’ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ;
- ΠΡΠ»ΠΈ K<X, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ K ΠΈΠ· Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Π’ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π°Π»ΠΈΠ½ΡΠΈΡΠΎΠ²ΠΊΡ;
- ΠΡΠ»ΠΈ K=X, ΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠΈ ΡΠ»ΡΡΠ°Ρ.
- ΠΡΠ»ΠΈ ΠΎΠ±ΠΎΠΈΡ Π΄Π΅ΡΠ΅ΠΉ Π½Π΅Ρ, ΡΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ·Π΅Π» ΠΈ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅Π³ΠΎ Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ·Π»Π°;
- ΠΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π΅ΡΠ΅ΠΉ Π½Π΅Ρ, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ½ΠΊΠ° ΡΡΠ°Π²ΠΈΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°, Π·Π°ΡΠΈΡΠ°Ρ Π΅Π³ΠΎ ΡΡΠ°ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ ΠΏΠ°ΠΌΡΡΡ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΠΌ ΡΠ·Π»ΠΎΠΌ;
- ΠΡΠ»ΠΈ ΠΎΠ±Π° ΡΠ΅Π±ΡΠ½ΠΊΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ, ΡΠΎ:
- ΠΠ°ΠΉΠ΄ΡΠΌ ΡΠ·Π΅Π», ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ°ΠΌΡΠΌ Π»Π΅Π²ΡΠΌ ΡΠ·Π»ΠΎΠΌ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΡΠ·Π»ΠΎΠΌ Right(root);
- Π‘ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ (ΠΊΡΠΎΠΌΠ΅ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ);
- ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ·Π΅Π».
int rightTreeBalancing(BalanceTreeNode** node){
int height = 0; // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΠΎΡΡ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ
switch ((*node)->GetBalance())
{
case -1:
{
// Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π»ΠΎ
// 1. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΡΠ·Π»Π°
BalanceTreeNode *left = (BalanceTreeNode *)((*node)->left);
// 2. ΠΡΠ»ΠΈ Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π΅Ρ Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ,
// ΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΠ°ΠΉ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°,
if (left->GetBalance() == -1)
{
// Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Π»Π΅Π²ΡΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ
// ΡΠ·Π»Π°, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ°
(*node)->left = left->right;
// ΠΏΡΠ°Π²ΡΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ Ρ
// ΠΊΠΎΡΠ½Π΅ΠΌ Π² ΡΠ·Π»Π΅, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ
left->right = (*node);
(*node)->SetBalance(0);
(*node) = left;
}
else
{
BalanceTreeNode *right = (BalanceTreeNode *)(left->right);
left->right = right->left;
right->left = left;
(*node)->left = right->right;
right->right = (*node);
if (right->GetBalance() == -1) (*node)->SetBalance(1);
else (*node)->SetBalance(0);
if (right->GetBalance() == 1) (*node)->SetBalance(-1);
else (*node)->SetBalance(0);
(*node) = right;
(*node)->SetBalance(0);
}
height = 0;
break;
}
case 0;
{
// Π»Π΅Π²ΠΎΠ΅ ΠΈ ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π²ΡΡΠΎΡΡ
(*node)->SetBalance(-1); // ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ Π»Π΅Π²ΠΎΠ΅ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π΅Ρ
height = 1;
break;
}
case 1:
{
// ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π»ΠΎ
(*node)->SetBalance(0); // ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ Π²ΡΡΠΎΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°Ρ
height = 0;
break;
}
}
return height;
}
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "Π’Π°Π±Π»ΠΈΡΡ"####
Π’Π°Π±Π»ΠΈΡΠ° β ΡΡΠΎ Π½Π°Π±ΠΎΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠ΄ΠΎΠΌ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ² (ΡΠ²ΠΎΠΉΡΡΠ²). ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ»ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡΠΈ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½Ρ, Π° ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ. Π’Π°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ:
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅.
- Π’Π΅ΠΊΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅.
ΠΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΡΡΠΎΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ:
- ΠΠΎΠΈΡΠΊ Π·Π°ΠΏΠΈΡΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ.
- ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΡ.
- ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡ Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ
class TabRecord{
protected:
TKey key;
TData *data;
public:
TabRecord(TKey _key, TData *_data)
{
key = _key;
data = _data;
}
TData* GetData() { return data; }
TKey GetKey() { return key; }
}
ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ
class Table{
protected:
int tabSize;
int dataCount;
int currPos;
public:
Table(int _tabSize);
// ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
int IsEmpty() const;
int IsFull() const;
int GetDataCount() const;
// ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ
virtual TabRecord* FindRecord(TKey key) = 0;
virtual void InsertRecord(TKey key, TData* data) = 0;
virtual void RemoveRecord(TKey key) = 0;
// Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅
virtual int Reset()
{
currPos = 0;
return IsTabEnded();
}
virtual int GetNext()
{
if (!IsTabEnded()) currPos++;
return IsTabEnded();
}
virtual int IsTabEnded() const { return currPos >= tabSize; }
// Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ
virtual TKey GetKey() const;
virtual TData* GetData() const;
}
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"####
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ°Π±Π»ΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΠΏΡΠΎΡΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π° ΡΠΈΡΠ»Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉΡΠ°Π±Π»ΠΈΡΡ. ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, ΡΠ°ΠΊΡΡ ΠΆΠ΅ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ. ΠΡΡΠ°Π²ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Ρ.ΠΊ. ΠΏΠΎ ΡΡΡΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ°Π±Π»ΠΈΡ
class ScanTable: public Table{
protected:
TabRecord **records;
public:
ScanTable(int _tabSize):Table(_tabSize) { };
// ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ
virtual TabRecord* FindRecord(TKey key)
{
for (int i = 0; i < dataCount; i++)
{
if (records[i]->key == key)
{
currPos = i;
return records[i];
}
}
return NULL;
}
virtual void InsertRecord(TKey key, TData* data)
{
if (!IsFull())
{
records[dataCount++] = new TabRecord(key, data);
}
}
virtual void RemoveRecord(TKey key)
{
if (!IsEmpty())
{
if (FindRecord(key) != NULL)
{
delete records[currPos];
records[currPos] = records[--dataCount];
}
}
}
}
####Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ "Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"####
Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ β ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ (ΠΈΠ»ΠΈ ΡΠ±ΡΠ²Π°Π½ΠΈΡ) ΠΊΠ»ΡΡΠ΅ΠΉ. Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ ΡΠ°Π±Π»ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π°ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΠ°Π»Π΅Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π° ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ. ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡ ΡΠΈΡΠ»Π° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, ΡΡΠΎΠ±Ρ Π½Π΅ Π½Π°ΡΡΡΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π²ΠΏΡΠ°Π²ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π΅Π½ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ΄Π²ΠΈΠ³ Π·Π°ΠΏΠΈΡΠ΅ΠΉ:
- ΠΠΎΠΈΡΠΊ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ.
- Π‘Π΄Π²ΠΈΠ³ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π²Π»Π΅Π²ΠΎ.
class SortTable: public ScanTable{
protected:
void SortData(); // ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ
public:
SortTable(int _tabSize): ScanTable(_tabSize) { };
SortTable(const ScanTable *table);
// ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ
virtual TabRecord* FindRecord(TKey key)
{
int i, i1 = 0, i2 = dataCount β 1;
TabRecord *rec = NULL:
while (i1 <= i2)
{
i = (i1 + i2) / 2;
if (key == records[i]->key)
{
i1 = i + 1;
i2 = i;
rec = records[i];
}
else if (key > records[i]->key)
{
i1 = i + 1;
}
else
{
i2 = i β 1;
}
}
currPos = i2;
return rec;
}
virtual void InsertRecord(TKey key, TData* data)
{
if (!IsFull())
{
TabRecord* rec = FindRecord(key);
for (int i = dataCount; i > currPos; i--)
{
records[i] = records[i β 1];
}
records[currPos] = new TabRecord(key, data);
dataCount++;
}
}
virtual void RemoveRecord(TKey key)
{
if (!IsEmpty())
{
TabRecord *rec = FindRecord(key);
if (rec != NULL)
{
delete records[currPos];
for (int i = currPos; i < dataCount - 1; i++)
{
records[i] = records[i + 1];
}
dataCount--;
}
}
}
}
###Π‘Ρ Π΅ΠΌΠ° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²###
###ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΠ»Π°ΡΡΠΎΠ²###
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "d-Π°ΡΠ½ΠΎΠΉ ΠΊΡΡΠ°"####
-
ΠΠΎΠ»Ρ:
-
Key
(Data) - ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π΅ΡΠ΅Π²Π°. -
Size
(int) - ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π΄Π΅ΡΠ΅Π²Π΅. -
d
(int) - Π°ΡΠ½ΠΎΡΡΡ ΠΊΡΡΠΈ. -
ΠΠ΅ΡΠΎΠ΄Ρ:
-
Tree(int d)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ½ΠΎΡΡΠΈ ΠΊΡΡΠΈ. -
~Tree()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
void input(Data *&i)
- ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠ·Π»ΠΎΠ². -
void inputGroup(Data **keys, int num)
- ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π³ΡΡΠΏΠΏΡ ΡΠ·Π»ΠΎΠ². -
Data* erase()
- ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΄Π°Π»ΡΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ·Π΅Π». -
Data* erase(int i)
- ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΄Π°Π»ΡΡΡΠΈΠΉ i-ΡΠΉ ΡΠ·Π΅Π». -
void transposing(int i, int j)
- ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ΅Π½ΡΡΡΠΈΠΉ Π΄Π²Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ·Π»Π° ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. -
void surfacing(int i)
- ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠ»ΡΡΠΈΡ i-ΠΎΠ³ΠΎ ΡΠ·Π»Π°. -
void immersion(int i)
- ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ i-ΠΎΠ³ΠΎ ΡΠ·Π»Π°. -
void withdrawal(int i)
- ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·ΡΡΡΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·Π»Π°. -
void hilling()
- ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠΊΡΡΠΈΠ²Π°Π½ΠΈΡ. -
int isFull()
- ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ ΠΊΡΡΠΈ. -
int isEmpty()
- ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΡΡΡΠΎΡΠ΅ ΠΊΡΡΠΈ. -
int minchild(int i)
- ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° i-ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΠΠ"####
Π£Π·Π΅Π» Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡΠΎΠΌ Node
, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ:
-
key
(float) - ΠΊΠ»ΡΡ. -
data
(void*) - Π΄Π°Π½Π½ΡΠ΅. -
pleft
(Node*) - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°. -
pright
(Node*) - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°. -
parent
(Node*) - ΡΠΊΠ°Π°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. -
root
(Node*) - ΠΊΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π°. -
ΠΠ΅ΡΠΎΠ΄Ρ:
-
BinSearchTree()
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
~BinSearchTree()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
Node* search(float key)
- ΠΏΠΎΠΈΡΠΊ ΡΠ·Π»Π° ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
Node* searchPrev(Node *node)
- ΠΏΠΎΠΈΡΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°. -
Node* searchNext(Node *node)
- ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°. -
Node* searchMin(Node *node = 0)
- ΠΏΠΎΠΈΡΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·Π»Π°. -
Node* searchMax(Node *node = 0)
- ΠΏΠΎΠΈΡΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·Π»Π°. -
void DelNode(Node *node)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π°. -
virtual void add(Node *&node)
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π°. -
virtual void del(float key)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π° ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual Node* pull(float key)
- ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠ·Π»Π° ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
int isEmpty() const
- ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΡΡΡΠΎΡΠ΅ Π΄Π΅ΡΠ΅Π²Π°.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΠΠ-Π΄Π΅ΡΠ΅Π²ΡΡ"####
-
ΠΠ΅ΡΠΎΠ΄Ρ:
-
AVLTree()
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
virtual ~AVLTree()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual void add(AVLNode *&node)
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π°. -
virtual void del(float key)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π° ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual void del(Node* node)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π°. -
virtual Node* pull(float key)
- ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠ·Π»Π° ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual Node* pull(Node* node)
- ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠ·Π»Π°. -
int rotateRight(AVLNode *&node)
- ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ. -
int rotateLeft(AVLNode *&node)
- Π»Π΅Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ. -
int DRotateRight(AVLNode *&node)
- Π΄Π²ΡΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠ°Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ. -
int DRotateLeft(AVLNode *&node)
- Π΄Π²ΡΠΊΡΠ°ΡΠ½ΡΠΉ Π»Π΅Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ. -
int balanceDetection(AVLNode *node, int &dep)
- ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π·Π½ΠΈΡΡ Π²ΡΡΠΎΡ Π² Π»Π΅Π²ΠΎΠΌ ΠΈ ΠΏΡΠ°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅. -
int height(AVLNode *node)
- ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΡΠΎΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π°. -
int needBalance(AVLNode *&node)
- ΡΠ΅ΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ Π±Π°Π»Π°Π½Ρ Π±ΠΎΠ»ΡΡΠ΅ 2 ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ. -
void ins(AVLNode *&localRoot, AVLNode *&node)
- ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ Π²ΡΡΠ°Π²ΠΊΠ° ΡΠ·Π»Π°. -
Node* remuve(AVLNode *&localRoot, float key)
- ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ·Π»Π° ΠΈ Π΅Π³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "Π’Π°Π±Π»ΠΈΡΠ°"####
ΠΠ°ΠΏΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠΌ TabRecord
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Ρ ΠΊΠ»ΡΡ Ρ
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ°. ΠΠ°Π·Π° Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ°Π±Π»ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠΌ Table
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ:
-
ΠΠΎΠ»Ρ(TabRecord):
-
Key
(int) - ΠΊΠ»ΡΡ. -
data
(void*) - Π΄Π°Π½Π½ΡΠ΅. -
ΠΠ΅ΡΠΎΠ΄Ρ(TabRecord):
-
TabRecord(float key, void *data)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
float GetKey() const
- Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°. -
void* GetData() const
- Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . -
ΠΠΎΠ»Ρ(Table):
-
Size
(int) - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ. -
count
(int) - ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΠ°Π±Π»ΠΈΡΠ΅. -
CurrPos
(int) - ΡΠ΅ΠΊΡΡΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ. -
ΠΠ΅ΡΠΎΠ΄Ρ(Table):
-
Table(int Size)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
virtual ~Table()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual TabRecord *find(float key)
- ΠΏΠΎΠΈΡΠΊ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual int add(float key, void *data) = 0
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ. -
virtual int del(float key) = 0
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ. -
virtual TabRecord* getm() = 0
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. -
virtual TabRecord* getM() = 0
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. -
int isEmpty() const
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΡ Π½Π° ΠΏΡΡΡΠΎΡΡ. -
int isFull() const
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΡ Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ. -
int getDataCount()
const - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π°ΠΏΠΈΡΠ΅ΠΉ. -
virtual int Reset()
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π² ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. -
virtual int GetNext()
- ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. -
virtual int isTableEnded()
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ° ΡΠ°Π±Π»ΠΈΡΡ.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"####
-
ΠΠΎΠ»Ρ:
-
recs
(TabRecord**) - ΠΌΠ°ΡΡΠΈΠ² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° Π·Π°ΠΏΠΈΡΠΈ. -
ΠΠ΅ΡΠΎΠ΄Ρ:
-
ScanTable(int Size)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
virtual ~ScanTable()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual TabRecord *find(float key)
- ΠΏΠΎΠΈΡΠΊ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual int add(float key, void* data)
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ. -
virtual int del(float key)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ. -
virtual TabRecord* pull(float key)
- ΠΈΠ·ΡΡΡΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ. -
virtual TabRecord* getm()
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. -
virtual TabRecord* getM()
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "Π£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ"####
-
ΠΠ΅ΡΠΎΠ΄Ρ:
-
ScanTable(int Size)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
virtual ~ScanTable()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual TabRecord *find(float key)
- ΠΏΠΎΠΈΡΠΊ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΡ. -
virtual int add(float key, void* data)
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ. -
virtual int del(float key)
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ. -
virtual TabRecord* pull(float key)
- ΠΈΠ·ΡΡΡΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ. -
virtual TabRecord* getm()
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. -
virtual TabRecord* getM()
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
####ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ"####
ΠΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ β ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠΈ ΡΡΠ΅ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π³Π΄Π΅ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΅ΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ. ΠΡΠ»ΠΈ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ, ΠΎΠ½ΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΡ (heap).
QueueHeap ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Queue ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ.
-
ΠΠΎΠ»Ρ:
-
*heap
(Tree) - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΡΡΡ. -
ΠΠ΅ΡΠΎΠ΄Ρ:
-
QueueHeap(int d=4)
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
QueueHeap(Data **keys, int num, int d)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³ΡΠΏΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². -
~QueueHeap()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual void add(Data *&key)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual Data* popidx(int i)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Π²ΡΠΏΠ»ΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Ρ i-ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual void update()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. -
virtual int isFull()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. -
virtual int isEmpty()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΡΡΡΠΎΡΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
QueueTree
ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Queue
.
- ΠΠΎΠ»Ρ:
*tree
(AVLTree) - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π΄Π΅ΡΠ΅Π²ΠΎ.
-
ΠΠ΅ΡΠΎΠ΄Ρ:
-
QueueTree()
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
QueueTree(Data **keys, int num)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³ΡΠΏΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². -
~QueueTree()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual void add(Data *&key)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual Data* popidx(int i)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Π²ΡΠΏΠ»ΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Ρ i-ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual void update()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. -
virtual int isFull()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. -
virtual int isEmpty()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΡΡΡΠΎΡΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
QueueTable
ΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Queue
...
- ΠΠΎΠ»Ρ:
*tab
(SortTable) - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ.
-
ΠΠ΅ΡΠΎΠ΄Ρ:
-
QueueTab()
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. -
QueueTab(int Size)
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³ΡΠΏΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². -
~QueueTab()
- Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. -
virtual void add(Data *&key)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual Data* popidx(int i)
β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Π²ΡΠΏΠ»ΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Ρ i-ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. -
virtual void update()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. -
virtual int isFull()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. -
virtual int isEmpty()
β ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΎ ΠΏΡΡΡΠΎΡΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠ°ΡΠΊΠ°Π»Π° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΡΠ»Ρ Β«ΠΆΠ°Π΄Π½ΡΡ Β» Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Ρ.Π΅. Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΈΠ·
ver
ΡΠΈΠ½Π³Π»Π΅ΡΠΎΠ½ΠΎΠ² ΡΠ½ΠΈΠ²Π΅ΡΡΠ° {1, 2, ... ,ver
}. (separatedSet *SArr=new separatedSet(ver);
) - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ΅Π±Π΅Ρ
tree
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡ Π² ΡΠΎΡΡΠ°Π² ΠΎΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°. (Graph *tree=new Graph(ver)
) - ΠΠΎΠΈΡΠΊ ΡΠ΅Π±ΡΠ°
e
Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π²Π΅ΡΠΎΠΌ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ΅Π±Π΅Ρ (e=q->popidx(0)
). - ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
A
,ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ n(e).(n=((KrasklEdges*)e)->edge->n; A=SArr->subDef(n);
) - ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
B
,ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ k(e).(k=((KrasklEdges*)e)->edge->k; B=SArr->subDef(k);
) - ΠΡΠ»ΠΈ
A!=B
,ΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅Π±ΡΠΎe
Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎtree
. (SArr->unionS(A, B); tree->inputEdge(n, k, w);
) - Π¨Π°Π³ΠΈ 3-6 ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ°
q!=β
ΠΈ|Size| < ver β 1
. (while(Size<ver-1 && !q->isEmpty())
)
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅ΠΉΠΊΡΡΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΠ΅ ΠΏΡΡΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ° Π΄ΠΎ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ . ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π³ΡΠ°ΡΠΎΠ² Π±Π΅Π· ΡΡΠ±Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ°.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ
dist[i]
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°Π²Π½ΡΠΌ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ. - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ
p[i]
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΠΉ ΠΏΡΡΡ ΠΎΡstartV
Π΄ΠΎi
. - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
q
. - ΠΠΎΠΊΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π΅ ΠΏΡΡΡΠ° (
!q->isEmpty
) ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:- ΠΠ·ΡΠΌΠ°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠ½Π°
currV
Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ. (currV=((DijkstraData*)q->popidx(0))->num;
) - Π ΡΠΈΠΊΠ»Π΅ ΠΎΡ 0 Π΄ΠΎ
edg
(ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅Π±Π΅Ρ) ΠΈΡΠ΅ΠΌ ΡΠ΅Π±ΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΠΌ(ΠΊΠΎΠ½ΡΠΎΠΌ) ΡcurrV
. - ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅Π±ΡΠΎ Π½Π°ΡΠ»ΠΎΡΡ, ΡΠΎ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡ ΠΊΠΎΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΡΠ°Π½Π΅Π΅ ΠΈΠΌΠ΅Π²ΡΠΈΠΉΡΡ Π΄ΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ.
- ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΌΡ Π΄ΠΎΠ±Π°Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
dist
. - ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΠ½Π΅Ρ(Π½Π°ΡΠ°Π»ΠΎ) ΡΠ΅Π±ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ² ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΡ
ΠΏΡΡΠ΅ΠΉ
p
. - ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. (
q->update();
) - ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π² ΠΏΡΠ½ΠΊΡ 4.
- ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΌΡ Π΄ΠΎΠ±Π°Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
- ΠΠ·ΡΠΌΠ°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠ½Π°
ΠΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° β Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ, Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ ΠΈ Π»ΡΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π° Π(n log(n))
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
Π½Π° Π²Ρ
ΠΎΠ΄ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Elems
- Π ΡΠΈΠΊΠ»Π΅ ΠΎΡ i=Size(ΠΊΠΎΠ»-Π²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°) Π΄ΠΎ 1 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ:
- Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ 0-ΠΎΠ³ΠΎ ΠΈ Size-1 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. (
heap->transposing(i, 0);
) - i-ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΡΡΠΈ. (
Elems[i] =(int)heap->erase()->priority;
) - ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅(0). (
heap->immersion(0);
)
- Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ 0-ΠΎΠ³ΠΎ ΠΈ Size-1 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. (
- ΠΠ΅ΡΠ²ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°
Elems[0]
ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΎΡΡΠ°Π²ΡΠ΅Π³ΠΎΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΡΡΠΈ(heap
)
Π Ρ ΠΎΠ΄Π΅ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠ°Ρ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ»Π°ΡΡΡ d-Π°ΡΠ½Π°Ρ ΠΊΡΡΠ° ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΡΠ°ΡΠΊΠ°Π»Π° ΠΈ ΠΠ΅ΠΉΠΊΡΡΡΡ. Π’Π°ΠΊ ΠΆΠ΅ Π±ΡΠ»ΠΈ Π½Π°ΡΠ°Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠ°ΡΠΊΠ°Π»Π° Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ 78 ΡΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ΅ ΡΠ΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ.
- ΠΠ΅Π²ΠΈΡΠΈΠ½ Π. Π. ΠΠ»Π°Π²Π° 6. ΠΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ: ΠΠΈΡΠ°ΠΌΠΈΠ΄Ρ ΠΈ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Π°Π»ΡΠ½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° // ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΈ Π°Π½Π°Π»ΠΈΠ· β Π.: ΠΠΈΠ»ΡΡΠΌΡ, 2006. β Π‘. 275β284. β 576 Ρ.
- Π’ΠΎΠΌΠ°Ρ Π₯. ΠΠΎΡΠΌΠ΅Π½, Π§Π°ΡΠ»ΡΠ· Π. ΠΠ΅ΠΉΠ·Π΅ΡΡΠΎΠ½, Π ΠΎΠ½Π°Π»ΡΠ΄ Π. Π ΠΈΠ²Π΅ΡΡ, ΠΠ»ΠΈΡΡΠΎΡΠ΄ Π¨ΡΠ°ΠΉΠ½. ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ: ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· = Introduction to Algorithms. β 2-Π΅ ΠΈΠ·Π΄. β Π.: Β«ΠΠΈΠ»ΡΡΠΌΡΒ», 2006. β Π‘. 1296.
- ΠΠ΅Π»ΠΎΡΡΠΎΠ² Π. Π., Π’ΠΊΠ°ΡΠ΅Π² Π‘. Π. ΠΠΈΡΠΊΡΠ΅ΡΠ½Π°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°. β Π.: ΠΠΠ’Π£, 2006. β 744 Ρ.