Algoritm
Algoritm, belgilangan qo'llanma yoki tartibga ko'ra amalga oshiriladigan muammolarni hal qilish usuli hisoblanadi. Bu qo'llanmalar matematika, fizika, dasturlash, kriptografiya, shifrlash va boshqa sohalarda ishlatiladi.
Algoritm, bir necha qadamdan iborat bo'lib, har qadamda ma'lum bir ish bajarilishi kerakligini aniqlaydi va birinchi qadamdan oxirgi qadimgacha natija chiqarish usullarini ko'rsatadi. Algoritmlar odatda Turing to'g'risida fikrlashda qo'llanadi. Bu Turing-kompleks algoritmlar, avtomatik tarzda kompyuter dasturlariga aylantirilishi mumkin bo'lgan barcha muammolarni hal qilish uchun ishlatiladi.
Algoritmlar, boshqacha so'zlar bilan aytganda, shunchaki har qanday amalning o'zgarishi bo'lgan bir nechta qadamlar jadvalidir. Bu qadamlar, masalalarni aniqlash, aniqlangan masalalarni tahlil qilish va natijalarni chiqarishdan iborat bo'lishi mumkin.
Bir algoritmning bajarilishi kerak bo'lgan vazifalarga misol sifatida, foydalanuvchilarning kompyuterda bitta vaqtning o'zida bajarishi kerak bo'lgan o'yinlar, raqamli simulatsiyalar, bank hisobvarag'iga o'tkazishlar va kabi muammolarni bajarish mumkin. Algoritmlar, shuningdek, shifrlash va kriptografiya sohalarida xavfsizlikni ta'minlash uchun ham ishlatiladi.
Algoritm tuzish, dastur tuzishning katta bir qismini tashkil qiladi. Bunday qo'llanmalar dastur tuzilishida amalga oshirilgan aniqlangan protsedurani shakllantir
Algoritm Xususiyatlari
Determinizm. Shu algoritm tomonidan amalga shu boshlang'ich ma'lumotlarni o'rnatayotgan boshlanadi qayta-qayta shu signal beruvchi.
Mass. algoritm har qanday bir vazifani, balki ma'lum bir turdagi juda ko'p vazifalar tomonidan qaror bo'lmasa.
Samaradorligi. Har qanday holda ham algoritm bilan muammoni hal qilish uchun keladi.
Diskret. algoritm har qanday qiyinchilik vakili emas amalga oshirish bo'lgan qadamlarni o'z ichiga oladi.
Terminatori. algoritm tartibi cheklanmagan yoki cheksiz bo'lishi mumkin emas.
To'g'ri. algoritm ma'lum bir vazifani bajarish uchun tashkil qilingan bo'lsa, u har doim natija olib berishi kerak.
Algoritm nima uchun kerak-Algoritm bu ishni bajarish uchun ishlatiladigan juda foydali vosita. Hisoblashda eng yaxshi algoritmni tanlash kompyuterning berilgan topshiriqni eng yaxshi tarzda bajarishini ta'minlaydi.
Shuning uchun u kompyuter dasturini mavjud resurslar bilan optimallashtirishga xizmat qiladi. Boshqacha qilib aytganda, muammoni eng yaxshi algoritmlar yordamida hal qilishga qaror qilganingizda, dastur tezligi va xotirani kam sarflashni eng yaxshi kombinatsiyasini xohlaysiz.
O'rganilishi mumkin bo'lgan turli xil algoritmlar ular echadigan masalalar kabi xilma-xildir. Ammo, ehtimol siz hal qilmoqchi bo'lgan muammoning ba'zi jihatlari bilan boshqa muammoga o'xshashligi ehtimoldan yiroq emas.
Algoritmlarning keng doirasini tushunib, muammo uchun eng maqbulini tanlashingiz va uni to'g'ri qo'llashingiz mumkin.
Algoritmlarni baholash
Algoritmalar boshqa bir mezon, ma'lumotlar va murakkablik darajasi ko'rsatilmagan holda baholanilishi mumkin emas. Algoritmni baholanishiga olib keladigan bir nechta mezonlar quyidagilar bo'lishi mumkin:
Vaqtni baholash: Algoritmlar har doim ishni bir nechta yulduz bilan baholashadi. Yani, algoritmdagi operatsiyalar vaqtni qancha sifatli bajaradi va o'z ichiga qancha murakkablikka ega ekanligini ko'rsatadi.
Xotira joyi: Algoritmlar yod-siz joyni qancha ishlatadi yoki qancha xotiradan foydalanadi ham baholanadi. Xotira ko'payganida algoritmni ishga tushirish uchun kamchiliklar yuzaga kelishi mumkin.
Ishonchli holat: Algoritmlarning qancha ishonchli ekanligi ham baholanilishi mumkin. Bu, algoritmda yolg'on yoki xatoliklar bo'lishi mumkinligini, shuningdek, muhim ma'lumotlarni qondirish xususiyatlarini o'z ichiga oladi.
Murakkablik darajasi: Algoritmlar murakkablik darajasiga ko'ra baholashadi. Murakkablik darajasi algoritmdagi operatsiyalar va ma'lumotlar soni va turi boyicha o'zgaradi. Murakkablik ko'payganida, algoritmning ishlashi vaqtni ko'proq olishi mumkin.
Odatdagi maqsadlar: Algoritmlarning ishga tushirilishi uchun kerakli maqsadlar ham baholanilishi mumkin. Algoritmlar yordamida muammolarni hal qilish uchun murakkablik darajasi, vaqtni va xotira joyini taqiqlash mumkin.
Bulardan eng asosiylari vaqt va xotira bo’yicha baholashdir. Kenling endi sizlar bilan bir masala ustida organgan bilimlarimizni silab ko’ramiz!!!
Misol
Siz darvozaga chiqish uchun o'rnamoqda ekansiz. Darvozaga yetishish uchun n qadam kerak.
Har safar, siz faqat 1 yoki 2 qadam bosishingiz mumkin. Darvozaga qancha xil usullarda yetishingiz mumkin?
Misol uchun
Kiruvchi: n = 3
Chiquvchi: 3
Tafsilot: Darvozaga chiqish uchun uch xil usul mavjud:
1 qadam + 1 qadam + 1 qadam
2. 1 qadam + 2 qadam
3. 2 qadam + 1 qadam
Misol leetcode.com saytidagi quyidagi misol shartidan olindi misol
Eng sodda yechi:
public int ClimbStairs(int n) {
if (n <= 1) {
return 1;
}
return ClimbStairs(n-1) + ClimbStairs(n-2);
}
Bu algoritmning vaqt complexity (vaqt sarflanishi) Fibonacci sonlarining yechimida xos kuchli darajali rekursiv algoritmlarga ega bo'lib, vaqt complexity O(2^n) ga yaqin bo'ladi. Bu, n-ning kattaligi oshganida yechimning hisoblanish vaqtini tez-tez ko'paytiradi va bu holda algoritm ishlashining tezligi katta miqdorda qo'shimcha vaqtni sarflaydi.
Algoritmda optimallashtirishlar amalga oshirilishi mumkin. Masalan, rekursiv algoritmdan foydalangan holda yozilgan dasturlar yozilishi mumkin. Bundan tashqari, daraja vaqt complexity ni kamaytiruvchi algoritmlar mavjud, masalan, dinamik dasturlashga asoslangan yechimlar.
Bundan tashqari, foydalanuvchining kiritgan n qiymati katta bo'lishi mumkinligi sababli, hafizaning ham sarflanishiga e'tibor berish kerak. Yuqorida keltirilgan rekursiv yechimning hafizaning sarflanishi ham O(n) ga yaqin bo'lishi mumkin, shuningdek, dinamik dasturlashga asoslangan yechimlarda hafizaning sarflanishi ham O(n) ga yaqin bo'lishi mumkin
Keling endi yechimimizni yaxshilaymiz:
Yuqoridagi yechoim reecursiv yechim edi
public static int ClimbStairs(int n) {
public static int ClimbStairs(int n) {
if (n <= 1) {
return 1;
}
int[] memo = new int[n + 1];
memo[0] = 1;
memo[1] = 1;
for (int i = 2; i <= n; i++) {
memo[i] = memo[i - 1] + memo[i - 2];
}
return memo[n];
}
Do'stlaringiz bilan baham: |