Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅

Клика (тСория Π³Ρ€Π°Ρ„ΠΎΠ²)

Клика β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠ»ΠΈΠΊΠ° Π³Ρ€Π°Ρ„Π° Π΅ΡΡ‚ΡŒ подмноТСство Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½, Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ этого подмноТСства сущСствуСт Ρ€Π΅Π±Ρ€ΠΎ ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, это подмноТСство Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΌΡƒ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ подмноТСству с Ρ‚Π΅ΠΌ ΠΆΠ΅ свойством.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠšΠ»ΠΈΠΊΠ° (тСория Π³Ρ€Π°Ρ„ΠΎΠ²)» Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… словарях:

Π”ΡƒΠ³Π° (тСория Π³Ρ€Π°Ρ„ΠΎΠ²) β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И Π™ К Π› М Н О П Π  Π‘ Π’ Π£ Π€ … ВикипСдия

Π¦ΠΈΠΊΠ» (тСория Π³Ρ€Π°Ρ„ΠΎΠ²) β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И Π™ К Π› М Н О П Π  Π‘ Π’ Π£ Π€ … ВикипСдия

Клика β€” (Π³Ρ€ΡƒΠΏΠΏΠ° людСй) шайка, Π±Π°Π½Π΄Π°, компания ΠΈΠ»ΠΈ сообщСство людСй. Клика (тСория Π³Ρ€Π°Ρ„ΠΎΠ²) ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. Клика (объСдинСниС Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ²) Π³Ρ€ΡƒΠΏΠΏΠ° английских Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ² викторианской эпохи, основанная Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π”Π°Π΄Π΄ΠΎΠΌ … ВикипСдия

Глоссарий Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ² β€” Π­Ρ‚Π° страница глоссарий. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ: ВСория Π³Ρ€Π°Ρ„ΠΎΠ² Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС) … ВикипСдия

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ² β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И К Π› М Н О П Π  Π‘ … ВикипСдия

Π‘ΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ β€” На Π΄Π°Π½Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΊΠ°ΠΊΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… состоят Ρ€Π°Π·Π½Ρ‹Π΅ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π•Π²Π° находится Π² друТСских ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Адам ΠΈ ΠšΠ΅ΠΉΡ‚, ΠΏΡ€ΠΈ этом Адам ΠΈ ΠšΠ΅ΠΉΡ‚ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, Π½ΠΎ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Ρ€ΡƒΠ³ Π•Π²Π°.… … ВикипСдия

Π—Π°Π΄Π°Ρ‡Π° ΠΎ ΠΊΠ»ΠΈΠΊΠ΅ β€” относится ΠΊ классу NP ΠΏΠΎΠ»Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π² области Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° сформулирована Π² 1972 Π³ΠΎΠ΄Ρƒ Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ ΠšΠ°Ρ€ΠΏΠΎΠΌ.[1] … ВикипСдия

Π’Π΅Ρ€ΡˆΠΈΠ½Π° (Π³Ρ€Π°Ρ„) β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И Π™ К Π› М Н О П Π  Π‘ Π’ Π£ Π€ … ВикипСдия

Π”Π»ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ Π² ΠΎΡ€Π³Ρ€Π°Ρ„Π΅ β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И Π™ К Π› М Н О П Π  Π‘ Π’ Π£ Π€ … ВикипСдия

Π˜Π½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ β€” Π—Π΄Π΅ΡΡŒ собраны опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ². ΠšΡƒΡ€ΡΠΈΠ²ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ссылки Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² этом словарС (Π½Π° этой страницС). # А Π‘ Π’ Π“ Π” Π• Ё Π– Π— И Π™ К Π› М Н О П Π  Π‘ Π’ Π£ Π€ … ВикипСдия

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² графСНа этот Ρ€Π°Π· я ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° языкС C# ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСстирования для структуры Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ (maximum clique problem), ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Π΅. Код Π³Ρ€Π°Ρ„Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡, ΠΊΠ°ΠΊ я поясню Π΄Π°Π»Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π΄Π°Ρ‡Π° ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π°ΠΌ? Клика β€” это подмноТСство Π³Ρ€Π°Ρ„Π°, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» соСдинСн с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ. ВзглянитС Π½Π° прСдставлСниС Π³Ρ€Π°Ρ„Π° Π½Π° рис. 1. Π£Π·Π»Ρ‹ 2, 4 ΠΈ 5 ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΊΠ»ΠΈΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π°. Π—Π°Π΄Π°Ρ‡Π° ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠΊΠΈ с наибольшим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² Π³Ρ€Π°Ρ„Π΅. Максимальная ΠΊΠ»ΠΈΠΊΠ° для Π³Ρ€Π°Ρ„Π° Π½Π° рис. 1 β€” это Π½Π°Π±ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ² < 0, 1, 3, 4 >, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π΅Π½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅
Рис. 1. Π“Ρ€Π°Ρ„ для Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅

Π—Π°Π΄Π°Ρ‡Π° ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ встрСчаСтся довольно часто, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях, Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтСй, машинном распознавании ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π”Π°ΠΆΠ΅ Π² Π³Ρ€Π°Ρ„Π°Ρ… ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π·Π°Π΄Π°Ρ‡Π° ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ оказываСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹Ρ… ΠΈ интСрСсных Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π½Π°ΡƒΠΊΠ΅. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, примСняСмыС для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ поиска (tabu search), ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ поиска (greedy search), поиска ΠΏΠ»Π°Ρ‚ΠΎ (plateau search), парамСтричСской Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (real-time parameter adaptation) ΠΈ Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ динамичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ (dynamic solution history). Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΊΠΎΠ΄, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ нСпосрСдствСнно Π²Π°ΠΌ, Π° ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, примСняСмыС Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅, β€” ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… слоТных Π·Π°Π΄Π°Ρ‡ программирования.

ПолноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ слишком Π΄Π»ΠΈΠ½Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, поэтому Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ β€” ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΌΠΎΠΆΠ΅Ρ‚ эффСктивно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π³Ρ€Π°Ρ„ Π² памяти. КонсольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° рис. 2 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΡƒΠ΄Π° я клоню Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅
Рис. 2. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π³Ρ€Π°Ρ„Π°

Если ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ряд Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ WriteLine, ΠΊΠΎΠ΄, Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 2, выглядит Ρ‚Π°ΠΊ:

Π”Π°Π½Π½Ρ‹Π΅ для Π³Ρ€Π°Ρ„Π° Π½Π° рис. 1 хранятся Π²ΠΎ внСшнСм тСкстовом Ρ„Π°ΠΉΠ»Π΅ DimacsClique.clq, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ DIMACS. Π― ΠΊΡ€Π°Ρ‚ΠΊΠΎ поясню этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ·ΠΆΠ΅. Моя дСмонстрационная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ исходного Ρ„Π°ΠΉΠ»Π°, Π·Π°Ρ‚Π΅ΠΌ создаСт экзСмпляр структуры Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹Ρ…. ПослС создания экзСмпляра Π³Ρ€Π°Ρ„Π° я ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽ Π΅Π³ΠΎ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для восприятия Π²ΠΈΠ΄Π΅. Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, эффСктивноС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС Π³Ρ€Π°Ρ„Π° критичСски Π²Π°ΠΆΠ½ΠΎ для Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅. ДСмонстрационная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π° ΡƒΠ·Π»Π° смСТными (ΡƒΠ·Π»Ρ‹ 5 ΠΈ 8 Π² Π΄Π°Π½Π½ΠΎΠΌ случаС), ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство сосСдСй для ΡƒΠ·Π»Π° 4 Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π― построчно ΠΏΡ€ΠΎΠ²Π΅Π΄Ρƒ вас ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сгСнСрировал Π²Ρ‹Π²ΠΎΠ΄ Π½Π° рис. 2. ΠŸΠΎΠ»Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ дСмонстрационной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Код написан Π½Π° C#, Π½ΠΎ Π²Ρ‹ смоТСтС ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΌΠ½ΠΎΠΉ Π½Π° любом соврСмСнном высокоуровнСвом языкС, Ссли Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ программирования Π½Π° срСднСм ΡƒΡ€ΠΎΠ²Π½Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ здСсь ΠΊΠΎΠ΄ Π³Ρ€Π°Ρ„Π° Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ основу для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² вашСм инструмСнтарии.

Битовая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

БущСствуСт нСсколько распространСнных способов прСдставлСния нСвзвСшСнного (unweighted) (Ρ€Π΅Π±Ρ€Π°ΠΌ Π³Ρ€Π°Ρ„Π° Π½Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹), Π½Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ (Ρ€Π΅Π±Ρ€Π° Π½Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ) Π³Ρ€Π°Ρ„Π° Π² памяти. Для Π·Π°Π΄Π°Ρ‡ΠΈ максимальной ΠΊΠ»ΠΈΠΊΠΈ прСдставлСниС Π³Ρ€Π°Ρ„Π° с использованиСм Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ обСспСчиваСт Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ экономии пространства ΠΈ эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ΠΎΠΌ. На рис. 3 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° битовая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π³Ρ€Π°Ρ„Ρƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π₯отя ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π½Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π³Ρ€Π°Ρ„ΠΎΠΌ, принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ индСксы ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ выходящими ΡƒΠ·Π»Π°ΠΌΠΈ (from-nodes), Π° индСксы ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ β€” входящими ΡƒΠ·Π»Π°ΠΌΠΈ (to-nodes). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 β€” Π΅Π³ΠΎ отсутствиС. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° симмСтрична ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π»Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ смСТными самим сСбС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΠΈΠΊΠ° Π² Π³Ρ€Π°Ρ„Π΅
Рис. 3. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„Π° Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

ОсновноС прСимущСство Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π°Π΄ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ структурами Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° обСспСчиваСт быстрыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска смСТных ΡƒΠ·Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ часто ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², относящихся ΠΊ Π³Ρ€Π°Ρ„Π°ΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅. ΠŸΡ€ΠΈ Π³Ρ€ΡƒΠ±ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ нСдостаток Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ β€” большоС использованиС памяти. НапримСр, Ссли Π±Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 9Γ—9 Π½Π° рис. 3 Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… ΠΈΠ»ΠΈ Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ 9 * 9 * 4 = 324 Π±Π°ΠΉΡ‚Π°. Но, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 0 ΠΈΠ»ΠΈ 1, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΡ‚Ρ‹ значСния Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для хранСния Π΄ΠΎ 32 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли ΠΌΡ‹ прСдставим, Ρ‡Ρ‚ΠΎ младший Π±ΠΈΡ‚ находится справа, ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ 00000000-00000000-00000000-10110000, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² дСсятичном Π²ΠΈΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 128 + 32 + 16 = 176. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π±Ρ‹ каТдая строка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Π΄Π΅ Π±ΠΈΡ‚Ρ‹ этого Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния наличия ΠΈΠ»ΠΈ отсутствия Ρ€Π΅Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 9Γ—9 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ всСго 36 Π±Π°ΠΉΡ‚ΠΎΠ².

Рис. 4. Класс BitMatrix

ИспользованиС BitMatrix ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΠ΅Ρ€Π²Π°Ρ строка ΠΊΠΎΠ΄Π° создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BitMatrix Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 9Γ—9, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ нулями (false), для прСдставлСния нСвзвСшСнного, Π½Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° с Π΄Π΅Π²ΡΡ‚ΡŒΡŽ ΡƒΠ·Π»Π°ΠΌΠΈ. Вторая строка ΠΊΠΎΠ΄Π° устанавливаСт строку 5, столбСц 8 Π² true (1), указывая Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ 5 ΠΈ 8. Π’Ρ€Π΅Ρ‚ΡŒΡ строка ΠΊΠΎΠ΄Π° устанавливаСт строку 8, столбСц 5 Π² true (1), Ρ‡Ρ‚ΠΎΠ±Ρ‹ прСдставлСниС Ρ€Π΅Π±Ρ€Π° Π³Ρ€Π°Ρ„Π° Π±Ρ‹Π»ΠΎ согласованным. ЧСтвСртая строка ΠΊΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² строкС 2, столбцС 6, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, имССтся Π»ΠΈ Ρ€Π΅Π±Ρ€ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ 2 ΠΈ 6, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ false (0). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π° ΡƒΠ·Π»Π° смСТными, β€” это просто опСрация быстрого поиска Π² массивС.

Класс Π³Ρ€Π°Ρ„Π°

Располагая классом BitMatrix, Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ эффСктивный класс Π³Ρ€Π°Ρ„Π°, подходящий для Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡, связанных с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° этого класса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис. 5. Класс Π³Ρ€Π°Ρ„Π° ΠΈΠΌΠ΅Π΅Ρ‚ зависимости ΠΎΡ‚ пространств ΠΈΠΌΠ΅Π½ System, System.IO ΠΈ System.Collections. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я помСстил класс Π³Ρ€Π°Ρ„Π° нСпосрСдствСнно Π² консольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов.

Рис. 5. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π³Ρ€Π°Ρ„Π°

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π³Ρ€Π°Ρ„Π° начинаСтся с:

Π― присвоил классу Π³Ρ€Π°Ρ„Π° имя MyGraph. Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соблазн ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс Π³Ρ€Π°Ρ„Π°, Π½ΠΎ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΎΠ² Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ классы Π³Ρ€Π°Ρ„ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π·Π°Π΄Π°Ρ‡. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ здСсь класс Π³Ρ€Π°Ρ„Π° Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ ΠΈ схоТих Π·Π°Π΄Π°Ρ‡, поэтому я ΠΌΠΎΠ³ Π±Ρ‹ Π½Π°Π·Π²Π°Ρ‚ΡŒ класс ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ MaxCliqueGraph. Π’ классС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ поля Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BitMatrix, описанный Ρ€Π°Π½Π΅Π΅. Поля numberNodes ΠΈ numberEdges хранят количСство ΡƒΠ·Π»ΠΎΠ² (Π΄Π΅Π²ΡΡ‚ΡŒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) ΠΈ число Π½Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π±Π΅Ρ€ Π² Π³Ρ€Π°Ρ„Π΅ (13 Π² Π΄Π°Π½Π½ΠΎΠΌ случаС).

Когда Ρ€Π΅ΡˆΠ°Π΅ΡˆΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, сколько сосСдСй ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΈΠΉ ΡƒΠ·Π΅Π», Ρ‚. Π΅. сколько ΡƒΠ·Π»ΠΎΠ² соСдинСно с Π΄Π°Π½Π½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π³Ρ€Π°Ρ„Π° Π½Π° рис. 1 ΡƒΠ·Π΅Π» 5 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ… сосСдСй. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сосСдСй, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡƒΠ·Π»Π°, Ρ‚Π°ΠΊΠΆΠ΅ называСтся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ ΡƒΠ·Π»Π° (degree of the node), ΠΈΠ»ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ² понятия ΡƒΠ·Π»Π° ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹). Π”Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈ нСобходимости Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ», подсчитывая количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ true (1) Π² строкС Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ быстрый способ β€” ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ подсчСт ΠΈ сохранСниС количСства сосСдСй для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² конструкторС Π³Ρ€Π°Ρ„Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ поиском Π² массивС, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π³Ρ€Π°Ρ„Π° послС создания Π΅Π³ΠΎ экзСмпляра Π² массивС numberNeighbors Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄Π΅Π²ΡΡ‚ΡŒ ячССк со значСниями [3,3,2,3,6,3,1,3,2], ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π΅Π» 0 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ сосСда, ΡƒΠ·Π΅Π» 1 β€” Ρ‚Ρ€ΠΈ сосСда, ΡƒΠ·Π΅Π» 2 β€” Π΄Π²Π° сосСда ΠΈ Ρ‚. Π΄.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса Π³Ρ€Π°Ρ„Π° выглядит Ρ‚Π°ΠΊ:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ тСкстовый Ρ„Π°ΠΉΠ», Π³Π΄Π΅ хранятся Π΄Π°Π½Π½Ρ‹Π΅ Π³Ρ€Π°Ρ„Π°, ΠΈ строку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ этого Ρ„Π°ΠΉΠ»Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π΄Π΅ΡΡŒ я сразу ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ LoadDimacsFormatGraph. Вакая схСма позволяСт Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ класс Π³Ρ€Π°Ρ„Π° для подстройки ΠΏΠΎΠ΄ мноТСство Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒ пСрСчислимых Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пСрСчислСниС.

Π’ сСрдцСвинС класса MyGraph Π»Π΅ΠΆΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadDimacsFormatGraph, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считываСт Ρ„Π°ΠΉΠ» исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сохраняСт прСдставлСниС Π³Ρ€Π°Ρ„Π°. БущСствуСт довольно ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ стандартных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° Π³Ρ€Π°Ρ„Π°. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ здСсь Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ DIMACS. АббрСвиатура DIMACS Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊ: Discrete Mathematics and Theoretical Computer Science. DIMACS являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΎ Π³Π»Π°Π²Π΅ с УнивСрситСтом ΠΈΠΌΠ΅Π½ΠΈ РатгСрса (Rutgers University).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΏΡ€ΠΈΠΌΠ΅Ρ€, привСдСнная Π½Π° рис. 2, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» DimacsGraph.clq, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСчислСн Π½Π° рис. 6. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π±ΡƒΠΊΠ²Ρ‹ Β«cΒ», ΡΠ²Π»ΡΡŽΡ‚ΡΡ коммСнтариями. Одна строка начинаСтся с Π±ΡƒΠΊΠ²Ρ‹ Β«pΒ», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π° строка Β«edgeΒ» с количСством ΡƒΠ·Π»ΠΎΠ² ΠΈ числом Ρ€Π΅Π±Π΅Ρ€. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π±ΡƒΠΊΠ²Ρ‹ Β«eΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ€Π΅Π±Ρ€Π°. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DIMACS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ числа с отсчСтом ΠΎΡ‚ 1; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ€Π΅Π±Ρ€ΠΎ сохраняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·.

Рис. 6. Π€Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ DIMACS

ΠœΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ начинаСтся с:

Π― Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡŽΡΡŒ ΠΊ строкС Β«pΒ» Π² Ρ„Π°ΠΉΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ случайныС ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ Trim, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ:

Π‘Ρ‚Ρ€ΠΎΠΊΡƒ Β«pΒ» я Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° String.Split. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ tokens[0] Ρ…Ρ€Π°Π½ΠΈΡ‚ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» Β«pΒ», tokens[1] β€” Β«edgeΒ», tokens[2] β€” Β«9Β», Π° tokens[3] β€” Β«13Β». Π’Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° int.Parse (я ΠΌΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Convert.ToInt32) количСства ΡƒΠ·Π»ΠΎΠ² ΠΈ Ρ€Π΅Π±Π΅Ρ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² int-значСния, сохраняСмыС Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… numNodes ΠΈ numEdges. Π­Ρ‚ΠΈ значСния Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² поля this.numberNodes ΠΈ this.numberEdges класса Π³Ρ€Π°Ρ„Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² количСства ΡƒΠ·Π»ΠΎΠ² ΠΈ Ρ€Π΅Π±Π΅Ρ€, я Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽ Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ создаю ΠΏΠΎΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… BitMatrix.

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° я Π³ΠΎΡ‚ΠΎΠ² ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:

Π― снова ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽ Ρ„Π°ΠΉΠ» ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽ Π΅Π³ΠΎ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π°. ВСхничСски β€” ΠΈΠ·-Π·Π° наличия строки Β«pΒ» Π΄ΠΎ любой строки Β«eΒ» β€” Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΡƒΠΆΠ΄Ρ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DIMACS. Однако для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ хранят Π² явном Π²ΠΈΠ΄Π΅ количСство Ρ€Π΅Π±Π΅Ρ€, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ здСсь. Когда ΠΊΠΎΠ΄ встрСчаСт строку Β«eΒ», Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°ΠΊ Β«e 3 6Β», я Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽ эту строку Β«eΒ», ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽ Π΄Π²Π° ΡƒΠ·Π»Π° Π² Ρ‚ΠΈΠΏ int ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°ΡŽ 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ прСдставлСниС с отсчСта ΠΎΡ‚ 1 Π½Π° отсчСт ΠΎΡ‚ 0. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ SetValue для создания симмСтричных записСй Π² BitMatrix. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ BitMatrix симмСтричСн, я ΠΌΠΎΠ³ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ лишь Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ ΠΈΠ»ΠΈ ниТнюю Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (triangular portion) для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти.

ΠŸΠΎΡ‚ΠΎΠΌ я ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ массив numberNeighbors:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° я ΠΏΡ€ΠΎΡ…ΠΎΠΆΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΅ΠΌΡƒ строку ΠΈ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽ количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ true (1), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ число Ρ€Π΅Π±Π΅Ρ€, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ количСство сосСдСй Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ LoadDimacsFormatGraph заканчиваСтся Ρ‚Π°ΠΊ:

ПослС пСрСноса количСств ΡƒΠ·Π»ΠΎΠ² ΠΈ Ρ€Π΅Π±Π΅Ρ€ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² поля класса я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ явный Π²ΠΎΠ·Π²Ρ€Π°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятнСС, ΠΊΠ°ΠΊ происходит Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ класса MyGraph проста. Π― ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ полям numberNodes ΠΈ numberEdges класса ΠΊΠ°ΠΊ ΠΊ значСниям Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ C#-класса Property:

Работая с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ошибок, Π° ΠΊΠΎΠ³Π΄Π° Π΅Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ. Π—Π΄Π΅ΡΡŒ я Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ, укладываСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° node Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ this.numberNodes–1, Ρ‡Ρ‚ΠΎ оставляСт мСня уязвимым ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² ситуации Π²Ρ‹Ρ…ΠΎΠ΄Π° индСкса Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ я добавляю ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ошибки Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° ΠΏΠΎ Π΅Π΅ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΡƒΠ΄Π°Π»ΡΡŽ Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ бСзопасно ΡƒΠ±Ρ€Π°Ρ‚ΡŒ для большСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Благодаря структурС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ классом BitMatrix, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π° ΡƒΠ·Π»Π° смСТными, вСсьма Π»Π΅Π³ΠΊΠΎ:

ВспомнитС, Ρ‡Ρ‚ΠΎ BitMatrix симмСтричСн, поэтому я ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ GetValue(nodeA, nodeB), Π»ΠΈΠ±ΠΎ GetValue(nodeB, nodeA). Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…, относящихся ΠΊ Π³Ρ€Π°Ρ„Π°ΠΌ, Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° смСТности ΡƒΠ·Π»ΠΎΠ². ΠŸΡ€ΠΈ использовании Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ такая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполняСтся быстро, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° складываСтся ΠΈΠ· простого поиска ΠΏΠΎ массиву ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… манипуляций Π½Π°Π΄ Π±ΠΈΡ‚Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… классом BitArray.

Для своСго класса MyGraph я написал простой ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString:

Π’ Π·Π°Π΄Π°Ρ‡Π΅ ΠΎ максимальной ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ являСтся ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, поэтому для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ToString я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ строк вмСсто Π±ΠΎΠ»Π΅Π΅ эффСктивного класса StringBuilder. Π—Π΄Π΅ΡΡŒ i слуТит индСксом Π² строках BitMatrix, Π° j β€” индСксом Π² столбцах. Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Environment.NewLine вмСсто Β«\nΒ», Ρ‡Ρ‚ΠΎ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠΉ класс MyGraph Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π³Ρ€Π°Ρ„Π°

Если Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ ΠΊ рис. 2, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ я Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Ρ„Π°: Ρ„Π°ΠΉΠ»Π° Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„Π° Π΄ΠΎ создания экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π³Ρ€Π°Ρ„Π° ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π³Ρ€Π°Ρ„Π° послС создания Π΅Π³ΠΎ экзСмпляра. ПолноС обсуТдСниС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Ρ„Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ написания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, поэтому здСсь я Π΄Π°ΠΌ лишь ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€.

Π― Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ValidateGraphFile, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 5. Как ΠΈ Π² случаС конструктора MyGraph, ValidateGraphFile сразу ΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ValidateDimacsGraphFile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Код ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° Π² Ρ†ΠΈΠΊΠ»Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, всС Π»ΠΈ строки ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ Π² DIMACS Ρ„ΠΎΡ€ΠΌΡƒ:

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ провСряСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ строк, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², прСдпринимая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΈΡ… Ρ€Π°Π·Π±ΠΎΡ€Π°. НапримСр, для ΠΎΠ΄Π½ΠΎΠΉ строки Β«pΒ»:

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ строк Β«eΒ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ аналогичная Π»ΠΎΠ³ΠΈΠΊΠ°. Π­Ρ‚ΠΎΡ‚ шаблон, Π² Ρ†Π΅Π»ΠΎΠΌ, сохраняСтся ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„Π°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° допустимости строк ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±ΠΎΡ€Π° строк Π΄Π°Π½Π½Ρ‹Ρ….

ПослС создания экзСмпляра я ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС Π³Ρ€Π°Ρ„Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ValidateGraph. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, полная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° структуры Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„Π° Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ слоТна, поэтому Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ часто ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятныС ошибки. РаспространСнная ошибка Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„ΠΎΠ² β€” ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ строка Π΄Π°Π½Π½Ρ‹Ρ…, которая создаСт асиммСтричноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… BitMatrix. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ошибки, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ true (1) Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, состоящиС сплошь ΠΈΠ· false (0) ΠΈΠ»ΠΈ true (1), ΠΈ нСравСнство суммы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅-массивС numberNeighbors ΠΎΠ±Ρ‰Π΅ΠΌΡƒ количСству Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ true (1) Π² Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…

ДТСймс ΠœΠ°ΠΊΠΊΠ°Ρ„Ρ€ΠΈ (Dr. James McCaffrey) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Microsoft Research Π² Π Π΅Π΄ΠΌΠΎΠ½Π΄Π΅ (ΡˆΡ‚Π°Ρ‚ Π’Π°ΡˆΠΈΠ½Π³Ρ‚ΠΎΠ½). ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π» участиС Π² создании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Microsoft, Π² Ρ‚ΠΎΠΌ числС Internet Explorer ΠΈ Bing. Π‘ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ ΠΏΠΎ адрСсу mjammc@microsoft.com.

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡŽ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ экспСртам ΠŸΠΎΠ»Ρƒ ΠšΠΎΡ…Ρƒ (Paul Koch), Дэну Π›ΠΈΠ±Π»ΠΈΠ½Π³Ρƒ (Dan Liebling), Π­Π½Π½ Лумис Вомпсон (Ann Loomis Thompson) ΠΈ Π¨Π΅ΠΉΠ½Ρƒ Π£ΠΈΠ»ΡŒΡΠΌΡΡƒ (Shane Williams).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Поиск ΠΊΠ»ΠΈΠΊ Π² Π³Ρ€Π°Ρ„Π°Ρ…

ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ студСнта Π¨Π΅Π»ΠΎΠΌΠ°Π½ΠΎΠ²Π° Π .Π‘.

ΠšΠ°Ρ„Π΅Π΄Ρ€Π° ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ систСм ΠΈ систСмного Π°Π½Π°Π»ΠΈΠ·Π°

Московский государствСнный унивСрситСт экономики, статистики ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΉ условий ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ люди ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°ΠΌΠΈ. По своСй сути Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ· мноТСства Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² прямых ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… эти Ρ‚ΠΎΡ‡ΠΊΠΈ. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ Π»ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π·Π°ΠΊΠΎΠ½Π°ΠΌ ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ свойствами? Π­Ρ‚ΠΎΡ‚ вопрос Π±Ρ‹Π» поставлСн Π”. КСнигом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ объСдинил всС схСматичСскиС изобраТСния, состоящиС ΠΈΠ· совокупности Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ Π»ΠΈΠ½ΠΈΠΉ, ΠΎΠ±Ρ‰ΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ β€œΠ³Ρ€Π°Ρ„β€ ΠΈ рассмотрСл Π³Ρ€Π°Ρ„ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ матСматичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ВСория Π³Ρ€Π°Ρ„ΠΎΠ² нашла своС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ ряда Π·Π°Π΄Π°Ρ‡. Π’ ΠΌΠΎΠ΅ΠΌ курсовом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Ρ€Π°Π·Π΄Π΅Π» Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ² посвящСнный ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Π°ΠΌ, Ρ‚ΠΎΠ΅ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠΊΠ°ΠΌ. ЦСлью ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся написаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС программирования, которая ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° выдСляла Π±Ρ‹ ΠΊΠ»ΠΈΠΊΡƒ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числом Π²Π΅Ρ€ΡˆΠΈΠ½.

Допустим Π·Π°Π΄Π°Π½ Π³Ρ€Π°Ρ„ G=(Π₯,Π“). Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π° поиска Ρ‚Π°ΠΊΠΈΡ… подмноТСств мноТСства Π²Π΅Ρ€ΡˆΠΈΠ½ Π₯ Π³Ρ€Π°Ρ„Π° G, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ, Π½Π°ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ свойством. НапримСр, ΠΊΠ°ΠΊΠΎΠ²Π° максимально возмоТная ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ подмноТСства S Í Π₯, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ S являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ? ΠžΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос Π΄Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠΊΠΎΠ²ΠΎΠ΅ число Π³Ρ€Π°Ρ„Π° G. Π­Ρ‚ΠΎ число ΠΈ связанноС с Π½ΠΈΠΌ подмноТСство Π²Π΅Ρ€ΡˆΠΈΠ½ описываСт Π²Π°ΠΆΠ½Ρ‹Π΅ струтурныС свойства Π³Ρ€Π°Ρ„Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ нСпосрСдствСнныС прилоТСния ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ планирования ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ€Π°Π±ΠΎΡ‚, Π² кластСрном Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈ числСнных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… таксономии, ΠΏΠ°Ρ€Π°Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычмслСниях Π½Π° Π­Π’Πœ, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ прСдприятий обслуТивания, Π° Ρ‚Π°ΠΊΠΆΠ΅ источников ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² энСргосистСмах.

Π§Π°ΡΡ‚ΡŒ 1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ ΠΊ курсовому ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π“Π»Π°Π²Π°1. ВСория Π³Ρ€Π°Ρ„ΠΎΠ²

Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ Π»ΠΈΠ½ΠΈΠΈ Π³Ρ€Π°Ρ„Π°

Π’Π΅Ρ€ΡˆΠΈΠ½Π° называСтся ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ, Ссли ΠΎΠ½Π° Π½Π΅ соСдинСна Π΄ΡƒΠ³Π°ΠΌΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π³Ρ€Π°Ρ„Π°.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΈΠΉ Π½Π° Π³Ρ€Π°Ρ„Π΅

ΠŸΡƒΡ‚ΡŒ называСтся простым, Ссли Π² Π½Π΅ΠΌ никакая Π΄ΡƒΠ³Π° Π½Π΅ встрСчаСтся Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΈ составным, Ссли любая ΠΈΠ· Π΄ΡƒΠ³ встрСчаСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°.

ΠŸΡƒΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ Π½Π΅ встрСчаСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, называСтся элСмСнтарным ΠΏΡƒΡ‚Π΅ΠΌ.

Π“Ρ€Π°Ρ„Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ Π΄ΡƒΠ³.

1. Π’Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ A ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Π° G(A,U A ) являСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подмноТСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π° G(X,U);

2. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Π° являСтся пСрСсСчСниС отобраТСния Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Π³Ρ€Π°Ρ„Π΅ G(X,U) со всСм подмноТСством Π²Π΅Ρ€ΡˆΠΈΠ½ A ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Π° G(A,U A ).

Базисным Π³Ρ€Π°Ρ„ΠΎΠΌ называСтся ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ частичный Π³Ρ€Π°Ρ„, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ· исходного ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ‚Π΅Π»ΡŒ ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π΄ΡƒΠ³.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π³Ρ€Π°Ρ„Π°ΠΌΠΈ

1. ОбъСдинСниС Π³Ρ€Π°Ρ„ΠΎΠ²

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *