1-bo‘lim
Algoritm nima?
Algoritm tushunchasi, uning xossalari, blok-sxema va psevdokod yordamida yozish hamda algoritmning kundalik hayotdagi o'rni.
Ushbu bo‘lim mundarijasi
Dasturlashni bilish - bu sintaksisni yodlash emas. Har qanday tilda kod yozish mumkin, lekin to'g'ri yechim topish butunlay boshqa mahorat. Aynan shu mahorat algoritmik fikrlash deb ataladi.
Algoritm - bu nima? #
Algoritm - qo'yilgan masalani yechish uchun bajariladigan aniq, chekli va tartiblangan qadamlar ketma-ketligi.
Siz har kuni algoritmlardan foydalanasiz, buni sezmasangiz ham:
| Kundalik ish | Algoritm qadamlari |
|---|---|
| Choy damlash | Suv qaynatish → choynakka choy solish → suv quyish → 5 daqiqa kutish |
| Lug'atdan so'z topish | Kitobni o'rtasidan ochish → solishtirish → kerakli yarmiga o'tish |
| Kiyimni tartiblash | Rangi bo'yicha ajratish → har guruhni joyiga qo'yish |
Uchinchi misol - bu saralash, ikkinchisi esa ikkilik qidiruv. Ikkalasini ham keyingi bo'limlarda batafsil ko'ramiz.
"Algoritm" so'zi buyuk vatandoshimiz Muhammad al-Xorazmiy nomidan kelib chiqqan. IX asrda yashagan bu olim Bag'doddagi "Donishmandlik uyi"da ishlagan. Uning kitobi lotin tiliga tarjima qilinganda muallif nomi Algoritmi deb yozilgan va shu so'z butun dunyoga tarqalgan. "Algebra" atamasi ham uning "Al-kitob al-muxtasar fi hisob al-jabr va-l-muqobala" asaridan olingan.
Muhammad al-Xorazmiy
"Algoritm" atamasining asoschisi. Xorazmda tug'ilgan matematik, astronom va geograf. O'nlik sanoq sistemasi va nol tushunchasini Yevropaga tanishtirgan, algebra fanining asoschilaridan biri hisoblanadi. Uning ishlari zamonaviy kompyuter fanining poydevorida turadi.
Algoritmning majburiy xossalari #
Har qanday qadamlar ketma-ketligi algoritm bo'la olmaydi. Beshta shart bajarilishi kerak:
| Xossa | Ma'nosi | Buzilganda nima bo'ladi |
|---|---|---|
| Aniqlik | Har bir qadam bir xil tushuniladi | "Bir oz tuz soling" - qancha? |
| Chekililik | Chekli qadamdan keyin tugaydi | Cheksiz sikl - dastur qotadi |
| Kirish | Nol yoki undan ortiq kirish qiymati | - |
| Chiqish | Kamida bitta natija bo'lishi shart | Natijasiz algoritm foydasiz |
| Samaradorlik | Har bir qadam bajarilishi mumkin | "Eng katta tub sonni top" - imkonsiz |
Kompyuter "taxminan" degan tushunchani bilmaydi. "Ro'yxatni tartibla" - bu algoritm emas. "Ro'yxatning har bir elementini keyingisi bilan solishtir, agar kattaroq bo'lsa - joyini almashtir, bu jarayonni hech qanday almashtirish bo'lmagunicha takrorla" - bu algoritm.
Algoritmni yozishning uch usuli #
1. Oddiy so'zlar bilan #
Ro'yxatdagi eng katta sonni topish uchun: birinchi sonni eng katta deb qabul qilamiz. So'ng qolgan har bir sonni u bilan solishtiramiz. Agar kattarog'i uchrasa, eng kattani yangilaymiz. Ro'yxat tugagach, javob tayyor.
2. Psevdokod #
Psevdokod - hech qanday tilga bog'liq bo'lmagan, lekin kodga o'xshash yozuv:
ENG_KATTANI_TOP(royxat):
agar royxat bo'sh bo'lsa:
qaytar "xato"
eng_katta <- royxat[0]
har bir element uchun royxat ichida:
agar element > eng_katta:
eng_katta <- element
qaytar eng_katta
3. Blok-sxema #
Blok-sxema belgilari #
| Shakl | Nomi | Ma'nosi |
|---|---|---|
| Oval | Terminator | Boshlanish yoki tugash |
| To'rtburchak | Jarayon | Hisoblash, qiymat berish |
| Romb | Qaror | Shart tekshirish |
| Parallelogramm | Ma'lumot | Kirish yoki chiqish |
| Strelka | Oqim | Bajarilish yo'nalishi |
Nihoyat - kod #
def eng_kattani_top(royxat):
"""Ro'yxatdagi eng katta sonni qaytaradi."""
if not royxat:
raise ValueError("Ro'yxat bo'sh bo'lmasligi kerak")
eng_katta = royxat[0]
for element in royxat[1:]:
if element > eng_katta:
eng_katta = element
return eng_katta
baholar = [85, 92, 78, 95, 88]
print(f"Eng yuqori baho: {eng_kattani_top(baholar)}")
Eng yuqori baho: 95
Tajribali dasturchilar kodni darhol yozmaydi. Avval masalani qog'ozda yoki psevdokodda yechadi. Bu ancha tez usul: qog'ozdagi xatoni o'chirish oson, ming satrlik koddagi mantiqiy xatoni topish esa qiyin.
Bitta masala - bir nechta algoritm #
Bu eng muhim tushunchalardan biri. Bir xil natijaga turli yo'llar bilan erishish mumkin va ular bir xil samarali emas.
1 dan n gacha bo'lgan sonlar yig'indisini topamiz:
# 1-usul: sikl bilan
def yigindi_sikl(n):
natija = 0
for son in range(1, n + 1):
natija += son
return natija
# 2-usul: Gauss formulasi bilan
def yigindi_formula(n):
return n * (n + 1) // 2
print(yigindi_sikl(100))
print(yigindi_formula(100))
5050
5050
Natija bir xil, lekin farq juda katta:
| n | 1-usul (qadamlar) | 2-usul (qadamlar) |
|---|---|---|
| 100 | 100 | 1 |
| 1 000 000 | 1 000 000 | 1 |
| 1 000 000 000 | 1 000 000 000 | 1 |
Millionlab foydalanuvchisi bor ilovada sekin algoritm serverga bir necha barobar ko'proq yuk beradi. Amalda bu qo'shimcha xarajat, sekin ishlaydigan ilova va ketib qolgan mijozlar demakdir. Aynan shuning uchun IT kompaniyalar suhbatda algoritm bo'yicha savol beradi.
Algoritm turlari #
| Turi | G'oyasi | Misol |
|---|---|---|
| To'liq izlash | Barcha variantni sinab ko'rish | Parolni tanlash |
| Bo'l va hukmronlik qil | Masalani bo'laklarga bo'lish | Merge sort |
| Ochko'z | Har qadamda eng yaxshi tanlov | Pul maydalash |
| Dinamik dasturlash | Natijalarni eslab qolish | Fibonachchi |
| Orqaga qaytish | Yo'l tanlash, kerak bo'lsa qaytish | Sudoku |
Ularning har birini alohida bo'limlarda ko'rib chiqamiz.
Kodsiz, faqat qog'ozda ishlang:
- Talabalar ro'yxatidan o'rtacha bahoni topish algoritmini psevdokodda yozing.
- Uni blok-sxema ko'rinishida chizing.
- Algoritmingiz ro'yxat bo'sh bo'lgan holatni to'g'ri boshqaradimi? Tekshiring.
- So'ng uni Python kodiga aylantiring va sinab ko'ring.
Xulosa #
- Algoritm - masalani yechishning aniq, chekli va tartiblangan qadamlar ketma-ketligi.
- Algoritm aniq, chekli, natija beradigan va bajarilishi mumkin bo'lishi shart.
- Uni psevdokod yoki blok-sxema orqali tilga bog'liq bo'lmagan holda yozish mumkin.
- Bitta masalaning bir nechta yechimi bo'ladi va ular turli tezlikda ishlaydi.
- "Algoritm" atamasi al-Xorazmiy nomidan kelib chiqqan.
Keyingi bo'limda algoritmlarni bir-biri bilan qanday solishtirishni - Big-O notatsiyasini o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.