6-Laboratoriya ishi Mavzu: Dinamik programmalash
Download 92.17 Kb.
|
6-tajriba. Algoritm loyihalash
- Bu sahifa navigatsiya:
- Qayta hisoblash tartibi: Qayta hisoblash tartibi uch xil turi bor. 1)Tog’ri tartib.
6-Laboratoriya ishi Mavzu: Dinamik programmalash. Dinamik programmlash bu – murakkab masalani uni osonroq bo’lgan qism masalalarga bo’lish orqali yechish usuli. Masalan bizda qandaydir masala bor. Uni qanday usulda yechishni bilmaymiz. Shu holda uni kichikroq bo’laklarga ajratamiz, bu bo’laklarni ham qanday qilib yechish noma’lum bo’ladi. Ular o’z navbatida kichiroq masalalarga ajratiladi. Natijada ohir oqibat uni ajratib bo’lmaydigan masalaga keladi va uning yechimi aniq bo’ladi. Boshqa masalalarning yechiimi esa u orqali ajratilgan kichikroq masalalar yechimlaridan hosil qilinadi. Dinamik programmalash masalasini yechish uchun quyidagi bosqichlarni amalga oshirish kerak: 1) Dinamika holati: Qism masalalarnini aniqlash. 2)Boshlang’ich holatlar qiymatlari. 3) Holatlar o’rtasidagi o’tishlar ya’ni qayta hisoblash formulasi. 4) Qayta hisoblash tartibi. 5) Javobni olish: Ba’zan bu yig’indi yoki ohirgi holatlardan maksimal/minimal qiymati bo’ladi. Qayta hisoblash tartibi: Qayta hisoblash tartibi uch xil turi bor. 1)Tog’ri tartib. Holatlar allaqachon hisoblangan holatlar natijalardan foydalanib qayta hisoblanib boriladi: 2) Teskari tartib. Hozirgi holatga bog’liq bo’lgan keyingi holatlar qayta hisoblanib boriladi. 3)Erinchoq dinamika. Bunda qiymatlar rekursiv ko’rinishda bo’ladi. Bu asiklik grafda chuqurlik bo’yicha izlash algoritmiga o’xshash bo’ladi. Bunda uchlar halatlar, holatlar o’rtasidagi o’tishlar esa qirralar bo’ladi. Biror hisoblangan qiymat ikkinchi marta hisoblanib o’tirmaydi va avval hisoblangan natija qaytariladi. Masalan Fibonatchi sonlarini uchta usul bo’yicha hisoblashni ko’rib chiqaylik. To’g’ri tartib fib[1] = 1; // boshlang’ich holat fib[2] = 1; // boshlang’ich holat for (int i = 3; i ≤ n; i++) { fib[i]:=fib[i-1]+fib[i-2] // i holatini qayta hisoblash } Teskari tartib fib[1] = 1; // boshlang’ich holar for (int i = 3; i ≤ n; i++) { fib[i+1]:=fib[i] // i+1 holatini yangilash fib[i+2]:=fib[i] // i+2 holatini yangilash } Erinchoq dinamika int fib[] = {-1}; // dastlab -1 ga to’ldiramiz, bu uning qiymati hali hisoblanmaganligini bildiradi. int get_fib(int i) { if (i ≤ 2) { fib[i] = 1; //boshlang’ich holar return 1; } if (fib[i] != -1) {// Avval hisoblanganmi return fib[i]; // erinchoqlik qilib hisoblangan qiymatni qaytaradi } fib[i] = get_fib(i-1)+ get_fib(i-2); return fib[i]; } Har bir usul o’zining qo’llanilish o’rinlariga ega, ba’zida esa ularning istalgan birini qo’llashimiz mumkin. Dinamik programmalashni o’rganishning eng yaxshi usuli bu ko’piroq masala yechish. Shuning uchun uni masalalarda ko’proq ko’rib chiqqan ma’luq: Download 92.17 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling