Кіріспе

Компьютерлік ғылымда, егер мәселенің оңтайлы шешімін оның ішкі мәселелерінің оңтайлы шешімдерінен құрастыруға болады, онда мәселенің оңтайлы құрылымы бар деп айтылады. Бұл қасиет мәселе үшін ашкөз алгоритмдердің тиімділігін анықтау үшін пайдаланылады. Әдетте, ашкөз алгоритм оңтайлы құрылымы бар мәселені шешу үшін қолданылады, егер индукция арқылы әр қадамда оның оңтайлы екендігі дәлелденсе. Әйтпесе, егер мәселеде үстемелі ішкі мәселелер болса, «бөліп талқандау» әдістерін немесе динамикалық бағдарламалау қолданылуы мүмкін. Егер тиімді ашкөз алгоритмдер болмаса және мәселеде үстемелі ішкі мәселелер болмаса, шешім кеңістігін ұзақ, бірақ түзу іздеу – ең жақсы балама болып табылады. Динамикалық бағдарламалауды математикалық оптимизацияға қолданғанда, Ричард Беллманның Оптималдық Принципі динамикалық оптимизация мәселесін белгілі бір бастапқы кезеңнен белгілі бір аяқталу кезеңіне дейін шешу үшін, кейінірек s кезеңінен басталатын ішкі мәселелерді шешу қажеттігіне негізделген, мұнда t < s < T. Бұл оңтайлы құрылымның мысалы. Оптималдық Принципі Беллман теңдеуін туындату үшін қолданылады, ол t кезеңінен басталатын мәселенің мәнінің s кезеңінен басталатын мәселенің мәнімен қалай байланысты екенін көрсетеді.

Мысал

1-суретте көрсетілгендей, екі қала арасында көлікпен саяхаттау үшін ең қысқа жолды табуды қарастырайық. Мұндай мысал оңтайлы тармақтылықты (optimal substructure) көрсетуі мүмкін. Яғни, егер Сиэтлден Лос-Анджелеске дейінгі ең қысқа бағыт Портлендтен, содан кейін Сакраментодан өтетін болса, онда Портлендтен Лос-Анджелеске дейінгі ең қысқа бағыт та Сакраментодан өтуі керек. Демек, Портлендтен Лос-Анджелеске қалай жету мәселесі Сиэтлден Лос-Анджелеске қалай жету мәселесінің ішінде орналасқан. (Графиктегі толқынды сызықтар кіші мәселелердің шешімдерін көрсетеді.) Оңтайлы тармақтылықты көрсетуі күмәнді мәселенің мысалы ретінде Буэнос-Айрестен Мәскеуге ең арзан әуе билетін табу мәселесін қарастырайық. Егер бұл билет Маями мен Лондон арқылы жасалса да, Маямиден Мәскеуге ең арзан билеттің Лондон арқылы болатынына сенімді тұжырым жасауға болмайды, себебі әуе компаниясы бірнеше рейстен тұратын сапарды сату бағасы көбінесе сапардағы жеке рейстердің бағаларының қосындысына тең болмайды.

Анықтама

Оптималды субструктураның сәл формалды анықтамасын беруге болады. "Проблема" – "баламалардың" жиынтығы болсын, және әр баламаға c(a) шығыны сәйкес келсін. Міндет – c(a) шығынын ең төмендетуге мүмкіндік беретін баламалар жиынтығын табу. Баламаларды кіші топтарға бөлуге болады, яғни әр балама тек бір кіші топқа жатады. Әр топтың өзіндік шығын функциясы бар делік. Осы шығын функцияларының әрқайсысының ең төменгі мәнін, сондай-ақ сол кіші топтармен шектелген жаһандық шығын функциясының ең төменгі мәнін табуға болады. Егер осы ең төменгі мәндер әр кіші топ үшін сәйкес келсе, онда жаһандық ең төменгі мәнді барлық баламалар жиынтығынан емес, біз анықтаған кіші, жергілікті шығын функцияларының ең төменгі мәндерінен тұратын жиынтықтан таңдауға болады. Егер жергілікті функцияларды ең төмендету "төменгі дәрежелі" проблема болса және (нақтырақ айтқанда) осы азайтулардың шекті санынан кейін проблема тривиальды болса, онда проблеманың оптималды субструктурасы бар.