Кіріспе

Бинарлық шешім диаграммасының түрі

Нөлдік басқан шешім диаграммасы (ZSDD немесе ZDD) – бұл белгілі бір айнымалы ретімен бинарлық шешім диаграммасының (BDD) нақты түрі. Бұл дерек құрылымы жиындарды канондық түрде ықшам түрде ұсынады, әсіресе кейбір комбинаторлық мәселелер үшін тиімді. Реттелген бинарлық шешім диаграммасының (OBDD) қысқарту стратегиясын еске түсіріңіз, яғни егер екі шығу жиегі бір түйінге бағытталса, түйін өзінің бірінен кейін баласымен алмастырылады. Ал ZDD-де түйін, егер оның оң жиегі 0 терминалды түйінге нұсқаса, теріс баласымен алмастырылады. Бұл сирек жиындарды жақсырақ қысуға мүмкіндік беретін баламалы берік нормалық форманы ұсынады. Ол 1993 жылы Шин Ичи Минато ұсынған қысқарту ережесіне негізделген.

Өмірбаян

Бинарлық шешім диаграммасында Буль функциясы бірнеше шешім түйіндері мен терминалдық түйіндерден тұратын тамырланған, бағытталған, ациклді граф ретінде бейнелене алады. 1993 жылы Жапониядан Шин Ичи Минато Рэндал Брайанттың BDD-ін комбинаторлық мәселелерді шешу үшін модификациялады. Оның "Нөлдік басқан" BDD-лері бит векторларының сирек жиынтықтарын бейнелеуге және манипуляциялауға арналған. Егер мәселенің деректері ұзындығы n бит векторлары түрінде берілсе, онда векторлардың кез келген ішкі жиыны n айнымалыға арналған Буль функциясы арқылы көрсетіледі, егер айнымалыға сәйкес келетін вектор жиынтықта болса, ол 1-ді қайтарады. Брайанттың сөзіне сүйенсек, логикалық функциялардың түрлерін қосынды көбейтіндісі түріндегі мәселелерді көрсету үшін қолдануға болады. Мұндай формалар көбінесе "кубтар" жиынтығы ретінде бейнеленеді, олардың әрқайсысы 0, 1 және символдарынан тұратын жолмен белгіленеді. Мысалы, функциясын жиынтығы арқылы көрсетуге болады. 1, 0 және символдарын білдіру үшін 10, 01 және 00 биттерін пайдаланып, жоғарыдағы жиынтықты биттік векторлармен түрінде көрсетуге болады. Биттік векторлар жиынтығының сирек екенін атап өту керек, себебі векторлардың саны 2-ден кем, бұл биттік векторлардың максималды саны, және жиынтықта көптеген нөлге тең элементтер бар. Осы жағдайда, егер түйіннің айнымалысын 1-ге орнату функцияның 0-ді қайтаруына себеп болса, түйін қалдырылуы мүмкін. Бұл 1 біт позициясында вектор жиынтықта жоқ екенін білдіреді. Сирек жиынтықтар үшін бұл жағдай жиі кездеседі, сондықтан көптеген түйіндерді жоюға болады. Минато ZDD-нің комбинаторлық мәселелер үшін, мысалы, екі деңгейлі логикалық минимизацияның классикалық мәселелері, аттың жүрісі мәселесі, қателерді модельдеу, уақыттық талдау, N патшайым мәселесі, сондай-ақ нашар бөлу үшін ерекше қолайлы екенін дәлелдеді. ZDD-ді пайдалану арқылы n биттік векторлар жиынтығының OBDD-дегі бейнелеуінің мөлшерін ең көп дегенде n есеге азайтуға болады. Іс жүзінде, бұл оңтайландыру статистикалық тұрғыдан маңызды.

Ерекшеліктері

ZDD-нің бір ерекшелігі – комбинация жиынтығы бірдей болғанда, форма кіріс айнымалыларының санына тәуелді емес. Графиктерді жасамас бұрын кіріс айнымалыларының санын анықтау қажет емес. ZDD-лер ешқашан комбинацияда кездеспейтін объектілерге қатысты айнымалыларды автоматты түрде жояды, осылайша сирек кездесетін комбинацияларды өңдеуде тиімділікке қол жеткізеді. ZDD-нің тағы бір артықшылығы – графиктегі 1-ге тең бағытталған жолдардың саны комбинация жиынтығындағы элементтер санымен дәл сәйкес келеді. Ал бастапқы BDD-лерде түйіндерді жою осы қасиетті бұзады. Сондықтан, ZDD-лер комбинация жиынтықтарын көрсету үшін қарапайым BDD-лерден артық. Дегенмен, 7-суретте көрсетілгендей, қарапайым Бульдық функцияларды көрсету үшін бастапқы BDD-лерді қолдану тиімдірек.

ZDD сөздіктер ретінде

ZDD-ді ағылшын тіліндегі бес әріпті сөздерді, мысалы, Стэнфорд ГрафБейсінен (Stanford GraphBase) алынған WORDS жиынтығын (көлемі 5757) көрсетуге болады. Мұны істеудің бір жолы – егер және тек қана егер бес сан , , , , ағылшын сөзінің әріптерін кодтаса, онда 1 деп анықталған функцияны қарастыру. Мысалы, 25 айнымалысы бар функцияның Z(f) = 6233 түйіні бар – бұл 5757 сөзді көрсету үшін тым нашар емес. Бинарлық ағаштармен, трилермен (tries) немесе хэш-кестелермен (hash tables) салыстырғанда, ZDD қарапайым іздеулерді орындау үшін ең жақсысы болмауы мүмкін, бірақ ол тек ішінара көрсетілген деректерді немесе кілтке шамамен сәйкес келуі керек деректерді алуда тиімді. Күрделі сұраныстарды оңай шешуге болады. Сонымен қатар, ZDD-де көп айнымалылар болмайды. Шын мәнінде, ZDD-ді пайдалану арқылы осы бес әріпті сөздерді 26 × 5 = 130 айнымалысы бар сиреп (sparse) функция ретінде көрсетуге болады, мысалы, айнымалы екінші әріптің "a" екенін анықтайды. "crazy" сөзін көрсету үшін F-ті шындыққа (true) айналдыру керек, егер және барлық басқа айнымалылар 0 болса. Осылайша, F 5757 жиынтықтан тұратын отбасы ретінде қарастырылуы мүмкін. Осы 130 айнымалымен ZDD өлшемі Z(F) 6233 орнына 5020-ға тең. Кнутқа (Knuth) сәйкес, BDD-ді пайдалану арқылы B(F)-тың эквиваленттік өлшемі 46,189 – Z(F)-тан әлдеқайда үлкен. Ұқсас теориялар мен алгоритмдерге ие болғанына қарамастан, ZDD-лер осы мәселеде BDD-ден айтарлықтай жақсы нәтижелер көрсетеді. Нәтижесінде, ZDD-лер бізге BDD-лер үшін тым қиын болатын кейбір сұраныстарды орындауға мүмкіндік береді. Субмножектердің (subset) күрделі отбасыларын элементар отбасылардан оңай құрастыруға болады. Белгілі бір үлгіні (pattern) қамтитын сөздерді іздеу үшін, ZDD-де отбасы алгебрасын (family algebra) пайдаланып, P үлгісін есептеуге болады, мысалы .

Жоғарғы жақтағы проблема

"Рыцарь" тур проблемасы тарихи маңызға ие. Рыцарь графигі шахмат тақтасының шаршыларын бейнелеу үшін n2 төбелік нүктелерді қамтиды. Қабырғалары рыцарьдың заңды қимылдарын көрсетеді. Рыцарь тақтаның әр шаршысын дәл бір рет басып өтуі мүмкін. Олаф Шрёер, М. Лёббинг және Инго Вегенер бұл мәселеге, атап айтқанда тақтада, графиктегі әр қабырғаға бульдік айнымалыларды тағайындау арқылы, барлық қабырғаларды белгілеу үшін барлығы 156 айнымалымен қарады. Мәселенің шешімі 156 биттік комбинациялық вектормен көрсетілуі мүмкін. Минатоның сөзіне сәйкес, барлық шешімдер үшін ZDD құрастыру тікелей шешу үшін тым үлкен. Бөліп-басқару әдісі тиімдірек. Мәселені тақтаның екі бөлігіне бөлу және кіші кеңістіктерде ZDD құрастыру арқылы, әр шешімі 64 қабырғадан тұратын "Рыцарь" тур проблемасын шешуге болады. Дегенмен, граф тығыз болғандықтан, ZDD пайдаланудың артықшылығы айқын емес.

Ақаулықтарды симуляциялау

Н. Такахаси және авторлар тобы OBDD-ді пайдаланып, бірнеше ақауды симуляциялау әдісін ұсынды. Бұл дедуктивті әдіс ақау жиынтығын бастапқы кірістерден бастапқы шығыстарға дейін таратады және бастапқы шығыстарда ақауларды анықтайды. Бұл әдіс бірмүшелік кубтар жиынымен жұмыс істейтіндіктен, ZDD тиімдірек болып табылады. Бірмүшелік кубтар жиыны есептеулерінде ZDD-нің оңтайландыру мүмкіндіктері, ZDD-нің VLSI CAD жүйелерін жасауда және көптеген басқа да қолданбаларда пайдалы екенін көрсетеді.