Dinamik dasturlash bilan echilishi mumkin bo'lgan muammoning muhim xususiyati shundaki, uning pastki muammolari bir-biriga mos kelishi kerak. Bu eng oddiy qiymatlarni saqlash shart bo'lmagan holda dinamik dasturlashni bo'linish va zabt etish texnikasidan ajratib turadi.
Bu rekursiyaga o'xshaydi, chunki asosiy holatlarni hisoblashda yakuniy qiymat induktiv tarzda aniqlanishi mumkin. Ushbu pastdan yuqoriga yondashuv yangi qiymat faqat oldindan hisoblangan qiymatlarga bog'liq bo'lganda yaxshi ishlaydi.
Afzalligi
Dinamik dasturlashning asosiy afzalliklaridan biri shundaki, u qayta ishlashni tezlashtiradi, chunki ilgari hisoblangan ma'lumotnomalardan foydalaniladi. Bu rekursiv dasturlash texnikasi bo'lgani uchun dasturdagi kod satrlarini kamaytiradi.
Ochko'zlik algoritmlari ikkalasi ham optimallashtirish vositasi bo'lgani uchun dinamik dasturlashga o'xshaydi. Biroq, ochko'zlik algoritmi har bir mahalliy qadamda maqbul echimni izlaydi. Ya'ni, global maqbullikni topish umidida ochko'z tanlovni qidiradi.
Shuning uchun, ochko'zlik algoritmlari o'sha paytda maqbul ko'rinishga ega bo'lgan taxminni keltirishi mumkin, ammo kelajakda qimmatga tushadi va global maqbullikka kafolat bermaydi.
Boshqa tomondan, dinamik dasturlash subprolemalar uchun maqbul echimni topadi va keyinchalik ushbu subprolemlarning natijalarini birlashtirib, haqiqatan ham eng maqbul echimni topish uchun asosli tanlov qiladi.
Kamchiliklari
- Har bir kichik muammoning hisoblangan natijasini saqlash uchun juda ko'p xotira kerak bo'ladi, saqlangan qiymatdan foydalanish yoki ishlatilmasligiga kafolat bermasdan.
- Ko'p marta, chiqish qiymati hech qachon quyidagi pastki muammolarda ishlatilmasdan bajariladi. Bu xotiradan keraksiz foydalanishga olib keladi.
- Dinamik dasturlashda funktsiyalar rekursiv deb nomlanadi. Bu stek xotirasini doimiy ravishda oshirib boradi.
Doira sektorida nuqta bor yoki yo'qligini tekshiring.
Bizda boshlang'ich nuqtada joylashgan doira mavjud (0, 0). Kirish sifatida bizga aylana sektorining boshlanish burchagi va aylana sektorining o'lchami foizda berilgan.
Doira sektorida nuqta bor yoki yo'qligini tekshirish dasturini tuzing: (18,19,20)
Kirish
Radius:10
Boshlanish burchagi: 30
Foiz:25
X= 5 Y=5
Aylana sektorida (x, y) nuqta mavjudligi yoki yo'qligini aniqlash uchun biz ushbu nuqtaning qutb koordinatalarini topamiz va keyin quyidagi bosqichlardan o'tamiz:
Bu burchak yordamida x, y ni qutb koordinatalariga aylantiring
= atan(y/x); Radius = sqrt(x * x + y * y);
Keyin burchak boshlang'ich burchak va tugatish burchagi o'rtasida va radius 0 va radius o'rtasida bo'lishi kerak.
Dastur kodi:
# Xushvaqtov Abror.
# 2-amaliy topshiriq
import math
def checkPoint(radius, x, y, foiz, boshlanish_burchagi):
# tugatish burchagini hisoblash
tugash_burchagi = 360 / foiz + boshlanish_burchagi
# Qutb koordinatalarini hisoblash
qutb_radius = math.sqrt(x * x + y * y)
Angle = math.atan(y / x)
# qutb_radius kamroq yoki yo'qligini tekshiring
# keyin aylana radiusi yoki yo'q va
# Burchak boshlanish_burchagi va orasida
# tugash_burchagi yoki yo'q
if (Angle >= boshlanish_burchagi and Angle <= tugash_burchagi
and qutb_radius < radius):
print("Point (", x, ",", y, ") "
"doira sektorida mavjud")
else:
print("Point (", x, ",", y, ") "
"doira sektorida mavjud emas")
# funksiyani ishga tushirish
radius, x, y = 10, 5, 5
foiz, boshlanishburchagi = 25, 30
checkPoint(radius, x, y, foiz, boshlanishburchagi)
Natijasi:
Agar Kirish
Radius:8
Boshlanish burchagi: 0
Foiz:12
X= 3 Y=4
Bo’lsa Natija:
Do'stlaringiz bilan baham: |