Кіріспе

Нақты қаптама мәселесінің алгоритмі
X алгоритмі – нақты қаптама мәселесін шешуге арналған алгоритм. Бұл тікелей рекурсивті, нондетерминистік, тереңдікке басты, кері іздеу алгоритмі, оны Дональд Кнут DLX деп аталатын тиімді іске асыруды көрсету үшін қолданды, ол байланысты тізбектер техникасын пайдаланады. Нақты қаптама мәселесі X алгоритмінде 0 және 1-ден тұратын A матрицасымен бейнеленеді. Мақсат – әр бағанда 1 саны дәл бір рет кездесетін қатарлардың ішкі жиынын таңдау. X алгоритмі келесідей жұмыс істейді: r-дың нондетерминистік таңдауы алгоритмнің тәуелсіз субальгоритмдерге рекурсия жасауын білдіреді; әрбір субальгоритм ағымдағы матрицаны мұралайды, бірақ оны басқа r қатарына қатысты қысқартады. Егер c бағаны толығымен нөлдерден тұрса, онда субальгоритмдер жоқ және процесс сәтсіз аяқталады. Субальгоритмдер табиғи түрде іздеу ағашын құрайды, бастапқы мәселе түбінде, ал k деңгейі k таңдалған қатарларға сәйкес келетін әрбір субальгоритмді қамтиды. Кері іздеу – бұл ағашты алдын ала ретпен, тереңдікке басты өту процесі. Осы процедурада c бағанын таңдаудың кез келген жүйелі ережесі барлық шешімдерді табады, бірақ кейбір ережелер басқаларына қарағанда тиімдірек жұмыс істейді. Итерациялар санын азайту үшін Кнут бағанды таңдау алгоритмінің 1 санының ең аз саны бар бағанды таңдауын ұсынады.

Қолданылу

Кнуттың X алгоритмін сипаттаудағы басты мақсаты – билеуші сілтемелердің тиімділігін көрсету болды. Кнут X алгоритмін компьютерде "DLX" деп аталатын процесте билеуші сілтемелерді пайдалану арқылы тиімді жүзеге асыруға болатынын көрсетті. DLX нақты жабу мәселесінің матрицалық бейнелеуін қолданады, ол матрицаның 1-дерінің екі жақты тізімдері ретінде іске асырылған: әрбір 1 элемент жоғарыда, төменде, солда және оңдағы келесі 1 элементке сілтеме береді. (Техникалық тұрғыдан алғанда, тізімдер циклдық болғандықтан, бұл тор құрайды). Нақты жабу мәселелері көбінесе сиректетілгендіктен, бұл бейнелеу көбінесе өлшем және өңдеу уақыты тұрғысынан әлдеқайда тиімді болады. DLX содан кейін қатарлардың мүмкін болатын шешімдер ретіндегі пермутацияларын жылдам таңдау және қате болжамдарды тиімді түрде кері қайтару (қайтару) үшін билеуші сілтемелерді пайдаланады.