ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Алгоритм ΠŸΡ€ΠΈΠΌΠ° нахоТдСния ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ каркаса

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠšΠ°Ρ€ΠΊΠ°ΡΠΎΠΌ Π³Ρ€Π°Ρ„Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΎΠ², содСрТащий всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ исходного Π³Ρ€Π°Ρ„Π° ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ€Π΅Π±Π΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся подмноТСством Ρ€Π΅Π±Π΅Ρ€ исходного Π³Ρ€Π°Ρ„Π°. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ каркасом взвСшСнного Π³Ρ€Π°Ρ„Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ 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®.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ