Кіріспе
Тіркелген тізімдердегі бағдарламалау техникасы. Компьютерлік ғылымда, билейтін сілтемелер (DLX) — бұл дөңгелек екі жақты тізімнен түйін қосу және жою техникасы. Бұл, әсіресе, кері іздеу алгоритмдерін тиімді жүзеге асыру үшін пайдалы, мысалы, Кнуттың дәл жабу мәселесі үшін жасаған X алгоритмі. X алгоритмі — рекурсивті, детерминистік емес, тереңдікке бірінші, кері іздеу алгоритмі, ол дәл жабу мәселесінің барлық шешімдерін табады. Дәл жабу мәселелерінің ең белгілілеріне төсеу, n патшайым мәселесі және Судоку жатады. Дональд Кнут ұсынған "Билейтін сілтемелер" атауы алгоритмнің жұмыс істеу принципінен туындайды, себебі алгоритм итерациялары сілтемелердің "серіктес сілтемелермен билеуіне" себеп болады, бұл "шебер биге" ұқсайды. Кнут бұл идеяны 1979 жылы Хироси Хитоцумацу мен Кохей Ношита ойлап тапқандығын айтады, бірақ оны танымал еткен оның еңбегі.
In computer science, dancing links (DLX) is a technique for adding and deleting a node from a circular doubly linked list. It is particularly useful for efficiently implementing backtracking algorithms, such as Knuth's Algorithm X for the exact cover problem. Algorithm X is a recursive, nondeterministic, depth first, backtracking algorithm that finds all solutions to the exact cover problem. Some of the better known exact cover problems include tiling, the n queens problem, and Sudoku. The name dancing links, which was suggested by Donald Knuth, stems from the way the algorithm works, as iterations of the algorithm cause the links to "dance" with partner links so as to resemble an "exquisitely choreographed dance." Knuth credits Hiroshi Hitotsumatsu and Kōhei Noshita with having invented the idea in 1979, but it is his paper which has popularized it.
Іске асыру
Осы мақаланың қалған бөлімі Алгоритм X-ті жүзеге асыру тәсілінің толық мәліметтерін талқылайтындықтан, оқырманға ең алдымен Алгоритм X туралы мақаланы оқуға кеңес беріледі.
Зерттеу
X алгоритмінде, матрицадан жолдар мен бағандар үнемі алынып тасталады және қайта қосылады. Алып тастаулар, сол бағандағы баған мен жолды таңдау арқылы анықталады. Егер таңдалған бағанда жолдар болмаса, ағымдағы матрицаны шеше алмайсыз және кері қадам жасау қажет. Алып тастау орын алғанда, таңдалған жолда 1 саны бар барлық бағандар, сондай-ақ 1 саны бар кез келген алынған бағандағы жолдардың барлығы (таңдалған жол да оның ішінде) алынып тасталады. Бағандар толтырылғандықтан алынып тасталады, ал жолдар таңдалған жолмен келіспейтіндіктен алынып тасталады. Бір бағанды алып тастау үшін, ең алдымен таңдалған бағанның атауын алып тастаңыз. Содан кейін, таңдалған бағанда 1 саны бар әрбір жол үшін, сол жолдан өтіп, оны басқа бағандардан алып тастаңыз (бұл жолдарға қол жеткізуді болдырмайды және келіспеушіліктердің алдын алады). Таңдалған жолда 1 саны бар әрбір баған үшін осы бағанды алып тастау процедурасын қайталаңыз. Бұл тәртіп, алынған кез келген элементтің дәл бір рет және болжамды тәртіппен алынып тасталуын қамтамасыз етеді, осылайша оны дұрыс кері қайтаруға болады. Егер нәтижедегі матрицада бағандар қалмаса, онда олардың барлығы толтырылған және таңдалған жолдар шешімді құрайды.
Қайта қарау
Қайталау үшін, жоғарыда сипатталған процесс жоғарыда айтылған екінші алгоритм арқылы кері қайтарылуы тиіс. Сол алгоритмді қолданудың бір шарты – кері іздеуді (backtracking) жоюдың нақты кері процесі ретінде орындау қажет. Кнуттың еңбегі осы байланыстарды, түйіндерді жою және қайта орналастыру қалай жүзеге асырылатынын түсіндіреді, сондай-ақ осы шектеуді сәл жеңілдетуге мүмкіндік береді.
Факультативтік шектеулер
Сондай-ақ, белгілі бір шектеудің орындалуы міндетті емес, бірақ бір реттен артық орындалмауы мүмкін жапсырмалы мәселелерді шешуге болады. Билеуші сілтемелер мұндай жағдайларды міндетті түрде толтырылатын негізгі бағандармен және орындалуы мүмкін қосымша бағандармен шешеді. Бұл алгоритмнің шешімді тексеру шартын – бағандары жоқ матрицадан, негізгі бағандары жоқ матрицаға өзгертеді. Егер бағандағы ең аз бірліктер эвристикасы қолданылса, оны тек негізгі бағандар ішінде тексеру қажет. Кнут n патшайым мәселесіне қатысты орындалуы мүмкін шектеулерді талқылайды. Шахмат тақтасының диагональдары орындалуы мүмкін шектеулерді көрсетеді, себебі кейбір диагональдар бос болуы мүмкін. Егер диагональ толтырылған болса, ол бір рет қана толтырылуы керек.