I Bob. Bellman funktsiyasini berilgan masalalarda ishlash prinsiplari.
1.1-Dinamik programmalashtirish usuli xaqida umumiy ma’lumotlar.
Dinamik dasturlash deb matematik modellari ko’p bosqichli va dinamik jarayonli harakterga ega bo’lgan chiziqsiz dasturlashning maxsus masalalari va optimal boshqaruv masalalarini yechishning hisoblash usuliga aytiladi. Bu usul jarayonlarning ketma-ket tahliliga asoslangandir. Shunday tahlil qilinadigan maxsus masalalardan biri resurslarni taqsimlash masalasidir.
Dinamik dasturlash “so’z birikmasi birinchi marta 1940-yillarda Bellman tomonidan masala yechimini toppish jarayonini tasvirlash uchun foydalanilgan, bunda bitta masalaning javobi faqat uning “o’zidan oldingi” masalani yechgandan so’ng hosil qilinishi mumkin. 1953-yil u bu ta’rifni hozirgi shakligacha aniqlashtirdi (soddalashtirdi). Boshida bu soha tizimli tahlil va injiniring sifatida asoslangan edi. Dinamik dasturlashda Bellmanning hissasi Bellman tenglamasi dinamik dasturlash nazariyasining markaziy natijasi, u optimizastiya masalasini rekursiv shaklda qayta formulalashtirdi. Misol uchun, taqdimotda hodisalarning ma’lum jadvalini ba’zida dastur deyishadi. Bu holatda dastur sifatida munkin bo’lgan hodisalar ketma-ketligi tushiniladi. Dinamik dasturlash uning n alohida bosqichlarini almashish, eng munosib yechim n-o'lchovli muammoni aniqlash uchun hisoblanadi. Ularning har biri o'zgarmaydigan hurmat bilan sub-vazifa hisoblanadi. Bu yondashuv asosiy afzalligi bir o'lchovli optimallash muammosi bilan shug'ullanuvchi Dasturchilar o'rniga bir n-o'lchovli muammoning pastki va bizning asosiy maqsadi "pastdan yuqoriga" ketadi, deb qabul qilinishi mumkin. Bu, ya'ni sub-vazifalarni-biri bilan bog'liq bo'lgan hollar, jadal dasturiy amalga oshirish uchun tavsiya etiladi umumiy modullari baham. algoritm bir marta Alt topshiriqlardan har bir qaror beradi va tejash javob maxsus jadvalda amalga oshiriladi. Bu ular bir xil sub-vazifa bilan yana uchratganida javob hisoblash emas beradilar.
Dinamik ma’lumotlar tuzilmasi – bu qandaydir bir qonuniyatga asoslanib shakllangan, lekin elementlari soni, o’zaro joylashuvi va o’zaro aloqasi dastur bajarilishi davomida shu qonuniyat asosida dinamik o’zgaruvchan bo’lgan ma’lumotlar tuzilmasidir. Dasturlarda dinamik ma’lumotlar tuzilmasidan ko’pincha chiziqli ro’yhatlar, steklar, navbatlar va binar daraxtlar ishlatiladi. Bu tuzilmalar bir-biridan elementlarning bog’lanish usuli va ular ustida bajarilishi mumkin bo’lgan amallari bilan farqlanadi. Dinamik tuzilmalar massiv va yozuvdan farqli ravishda operativ xotirada ketma-ket sohalarda joylashmaydi. Ixtiyoriy dinamik tuzilma elementi 2 ta maydondan tashkil topadi: tuzilma tashkil etilishiga sabab bo’layotgan informatsion maydon va elementlarning o’zaro aloqasini ta’minlovchi ko‘rsatkichli maydon.
Ko'pincha jiddiy dasturlarda siz ish paytida hajmi va tuzilishi o'zgarishi kerak bo'lgan ma'lumotlardan foydalanishingiz kerak. Dinamik qatorlar bu erda yordam bermaydi, chunki qancha xotira ajratilishi kerakligini oldindan aytib bo'lmaydi - bu faqat ish paytida aniqlanadi. Masalan, biz matnni tahlil qilishingiz va unda qanday so'zlar va qancha miqdorda mavjudligini aniqlashimiz kerak va bu so'zlarni alifbo tartibida tartibga solish kerak.
Hammasi bo'lib, dinamik ma'lumotlar tuzilishining 6 ta asosiy turi mavjud:
Stek
Navbat
Ro’yhat
Daraxt
Graf
Ro‘yxat. Ro'yxatning 3 turi mavjud:
Bir bog’lamli (chiziqli)
Ikki bog’lamli
Siklik
Bir bog'lamli ro'yxat navbatga o'xshaydi, lekin undan farqli o'laroq, ro'yxat bilan ishlaganda, siz istalgan joyga biron bir narsani qo'shishingiz va ro'yxatning yuqori qismida faqat bitta ko'rsatgichdan foydalanishingiz mumkin.
Chiziqli ro’yhatlarda har bir element o’zidan keyingisi yoki oldingisi bilan ham bog’langan bo’lishi mumkin. Birinchi holatda, ya’ni elementlar o’zidan keyingi element bilan bog’langan bo’lsa, bunday ro’yhatga bir bog‘lamli ro‘yhat deyiladi. Mazkur ko’rinishdagi ro’yhat elementi k’rsatkichining o’ziga xosligi shundan iboratki, u faqatgina ro’yhatning navbatdagi elementi adresini ko’rsatadi. Bir tomonlama yo’naltirilgan ro’yhatda eng so’nggi element ko’rsatkichi bo’sh, ya’ni NULL bo’ladi.
Agar oxirgi element birinchi element ko’rsatkichi bilan bog’langan bo’lsa, bunday ro’yhatga halqasimon ro‘yhat deyiladi. Ro’yhatning har bir elementi shu elementni identifikatsiyalash uchun kalitga ega bo’ladi. Kalit odatda butun son yoki satr ko’rinishida ma’lumotlar maydonining bir qismi sifatida mavjud bo’ladi. Ro’yhatlar bilan ishlashda dasturda boshlang’ich elementni ko’rsatuvchi ko’rsatkich talab etiladi.Dinamik dasturlash usuli yordamida quyidagi kompyuter muammolarini hal qilish mumkin:
• Fibonacci raqam seriyasi
• Knapsack muammosi
• Hanoi minorasi
• Floyd-Warshall tomonidan olib boriladigan eng qisqa yoʻl
• Dijkstra tomonidan olib boriladigan eng qisqa yoʻl
• Loyihani rejalashtirish
Dinamik dasturlash yuqoridan-pastga va pastdan yuqoriga qarab ishlatilishi mumkin. Va, albatta, aksariyat hollarda, oldingi yechimlarga murojaat qilish, CPU aylanishiga qaraganda qayta hisoblashdan koʻra arzonroq hamda samaraliroq boʻlishi ham mumkin.
Dinamik dasturlash turli hil ishlab chiqarish masalalarini yechishda keng qo’llaniladi, bunga ixtiyoriy vaqt momentida kerakli miqdordagi to’ldiruvchilar bilan ta’minlash uchun ombor zahiralarini boshqarish ishlab chiqarish, ishlab chiqarish jarayonini kalendarli planlashtirish, uskunalarini joriy va kapital ta’mirlash, investistiya vositalarini maksimal darajada samaralash taqsimlash.
Dinamik programmalashtirish operastiyalarni tekshirish masalalarini yechishda qo’llaniladigan xozirgi zamonda yaratilgan eng yangi matematik usullardan biridir. Xar xil iktisodiy jarayonlarni aks ettiruvchi matematik programmalashtirish masalalarida vaqt parametriga bog’liqlik bo’lmasa, bunday masalalarning optimal yechimlarini rejalashtirilayotgan davr uchungina topish mumkin. Bunday masalalar, odatda, bir bosqichli masalalar deb ataladi. Dinamik programmalashtirish iborasidagi so’zlar bu usulni faqat vaqtga bog’liq bo’lgan masalalargagina qo’llash mumkin degan xulosaga kelish mumkin. Bu usul yordamida vaqt umuman qatnashmagan masalalarni ham yechish mumkin. Dinamika qaralayotgan masalada emas, balki uni yechish usulidadir. Shuning uchun ham dinamik programmalashtirish masalalari ko’p bosqichli masalalar deyiladi.