Algoritm nima va u qanday tuziladi

Har kuni, bilmagan holda, o’nlab algoritm bajarasiz: choy damlash, ishga borish yo’li, ovqat pishirish. Algoritm — biror natijaga olib boradigan aniq qadamlar ketma-ketligi. Dasturlash ham aynan shu — faqat qadamlarni odam emas, kompyuter bajaradi. Bu darsda algoritm nima ekanini va uni qanday tuzishni ko’ramiz.
Dasturlash nima darsida “javobni emas, javobga olib boradigan yo’lni yozamiz” degandik. O’sha yo’l — algoritm.
Algoritm — kundalik misolda
Kimdir sizdan choy damlashni o’rgatishni so’radi. Siz qadamlarni tartib bilan aytasiz:
- Choynakka suv quy.
- Suvni qaynat.
- Choynakka choy sol.
- Qaynoq suv quy.
- 5 daqiqa kut.
Bu — algoritm. Har qadam aniq, tartibli va oxiri bor. Kompyuter uchun dastur yozish ham xuddi shunday: masalani mana shunday mayda, aniq qadamlarga bo’lasiz.
Algoritmning uch xossasi
Yaxshi algoritm uchta shartga javob beradi:
- Aniqlik — har qadam bir ma’noli. “Bir oz kut” emas, “5 daqiqa kut”.
- Tartiblilik — qadamlar ketma-ket. Choyni suv qaynashidan oldin solmaysiz.
- Cheklanganlik — algoritm oxir-oqibat tugaydi, cheksiz davom etmaydi.
Kompyuter juda aniq, shuning uchun noaniq qadam — xatoga olib keladi. “Suvni biroz isit” degan buyruqni u tushunmaydi; unga “90 gradusgacha isit” kerak.

Yaxshi algoritmning har bir qadami aniq va tartibli bo’ladi, algoritm esa albatta tugaydi.
Blok-sxema — algoritmni chizish
Algoritmni so’z bilan ham, blok-sxema (rasm) bilan ham ifodalash mumkin. Blok-sxemada har qadam bir shakl bilan belgilanadi:
| Shakl | Ma’nosi |
|---|---|
| Oval | Boshlanish yoki tugash |
| To’rtburchak | Amal (masalan “suvni qaynat”) |
| Romb | Shart (savol: ha/yo’q) |
| Strelka | Qadamlar tartibi |
Romb — eng qiziq qismi. U shart ni bildiradi: javobga qarab algoritm turli yo’ldan ketadi. Masalan “Choynak issiqmi?” — ha bo’lsa bir qadam, yo’q bo’lsa boshqasi. Bu tushunchani keyinroq Python’da shart operatorlari sifatida ko’rasiz.

Blok-sxemada oval boshlanish va tugashni, to’rtburchak amalni, romb shartni, strelka esa qadamlar tartibini bildiradi.
Bir masala — bir necha algoritm
Bitta masalani turli algoritm bilan yechsa bo’ladi. Ishga borishni oling: piyoda, avtobusda yoki taksida — hammasi maqsadga olib boradi, lekin tezligi va “narxi” har xil.
Dasturlashda ham shunday: bir vazifani bajaradigan bir necha algoritm bor, lekin ba’zisi tez, ba’zisi sekin ishlaydi. Yaxshi algoritmni tanlash — dasturchining muhim mahorati.
Algoritmni aniqlashtirish
Qayta ko’rib chiqish
Birinchi yozilgan algoritm yakuniy bo’lishi shart emas. U misolni yechishi, ammo keraksiz qadamga ega bo’lishi, chekka holatni unutishi yoki nomlari tushunarsiz bo’lishi mumkin. Avval to’g’riligini tekshiring, keyin uni soddalashtiring. Qadamni olib tashlaganingizda natija o’zgarsa, u kerak; o’zgarmasa, ortiqcha bo’lishi mumkin. Biror qadam ikki xil talqin qilinsa, uni maydaroq va aniqroq qilib yozing.
Masalan, “ro’yxatni tekshir” juda noaniq. “Ro’yxat bo’sh bo’lsa xato xabarini qaytar; aks holda birinchi elementni eng katta deb ol” aniqroq. Shu aniqlik keyinchalik kod review va debuggingda yordam beradi: boshqa odam ham qoidani bir xil tushunadi.
Uch turdagi qadam: ketma-ketlik, tanlov, takrorlanish
Ko’p algoritm uch turdagi qadamdan tuziladi: ketma-ket amal, tanlov va takrorlanish. Ketma-ket amal — avval ma’lumotni olasiz, keyin hisoblaysiz, so’ng natijani ko’rsatasiz. Tanlov — qiymatga qarab turli yo’l tanlanadi. Takrorlanish — bir qoida ro’yxatdagi har elementga tatbiq qilinadi. Murakkab dastur ham odatda shu uch fikrning birikmasi.
Masalan, o’quvchilar bahosini tekshiruvchi algoritm ro’yxat bo’ylab yuradi. Har baho uchun “60 dan kichikmi?” degan shartni tekshiradi. Shart rost bo’lsa, ogohlantirish ro’yxatiga ismni qo’shadi. Ro’yxat tugaganda natijani chiqaradi. Bu algoritmni blok-sxema, psevdokod yoki tanlangan til sintaksisida yozish mumkin; mazmuni o’zgarmaydi.
Chekka holatlarni oldindan belgilang
Algoritm odatiy misolda ishlashi yetarli emas. Ro’yxat bo’sh, qiymat manfiy, matn kutilgan joyga son kelgan yoki bir nechta teng natija chiqqan holatda nima bo’lishini yozing. Bunday holatlarning qoidasi mahsulot talabidan keladi. Masalan, baholar ro’yxati bo’sh bo’lsa o’rtacha baho 0 deb ko’rsatish noto’g’ri talqin qilinishi mumkin; “hali baho kiritilmagan” degan alohida natija tushunarliroq bo’ladi.
Psevdokod namunasi
funksiya eng_katta_sonni_top(sonlar):
agar sonlar bo'sh bo'lsa:
xato qaytar
eng_katta = sonlar ichidagi birinchi son
har bir son uchun sonlar ichida:
agar son > eng_katta bo'lsa:
eng_katta = son
eng_katta ni qaytar
Bu yerda kirish, chekka holat, boshlang’ich qiymat, sikl, shart va chiqish ko’rinib turibdi. Dry run orqali [3, 7, 2] hamda [-4, -1, -9] ro’yxatini sinang. So’ng bo’sh ro’yxat algoritmning birinchi shartiga yetishini tekshiring.
Yakuniy tekshiruv
Algoritmni topshirishdan oldin uch savol bering: u har doim tugaydimi, barcha kerakli kirishlarda aniq natija beradimi, qadamlarni boshqa odam bajarib ko’ra oladimi? Bu savollarga “ha” bo’lsa, algoritmni kodga o’tkazish xavfsizroq.
Yechimni boshqaga tushuntirish
Algoritmni faqat o’zingiz emas, boshqa odam ham o’qiydi. Shuning uchun o’zgaruvchi va qadam nomlarini mazmunli tanlang: x o’rniga eng_katta_baho, a o’rniga xarajatlar kabi nomlar qoidani tushunishga yordam beradi. Juda uzun qadamni ikki qismga bo’ling, lekin mayda bo’laklarni ham ortiqcha ko’paytirmang. Maqsad — har qadamning vazifasi bir qarashda ko’rinishi.
O’zingiz yozgan algoritmni bir soat yoki bir kun o’tgach qayta o’qing. Agar uni yana tushunish uchun ko’p taxmin qilish kerak bo’lsa, matn yoki qadamlar aniqlashtirilishi kerak. Bu odat keyinchalik jamoa bilan ishlashda, pull request reviewda va ishlab turgan loyihani yangilashda katta vaqt tejaydi.
Masalani algoritmga aylantirish tartibi
Yangi vazifani ko’rganda darrov kod yozmang. Avval natijani bitta gapda ayting: masalan, “ro’yxatdagi eng katta sonni topish”. Keyin kirish ma’lumotini aniqlang: sonlar ro’yxati. Chiqish nima ekanini yozing: eng katta son. So’ng odatiy holat bilan birga chekka holatni ham belgilang: ro’yxat bo’sh bo’lsa nima qilinadi, sonlar manfiy bo’lsa qoida o’zgaradimi, bir nechta bir xil eng katta son bo’lsa nima qaytariladi?
Shundan keyin qadamlarni mayda bo’laklarga ajrating. Masalan, birinchi sonni vaqtincha eng katta deb olasiz, keyingi har son bilan solishtirasiz, kattaroq bo’lsa vaqtinchalik qiymatni almashtirasiz, ro’yxat tugaganda natijani qaytarasiz. Bu fikr istalgan tilga o’tadi; faqat yozilish belgilari o’zgaradi.
Algoritmni qog’ozda sinash
Algoritm qog’ozda ham sinovdan o’tishi kerak. [3, 7, 2] ro’yxati uchun vaqtinchalik eng katta qiymat dastlab 3, keyin 7, oxirida esa 7 bo’ladi. [-4, -1, -9] uchun ham xuddi shu qoida ishlashi kerak. Bo’sh ro’yxat esa maxsus qarorni talab qiladi: xato xabari qaytariladimi yoki oldindan ro’yxat bo’sh emasligi tekshiriladimi? Bu savolga javob yozilmasa, dasturdagi xato tasodifan emas, talabdagi noaniqlikdan chiqadi.
Tezlik haqida dastlabki fikr
Ba’zan ikki algoritm bir xil natija beradi, ammo ulardan biri ko’proq qadam bajaradi. Telefon kitobida kerakli ismni boshidan boshlab qidirish bir usul; saralangan ma’lumotda bo’lib-bo’lib qidirish boshqa usul. Hozir murakkab formulani yodlash shart emas. Muhimi: ma’lumot ko’payganda qadamlar soni ham oshishini ko’rish va “bu ishni har element uchun necha marta qilaman?” deb so’rashdir.
Qisqacha xulosa
Har yangi masalada shu savollarni qayta ishlating: kirish nima, qoida nima, natija nima va chekka holat qanday boshqariladi?
- Algoritm — natijaga olib boradigan aniq qadamlar ketma-ketligi.
- Uch xossasi: aniqlik, tartiblilik, cheklanganlik (tugaydi).
- Kompyuter aniq — noaniq qadam xatoga olib keladi.
- Blok-sxema algoritmni chizadi; romb shart (ha/yo’q) ni bildiradi.
- Bir masalaning bir necha algoritmi bo’ladi; tezrog’i afzal.
Keyingi darsda kod mantig’i — o’zgaruvchi, shart, sikl va funksiya bilan algoritmni qanday yozishni ko’ramiz.