Кіріспе

Мәселелерді шешу әдісі және алгоритмдік парадигма компьютерлік ғылымдағы мәселелерді шешу әдісі

Компьютерлік ғылымда, өрескел күшпен іздеу немесе толық іздеу, сондай-ақ генерациялау және тексеру деп аталады, бұл өте жалпы мәселелерді шешу әдісі және алгоритмдік парадигма, ол барлық мүмкін үміткерлерді жүйелі түрде тексеруден тұрады, әрбір үміткер мәселенің шартына сәйкес келе ме, жоқ па, соны анықтау үшін. Табиғи n санының бөлгіштерін табатын өрескел күш алгоритмі 1-ден n-ге дейінгі барлық бүтін сандарды тізімдейді және олардың әрқайсысы n-ді қалдықсыз бөле ме, жоқ па, соны тексереді. Сегіз патшайымның жұмбағына өрескел күшпен қарау 64 шаршы шахмат тақтасындағы 8 фигураның барлық мүмкін орналасуларын қарастырады және әрбір орналасу үшін әрбір (патшайым) фигурасының басқасына шабуыл жасай алатынын тексереді. Өрескел күшпен іздеуді іске асыру оңай және егер шешім болса, оны әрқашан табады, бірақ іске асыру құны үміткер шешімдердің санына пропорционал, ал көптеген практикалық мәселелерде проблеманың мөлшері артқан сайын бұл сан өте жылдам өседі (§Комбинаторлық жарылыс). Сондықтан, өрескел күшпен іздеу әдетте проблеманың мөлшері шектеулі болғанда немесе кандидат шешімдер жиынтығын басқаруға болатын көлемге дейін қысқартуға мүмкіндік беретін проблемаға тән эвристикалар болғанда қолданылады. Бұл әдіс сондай-ақ, іске асырудың қарапайымдылығы өңдеу жылдамдығынан маңыздырақ болған кезде де қолданылады. Мысалы, алгоритмдегі кез келген қате өте ауыр салдарларға әкелетін жағдайларда немесе математикалық теореманы дәлелдеу үшін компьютерді пайдаланғанда осылай болады. Өрескел күшпен іздеу басқа алгоритмдер мен метаэвристикаларды салыстыру кезінде базалық әдіс ретінде де пайдалы. Шындығында, өрескел күшпен іздеуді ең қарапайым метаэвристика деп санауға болады. Өрескел күшпен іздеуді кері іздеумен шатастырмау керек, онда үлкен шешімдер жиынтықтары нақты тізімделмей-ақ жойылуы мүмкін (жоғарыда көрсетілген сегіз патшайымның проблемасын компьютерлік жолмен шешудегідей). Кестедегі элементті табу үшін қолданылатын әдіс, яғни кестенің барлық жазбаларын бірінен соң бірі ретпен тексеру, сызықтық іздеу деп аталады.

Комбинаторлық жарылыс

Қара күш әдісінің басты кемшілігі – көптеген нақты әлемдегі проблемалар үшін мүмкін болатын жағдайлардың саны тым көп. Мысалы, егер жоғарыда сипатталғандай, бір санның бөлгіштерін іздесек, тексерілген үміткерлердің саны берілген n санына тең болады. Егер n он алты ондық таңбадан тұрса, іздеу үшін кем дегенде 10¹⁵ компьютерлік нұсқау орындалуы керек, бұл әдеттегі компьютерде бірнеше күнге созылуы мүмкін. Егер n кездейсоқ 64 биттік натурал сан болса, онда орташа есеп бойынша ондық таңбадан кейін 19 таңбасы бар, іздеу шамамен 10 жылға созылады. Дерек көлемі ұлғайған сайын, мүмкін болатын жағдайлардың санының күрт өсуі түрлі проблемаларда кездеседі. Мысалы, егер 10 әріптің белгілі бір ретін іздесек, онда 10! = 3 628 800 қарастырылатын жағдай бар, оларды әдеттегі компьютер бір секундтан кем уақытта жасап, тексеруге болады. Алайда, дерек көлемін 10%-ға ғана арттыратын бір әріпті қосу мүмкін болатын жағдайлардың санын 11 есеге көбейтеді, яғни 1000%-ға арттырады. 20 әріп үшін мүмкін болатын жағдайлардың саны 20!, шамамен 2,4×10¹⁸ немесе 2,4 квинтиллионды құрайды; ал іздеу шамамен 10 жылға созылады. Бұл жағымсыз құбылыс комбинаторлық жарылыс немесе өлшемділіктің қарғысы деп аталады. Комбинаторлық күрделілік шешілмейтін жағдайға әкелетін мысалдың бірі – шахматты шешу. Шахмат әлі шешілмеген ойын. 2005 жылы алты немесе одан аз фигуралы шахмат ойындарының барлық аяқталуы шешілді, нәтижесінде әр позицияның ең жақсы ойынмен қандай болатыны көрсетілді. Шахматқа тағы бір фигура қосылып, 7 фигуралы кесте жасау үшін тағы 10 жыл кетті. Шахмат аяғына тағы бір фигураны қосу (осылайша 8 фигуралы кесте жасау) қосымша комбинаторлық күрделілікке байланысты мүмкін емес деп есептеледі.

Қатаң іздестіруді жеделдету

Ашық күш алгоритмін жылдамдатудың бір жолы – іздеу кеңістігін, яғни кандидаттық шешімдер жиынтығын, проблема класына тән эвристикаларды қолдану арқылы азайту. Мысалы, сегіз патшайым мәселесінде стандартты шахмат тақтасына сегіз патшайымды орналастыру керек, осылайша ешбір патшайым екіншісіне шабуыл жасамауы тиіс. Әрбір патшайымды 64 шаршының кез келгеніне орналастыруға болатындықтан, принципінде 64⁸ = 281,474,976,710,656 мүмкіндік қарастырылуы керек. Дегенмен, патшайымдардың барлығы бір-біріне ұқсас болғандықтан және екі патшайымды бір шаршыға орналастыруға болмайтындықтан, кандидаттар – барлық 64 шаршыдан 8 шаршыны таңдаудың барлық мүмкін жолдары; яғни ⁶⁴C₈ = 64!/(56!*8!) = 4,426,165,368 кандидаттық шешім, бұл бұрынғы бағалаудың шамамен 1/60,000 бөлігі. Бұдан әрі, бір қатарда немесе бір бағанда екі патшайым орналасқан ешқандай жағдай шешім бола алмайды. Сондықтан, кандидаттар жиынтығын осы жағдайлармен шектеуге болады. Осы мысал көрсеткендей, шамалы талдау кандидаттық шешімдердің санын күрт азайтуға алып келеді және шешілмейтін мәселені тривиальды мәселеге айналдыруы мүмкін. Кейбір жағдайларда талдау кандидаттарды барлық жарамды шешімдер жиынтығына дейін азайтуы мүмкін; яғни, ол барлық қажетті шешімдерді тікелей санап шығаратын алгоритмді (немесе қажет болған жағдайда бір шешімді табады), сынақтармен және жарамсыз кандидаттарды жасаумен уақытты ысырап етпейді. Мысалы, "1-ден 1,000,000-ға дейінгі 417-ге қалдықсыз бөлінетін барлық бүтін сандарды табу" мәселесі үшін, қарапайым ашық күш шешімі диапазондағы барлық бүтін сандарды жасайды және олардың әрқайсысын бөлінуге тексереді. Алайда, бұл мәселені 417-ден бастап, сан 1,000,000-нан асып кеткенше 417-ні қайта-қайта қосу арқылы әлдеқайда тиімдірек шешуге болады, бұл тек 2398 (= 1,000,000 ÷ 417) қадамды қажет етеді және ешқандай сынақтарды қажет етпейді.

Іздеу кеңістігін қайта реттеу

Барлық шешімдерді емес, тек бір шешімді қажет ететін қолданбаларда, күшпен іздеудің күтілетін жұмыс уақыты көбінесе үміткерлерді тексеру ретіне байланысты болады. Жалпы ереже бойынша, ең перспективті үміткерлерді алдымен тексеру керек. Мысалы, кездейсоқ сан n-нің дұрыс бөлгішін іздегенде, кандидат бөлгіштерді 2-ден n-1 дейін өсу ретімен санау жақсырақ, себебі n-нің c-ға бөліну ықтималдығы 1/c-ға тең. Сонымен қатар, үміткердің жарамды болу ықтималдығына бұрынғы сәтсіз әрекеттер жиі әсер етеді. Мысалы, берілген 1000 биттік P жолында 1 бит табу мәселесін қарастырайық. Бұл жағдайда кандидат шешімдері 1 мен 1000 арасындағы индекстер болып табылады, ал кандидат c жарамды болады, егер P[c] = 1 болса. Енді, егер P-нің бірінші биті 0 немесе 1 болуы мүмкін болса, бірақ одан кейінгі әр бит 90% ықтималдықпен алдыңғысына тең болса, не болады? Егер үміткерлер 1-ден 1000-ға дейін өсу ретімен саналса, сәттілікке дейін тексерілген t үміткерлердің саны орташа есеппен шамамен 6-ға жетеді. Ал егер үміткерлер 1, 11, 21, 31, 991, 2, 12, 22, 32 және т.б. ретімен саналса, t-ның күтілетін мәні 2-ден сәл ғана артық болады. Жалпы алғанда, іздеу кеңістігі сондай етіп санау керек, келесі үміткердің жарамды болуы мүмкін, егер бұрынғы әрекеттер жарамсыз болған болса. Сондықтан, егер жарамды шешімдер белгілі бір мағынада "жинақталған" болса, онда әрбір жаңа үміткер алдыңғыларынан мүмкіндігінше алыс болуы керек. Әрине, егер шешімдер күтпеген жерден біркелкі таралып жатса, онда керісінше болады.

Қатаң іздеудің баламалары

Басқа да көптеген іздеу әдістері немесе метаэвристикалар бар, олар шешім туралы әртүрлі жартылай білімді пайдалану үшін жасалған. Эвристикалар іздеудің кейбір бөліктерін ертерек тоқтату үшін де қолданылуы мүмкін. Мұның бір мысалы – ойын ағаштарын іздеу үшін қолданылатын минимакс принципі, ол іздеудің бастапқы кезеңінде көптеген тармақтарды жояды. Тілдік талдау сияқты салаларда, мысалы, кестелік талдау сияқты әдістер, мәселедегі шектеулерді пайдаланып, экспоненциалды күрделілікті полиномиалды күрделілікке дейін азайтуға мүмкіндік береді. Көптеген жағдайларда, мысалы, шектеулерді қанағаттандыру мәселелерінде, шектеулерді тарату арқылы іздеу кеңістігін күрт қысқартуға болады, бұл шектеулік бағдарламалау тілдерінде тиімді іске асырылады. Іздеу кеңістігін қысқарту үшін мәселенің толық нұсқасын жеңілдетілген нұсқамен алмастыруға да болады. Мысалы, компьютерлік шахматта, ойынның қалған бөлігі үшін барлық мүмкін қимылдардың толық минимакс ағашын есептеудің орнына, минимакс мүмкіндіктерінің шектеулі ағашы есептеледі, ағаш белгілі бір мөлшердегі қимылдарда қысқарылады, ал ағаштың қалған бөлігі статикалық бағалау функциясымен жуықталады.

Криптографияда

Криптографияда, күшпен сынау шабуылы дұрыс кілт табылғанға дейін барлық мүмкін кілттерді жүйелі түрде тексеруден тұрады. Бұл стратегия теориялық тұрғыдан кез келген шифрланған деректерге (бір реттік блоктан басқа) қарсы қолданылуы мүмкін, егер шабуылшы шифрлау жүйесіндегі әлсіздіктерді пайдалана алмай, өз жұмысын жеңілдете алмайтын жағдайда. Шифрлауда қолданылатын кілттің ұзындығы күшпен сынау шабуылын жүргізудің практикалық мүмкіндігін анықтайды, ұзын кілттерді қысқа кілттерге қарағанда экспоненциалды түрде бұзу қиынырақ. Күшпен сынау шабуылдары кодталатын деректерді жасыру арқылы тиімсіздетілуі мүмкін, бұл шабуылшыға кодты бұзған кезде оны тануды қиындатады. Шифрлау жүйесінің беріктігін бағалаудың бір өлшемі – шабуылшыға оған қарсы күшпен сынау шабуылын сәтті жүргізу үшін қанша уақыт керек болатыны.