ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ°
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ ΠΠ°ΡΠΊΠ°ΡΠΎΠΌ Π³ΡΠ°ΡΠ° Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄Π³ΡΠ°Ρ Π±Π΅Π· ΡΠΈΠΊΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π±Π΅Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ΅Π±Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°. ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ°ΡΠΊΠ°ΡΠΎΠΌ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° Π½Π°Π·ΡΠ²Π°ΡΡ G Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠ°ΡΠΊΠ°Ρ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡ Π²Π΅ΡΠΎΠ² Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΡΠ΅Π±Π΅Ρ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΡΠ΅Π±Π΅Ρ, ΡΠ΅ΠΆΠ΅ — ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
1. ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
2. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ°
3. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³
4. ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° Ρ.Π½. Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ, Π³Π΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°Ρ, Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ»Π°Π½ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΎΠΏΠΈΡΠ°ΡΡΡ Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠ° Π½Π°ΠΉΡΠΈ ΠΏΡΡΡ ΠΊ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΡΠ΄ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ², ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΠ°Ρ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ΅Π½ΡΡΠ°Ρ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΈ Ρ. ΠΏ., ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΠΏΠΎΠΈΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ, ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΅ΡΡΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡΡΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ΡΡΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠΌ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π΄Π°ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅, ΡΠ΅ΠΌ Π½Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Haskell, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C). ΠΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΆΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ. ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΠΎΠ½Π°Π»ΡΠ΄Π° ΠΠ½ΡΡΡΠ°: «ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΈΡΡΡΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡ ΡΠΈΡΠ°Π»ΠΈ Π»ΡΠ΄ΠΈ». ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»Π΅Π³ΡΠ΅ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π·Π°Π»ΠΎΠΆΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ΅ Π±ΠΎΠ»Π΅Π΅ 80% Π²ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ².
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΡΠΎΠ»ΠΎΠ³ ΠΈ ΡΠ·ΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Haskell Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° Π³ΡΠ°ΡΠ°.
1. ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ ΠΠ°ΡΠΊΠ°ΡΠΎΠΌ Π³ΡΠ°ΡΠ° Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄Π³ΡΠ°Ρ Π±Π΅Π· ΡΠΈΠΊΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π±Π΅Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ΅Π±Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°. ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ°ΡΠΊΠ°ΡΠΎΠΌ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° Π½Π°Π·ΡΠ²Π°ΡΡ G Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠ°ΡΠΊΠ°Ρ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡ Π²Π΅ΡΠΎΠ² Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΡΠ΅Π±Π΅Ρ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΡΠ΅Π±Π΅Ρ, ΡΠ΅ΠΆΠ΅ — ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ΅ ΡΠ΅ΠΆΠ΅ — ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½Π°Ρ ΡΠ΅ΠΏΠ°ΡΠ°Π±Π΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΏΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ Π΅ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅ΠΉ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΠ΅ΡΡΡ. ΠΠ°Π΄Π°ΡΠ° ΠΎΠ± ΠΎΡΡΡΠΊΠ°Π½ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ Π·Π°Π΄Π°Ρ Π² ΡΠ΅ΠΎΡΠΈΠΈ Π³ΡΠ°ΡΠΎΠ².
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ°, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π³ΡΠ°ΡΠΎΠ². ΠΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠ°ΡΠΊΠ°ΡΠΎΠ² ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΊΠ°ΡΠΊΠ°ΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ Π³ΡΠ°ΡΠΎΠ². Π Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΏΠΎΡΡΠ΅Π±ΠΈΠΌΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΠ°ΡΠΊΠ°Π»Π°, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ°, Π°Π»Π³ΠΎΡΠΈΡΠΌ Π‘ΠΎΠ»Π»ΠΈΠ½Π°, Π°Π»Π³ΠΎΡΠΈΡΠΌ Π’Π°ΡΡΡΠ½Π°-Π§Π΅ΡΠΈΡΠΎΠ½Π°. ΠΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π½Π°Ρ ΠΎΠ΄ΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½Π° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π³ΡΠ°ΡΠΎΠ².
Π Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠΈΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ°. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° Π² Π³ΡΠ°ΡΠ°Ρ , Π±Π»ΠΈΠ·ΠΊΠΈΡ ΠΊ ΠΏΠΎΠ»Π½ΡΠΌ.
2. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ° ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ°Π·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Ts.
Π Π°Π·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Ts ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΡΠ΅Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅Π±Π΅Ρ
(vi, vj)
Π³Π΄Π΅ vi? Ts ΠΈ vj ~? Ts, ΠΏΡΠΈΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ ΡΠ΅Π±ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ Π²Π΅Ρ cij. ΠΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΡΠ»ΠΎ ΡΠ΅Π±Π΅Ρ Π² Ts Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌ n-1.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Π΅ vj ~? Ts ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ [aj, bj], Π³Π΄Π΅ aj Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ½ΡΡ ΠΊ vj Π²Π΅ΡΡΠΈΠ½Π° ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π° Ts, Π° bj Π²Π΅Ρ ΡΠ΅Π±ΡΠ° (aj, bj). ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π²Π΅ΡΡΠΈΠ½Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ v*j, Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΏΠΎΠΌΠ΅ΡΠΊΠΎΠΉ bj ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΊ ts ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π±ΡΠ° (a*j, v*j). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊ Ts Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΠ½Π° v*j, ΡΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ [aj, bj] Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π΅ΡΡΠΈΠ½ vj ~? Ts ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠ»ΠΎΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
1. ΠΡΡΡΡ
Ts = {vs}
Π³Π΄Π΅ vs — ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΠ½Π°, ΠΈ Ss = o.
2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ vj ~? Ts Π½Π°ΠΉΡΠΈ Π²Π΅ΡΡΠΈΠ½Ρ aj? Ts ΡΠ°ΠΊΡΡ, ΡΡΠΎ
c (aj, vj) = min[c (vi, vj)] = bj
ΠΈ ΠΏΡΠΈΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½Π΅ vj ΠΏΠΎΠΌΠ΅ΡΠΊΡ [aj, bj]. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ a Π½Π΅Ρ, ΠΏΡΠΈΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½Π΅ vj ΠΌΠ΅ΡΠΊΡ [0, ?].
3. ΠΡΠ±ΡΠ°ΡΡ ΡΠ°ΠΊΡΡ Π²Π΅ΡΡΠΈΠ½Ρ v*j, ΡΡΠΎ
b*j = min[bj]
ΠΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅: Ts = Ts E {v*j}, Ss = Ss E {(a*j, v*j)}. ΠΡΠ»ΠΈ |T| = n, ΡΠΎ ΡΡΠΎΠΏ. Π Π΅Π±ΡΠ° Π² Ss ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ. ΠΡΠ»ΠΈ |Ts| < n, ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏ. 4.
4. ΠΠ»Ρ Π²ΡΠ΅Ρ vj ~? Ts ΡΠ°ΠΊΠΈΡ , ΡΡΠΎ vj? Πv*j, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠ΅ΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β’ ΠΡΠ»ΠΈ bj > c (v*j, vj), ΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ bj = c (v*j, vj), aj = v*j
β’ ΠΡΠ»ΠΈ bj <= c (v*j, vj), ΡΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΠΊΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ°Π³Ρ 3
3. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³ ΠΠ· ΠΎΠΏΠΈΡΠ°Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
1. ΠΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠ°, Ρ. Π΅. Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Π΅ ΠΌΠ΅ΡΠΊΠΈ [aj, bj].
2. ΠΠΎΠΈΡΠΊ Π²Π΅ΡΡΠΈΠ½Ρ vj Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ bj Π² ΠΌΠ΅ΡΠΊΠ΅.
3. ΠΠ΅ΡΠ΅ΡΠ°Π·ΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½, ΡΠΌΠ΅ΠΆΠ½ΡΡ Ρ vj
ΠΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠΈΡΠΊΠ°, Ρ. Π΅. ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½Ρ Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°. Π ΠΡΠΎΠ»ΠΎΠ³-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π² ΡΠΎΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ primeSearch/5, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π³ΡΠ°Ρ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ T, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ S, ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ. ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° (ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ°) — Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΡΡΠΈΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° T ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°, Ρ. Π΅. ΠΊΠ°ΡΠΊΠ°Ρ ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ Π³ΡΠ°ΡΠ°. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
primeSearch (graph (V, E), T, S, _, S) : — length (V, L1), length (T, L2), L1 is L2.
primeSearch (graph (V, E), T, S, MN, Res) :-primeMinimum (MN, par (X, Y)), remark (MN, E, X, D), primeSearch (graph (V, E), [X|T], [edge (X, Y)|S], D, Res).
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, Π³ΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΎΡΠ°, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π±Π΅Ρ Π³ΡΠ°ΡΠ°. Π Π΅Π±ΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ edge/2, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ. ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏ. 3 ΠΈ ΠΏ. 4 Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏ. 1 ΠΈ ΠΏ. 2 ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ primeInit, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² T ΠΈ S, ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°, Π²ΡΠ·ΡΠ²Π°Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ markerVx/4.
ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ markerVx ΡΠ°Π·ΠΌΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΠΏ. 2, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠ½, Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ bj Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
markerVx ([], _, _, []).
markerVx ([H|T], S, E, [X|XS]) : — elem (edge (H, S, W), E), X = mark (H, S, W), markerVx (T, S, E, XS).
markerVx ([H|T], S, E, [mark (H, S, 99 999)|XS]) : — not (elem (edge (H, S, W), E)), markerVx (T, S, E, XS).
ΠΠΎΠΈΡΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ primeMin. ΠΡΠΎΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½, ΠΏΠ΅ΡΠ²Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠ΅Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ Ts Π²Π΅ΡΡΠΈΠ½ΠΎΠΉ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠΈ b, Π° Π²ΡΠΎΡΠ°Ρ — ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΌΠ΅ΡΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Π°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ°Ρ ΠΊΠ°ΡΠΊΠ°ΡΡ. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°:
primeMin ([], M, par (X, Y)) : — M = mark (X, Y, _).
primeMin ([H|T], mark (X, Y, M), XS) : — H = mark (X1, Y1, Z1), Z1 < M, !, primeMin (T, H, XS).
primeMin ([H|T], X, XS) : — primeMin (T, X, XS).
ΠΠ°Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ remark.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½, ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ½ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Π΅, Ρ Π²Π΅ΡΠΎΠΌ ΡΠ΅Π±ΡΠ°, ΠΈΠ΄ΡΡΠ΅Π³ΠΎ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Π΅.
ΠΡΠ»ΠΈ Π²Π΅Ρ ΡΠ΅Π±ΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΊΠΈ, ΠΌΠ΅ΡΠΊΠ° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏ. 4 Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
remark ([], _, _, []).
remark ([H|HS], E, X, TH) : — H = mark (X, _, _), remark (HS, E, X, TH).
remark ([H|T], E, X, [NH|TH]) : — H = mark (X1, X2, W), elem (edge (X1, X, W1), E), W1 < W, NH = mark (X1, X, W1), remark (T, E, X, TH).
remark ([H|T], E, X, [H|TH]) : — remark (T, E, X, TH).
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π.
4. ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π³ΡΠ°ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1. Π‘Π»Π΅Π²Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π³ΡΠ°Ρ, ΡΠΏΡΠ°Π²Π° — ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 1 — Π’Π΅ΡΡΠΎΠ²ΡΠΉ Π³ΡΠ°Ρ (ΡΠ»Π΅Π²Π°) ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠΊΠ°Ρ (ΡΠΏΡΠ°Π²Π°) ΠΊΠ°ΡΠΊΠ°Ρ Π³ΡΠ°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΈΠΌΠ° Π ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³ Π΄Π°Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
g2(X) : — X = graph
([1,2,3,4,5,6,7],[edge (1,6,23), edge (1,7,1), edge (1,2,20), edge (2,1,20), edge (2,7,4), edge (2,3,15), edge (3,2,15), edge (3,7,9), edge (3,4,3), edge (4,3,3), edge (4,7,16), edge (4,5,17), edge (5,4,17), edge (5,7,25), edge (5,6,28), edge (6,5,28), edge (6,7,36), edge (6,1,23), edge (7,1,1), edge (7,2,4), edge (7,3,9), edge (7,4,16), edge (7,5,25), edge (7,6,36)]).
Π¦Π΅Π»Π΅Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°
main : — g2(X), primeInit (X, T, S, M), primeSearch (X, T, S, M, R), write ('Graph optimal carcas: '), writeln®.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ
Graph optimal carcas: [edge (6, 1), edge (5, 4), edge (4, 3), edge (3, 7), edge (2, 7), edge (7, 1)]
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ.
ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Haskell ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π³Π»Π°Π²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ main:
main = do
let
gs = [
(Nothing, 1, [(2,20), (6,23), (7,1)]),
(Nothing, 2, [(1,20), (3,15), (7,4)]),
(Nothing, 3, [(2,15), (7,9), (4,3)]),
(Nothing, 4, [(3,4), (7,16), (5,17)]),
(Nothing, 5, [(4,17), (7,25), (6,28)]),
(Nothing, 6, [(5,28), (7,36), (1,23)]),
(Nothing, 7, [(1,1), (6,36), (5,25), (4,16), (3,9), (2,4)])
]
(graph, vf, kf, wf) = graphFromWEdges gs
ts = primeOptimalCarcas graph wf
print ts
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
[(0,6),(6,1),(6,2),(2,3),(3,4),(0,5)]
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π΅ΠΎΡΠΈΡ Π³ΡΠ°ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΊΡΡΡΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ± ΠΎΡΡΡΠΊΠ°Π½ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-Π³ΡΠ°ΡΠΎΠ²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π»Π΅Π³ΠΊΠΎ ΠΈ Π² Π²ΠΈΠ΄Π΅, ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΈΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ Π½Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΎΡΡΡΡΡΡΠ²ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈ Ρ. ΠΏ., ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. Π’.ΠΎ., Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠΎΡΠ½ΡΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ.
1 ΠΡΡΠΊΠΈΠ½ Π . Π. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Haskell. Π.: ΠΠΠ ΠΡΠ΅ΡΡ, 2007. — 608 Ρ., ΠΈΠ».
2 Π‘ΡΠ΅ΡΠ»ΠΈΠ½Π³ Π., Π¨Π°ΠΏΠΈΡΠΎ Π. ΠΡΠΊΡΡΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³: ΠΠ΅Ρ. Ρ Π°Π½Π³Π».-Π.: ΠΠΈΡ, 1990. -235 Ρ., ΠΈΠ».
3 ΠΠ±Π΅Π»ΡΡΠΎΠ½ Π₯., Π‘Π°ΡΡΠΌΠ°Π½ ΠΠΆ. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ — Π.: ΠΠΎΠ±ΡΠΎΡΠ²Π΅Ρ, ΠΠΠ£, 2006. — 608 Ρ.: ΠΈΠ».
4 ΠΠ²Π°Π½ ΠΡΠ°ΡΠΊΠΎ. ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ PROLOG, 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅.: ΠΠ΅Ρ. Ρ Π°Π½Π³Π». — Π.: ΠΠ·Π΄Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «ΠΠΈΠ»ΡΡΠΌΡ», 2004. — 640 Ρ.: ΠΈΠ». ΠΠ°ΡΠ°Π». ΡΠΈΡ. ΠΠ½Π³Π».
5 ΠΠ°ΡΡΡΠ½ΠΎΠ² Π. Π., ΠΠ²ΡΡΠΈΠ³Π½Π΅Π΅Π² Π. Π. ΠΡΠ°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. — Π‘ΠΏΠ±.: ΠΠ₯Π-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, 2003. — 1104 Ρ.: ΠΈΠ».
6 ΠΡΠΈΡΡΠΎΡΠΈΠ΄Π΅Ρ Π. Π’Π΅ΠΎΡΠΈΡ Π³ΡΠ°ΡΠΎΠ². ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π. ΠΠΠ ΠΡΠ΅ΡΡ, 2003. — 356 Ρ., ΠΈΠ».
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
elem (X, [X|_]).
elem (X, [_|HS]) : — elem (X, HS).
primeInit (graph ([V|VS], E), [V], [], XS) : — markerVx (VS, V, E, XS).
markerVx ([], _, _, []).
markerVx ([H|T], S, E, [X|XS]) : — elem (edge (H, S, W), E), X = mark (H, S, W), markerVx (T, S, E, XS).
markerVx ([H|T], S, E, [mark (H, S, 99 999)|XS]) : — not (elem (edge (H, S, W), E)), markerVx (T, S, E, XS).
primeMin ([], M, par (X, Y)) : — M = mark (X, Y, _).
primeMin ([H|T], mark (X, Y, M), XS) : — H = mark (X1, Y1, Z1), Z1 < M, !, primeMin (T, H, XS).
primeMin ([H|T], X, XS) : — primeMin (T, X, XS).
primeMinimum (X, Res) : — primeMin (X, mark (0, 0, 99 999), Res).
primeSearch (graph (V, E), T, S, _, S) : — length (V, L1), length (T, L2), L1 is L2.
primeSearch (graph (V, E), T, S, MN, Res) :-primeMinimum (MN, par (X, Y)), remark (MN, E, X, D), primeSearch (graph (V, E), [X|T], [edge (X, Y)|S], D, Res).
remark ([], _, _, []).
remark ([H|HS], E, X, TH) : — H = mark (X, _, _), remark (HS, E, X, TH).
remark ([H|T], E, X, [NH|TH]) : — H = mark (X1, X2, W), elem (edge (X1, X, W1), E), W1 < W, NH = mark (X1, X, W1), remark (T, E, X, TH).
remark ([H|T], E, X, [H|TH]) : — remark (T, E, X, TH).
g (X) : — X = graph (
[0,1,2],
[
edge (0,1,1),
edge (0,2,2),
edge (1,0,1),
edge (1,2,3),
edge (2,0,2),
edge (2,1,3)
]).
g2(X) : — X =
graph (
[1,2,3,4,5,6,7],
[
edge (1,6,23),
edge (1,7,1),
edge (1,2,20),
edge (2,1,20),
edge (2,7,4),
edge (2,3,15),
edge (3,2,15),
edge (3,7,9),
edge (3,4,3),
edge (4,3,3),
edge (4,7,16),
edge (4,5,17),
edge (5,4,17),
edge (5,7,25),
edge (5,6,28),
edge (6,5,28),
edge (6,7,36),
edge (6,1,23),
edge (7,1,1),
edge (7,2,4),
edge (7,3,9),
edge (7,4,16),
edge (7,5,25),
edge (7,6,36)
]).
main : — g2(X), primeInit (X, T, S, M), primeSearch (X, T, S, M, R), write ('Graph optimal carcas: '), writeln®.