IlmHamroh
JavaScript Full-stack/3-qism. Dasturchi asboblari va fikrlash1/21-dars12 daqiqa
Mundarija (31)

Algoritm nima va yaxshi algoritm qanday bo'ladi

Qisqacha: Algoritm — maqsadga yetish uchun bajariladigan aniq qadamlar ketma-ketligi. Choy damlash retsepti ham, bankomatdan pul yechish tartibi ham algoritm. Yaxshi algoritm aniq, albatta tugaydi, bir xil kirishga bir xil natija beradi va ortiqcha ish qilmaydi.

Bu darsda

  • Algoritm nima ekanini kundalik misollar orqali tushuntira olasiz.
  • "Algoritm" so'zi Al-Xorazmiy nomidan kelib chiqqanini bilasiz.
  • Har qanday algoritmda kirish (input) va chiqish (output) nima ekanini ajrata olasiz.
  • Yaxshi algoritmning 5 belgisini bilasiz va buzilgan joyini topa olasiz.
  • Oddiy vazifa uchun o'zingiz aniq algoritm yoza olasiz.

Oldin bilishingiz kerak: Kompyuter nima: apparat va dastur. Dasturlash tilini bilish shart emas — bu qismda hali birorta ham til o'rganmaymiz.

1. Nega bu kerak?

Oldingi qismlarda kompyuterga terminal orqali buyruq berdingiz, keyin brauzer manzilni yozganingizdan sahifa chizilguncha qanday ish qilishini ko'rdingiz. Endi 03-qismda dasturchining ikki quroliga o'tamiz: fikrlash usuli (algoritm) va ish asboblari (muharrir, kengaytmalar, sun'iy intellekt yordamchilari). Shell skript darsida esa bir nechta buyruqni faylga yozib, ketma-ket bajartirdingiz. Aslida o'sha skript — kichik algoritm edi.

Ko'pchilik dasturlashni "tilning qoidalarini yodlash" deb o'ylaydi. Bu to'liq to'g'ri emas. Dasturlash tili — fikrni kompyuterga yetkazadigan vosita, xolos. Rassomga eng qimmat mo'yqalam bersangiz ham, u o'z-o'zidan yaxshi rasm chizib qo'ymaydi.

Dasturchining asosiy ishi — muammoni qadamlarga ajratish. Qadamlar to'g'ri bo'lsa, ularni JavaScript'da ham, Python'da ham yozish mumkin. Shuning uchun dasturlash tilidan oldin algoritmni o'rganamiz.

2. Algoritm nima?

2.1 Kundalik misol: choy damlash

Mehmon keldi, choy damlashingiz kerak. Siz buni o'ylamasdan, shu tartibda qilasiz:

text
1. Choynakni chayib oling.
2. Choynakka 1 choy qoshiq quruq choy soling.
3. Choynakka qaynagan suv quying.
4. 5 daqiqa kuting.
5. Choyni piyolaga quying.

Bu — algoritm. Unda har bir qadam aniq, tartib bilan keladi va oxirida natija bor: tayyor choy.

Endi ta'rifni aytsak bo'ladi. Algoritm (algorithm) — biror maqsadga yetish uchun bajariladigan aniq qadamlar ketma-ketligi. Retsept bunga eng yaxshi o'xshatish: masalliq olinadi, qadamlar bajariladi, taom tayyor bo'ladi.

Siz har kuni o'nlab algoritm bajarasiz: nonushta tayyorlash, avtobusda ishga borish, Click orqali telefon hisobini to'ldirish. Kompyuter ham aynan shunday ishlaydi. Faqat unga qadamlarni biz yozib berishimiz kerak.

2.2 "Algoritm" so'zi qayerdan kelgan?

Bu so'z vatandoshimiz Muhammad ibn Muso al-Xorazmiy nomidan kelib chiqqan. U IX asrda (taxminan 780–850-yillar) yashagan va Bag'doddagi "Bayt ul-Hikma" ilm markazida ishlagan.

Al-Xorazmiy hind raqamlari bilan hisoblash haqida kitob yozgan. XII asrda bu kitob lotin tiliga tarjima qilindi va "Algoritmi de numero Indorum" deb nomlandi. "Algoritmi" — Al-Xorazmiy ismining lotincha shakli.

Yevropaliklar bu kitobdan qadamma-qadam hisoblash qoidalarini o'rgangan. Vaqt o'tib, har qanday aniq qoidalar ketma-ketligini "algoritm" deb atay boshlashgan. Yana bir qiziq fakt: "algebra" so'zi ham uning "al-Jabr" degan kitobi nomidan olingan.

2.3 Tartib muhim

Bankomatdan pul yechishni ko'raylik:

text
1. Kartani bankomatga soling.
2. PIN-kodni kiriting.
3. Agar PIN-kod noto'g'ri bo'lsa — xabar chiqaring va to'xtang.
4. Kerakli summani tanlang.
5. Agar hisobda pul yetmasa — rad eting va to'xtang.
6. Kartani qaytaring.
7. Naqd pulni bering.

Qadamlarni aralashtirib bo'lmaydi. Kartani solmasdan PIN-kod kiritib bo'lmaydi. PIN-kodni tekshirmasdan pul berish esa xavfli.

E'tibor bering: bu algoritmda "agar ... bo'lsa" degan qadamlar bor. Ya'ni algoritm faqat to'g'ri chiziq emas — u vaziyatga qarab boshqa yo'lga ham buriladi. Buni pseudokod darsida "shart" deb ataymiz.

Tekshirib ko'ring: Bankomat algoritmida 6-qadam (kartani qaytarish) nega 7-qadamdan (pulni berish) oldin turibdi? Buning qanday foydasi bor?

Javob

Odamlar pulni olgach, ko'pincha shoshib ketib qoladi va kartani unutadi. Shuning uchun ko'p bankomatlar avval kartani qaytaradi, keyin pulni beradi. Pulni olish uchun odam baribir kutadi — demak kartani ham olib ketadi. Qadamlar tartibini to'g'ri tanlash — algoritm tuzuvchining ishi.

3. Kirish va chiqish

3.1 Algoritm nimani oladi va nima beradi?

Har bir algoritmga nimadir beriladi va undan nimadir olinadi:

  • Kirish (input) — algoritm ishlashi uchun beriladigan ma'lumot. Choy damlashda bu suv va quruq choy.
  • Chiqish (output) — algoritm ishining natijasi. Choy damlashda bu tayyor choy.
  • O'rtadagi qadamlar esa jarayon deyiladi.
flowchart LR
    A[/Kirish: suv, choy/] --> B[Algoritm: qadamlar]
    B --> C[/Chiqish: tayyor choy/]

Kompyuterdagi misollar:

Algoritm Kirish Chiqish
Kalkulyatorda qo'shish 2 va 3 5
Xarita ilovasida yo'l topish Qayerdan, qayerga Eng qisqa yo'l
Telegram'da qidirish "Malika" so'zi Shu ismli kontaktlar
Parol tekshirish Kiritilgan parol "Kirish mumkin" yoki "Xato"

3.2 Kirishsiz algoritm bo'ladimi?

Bo'ladi. "1 dan 10 gacha sanab, ekranga chiqar" algoritmiga hech narsa berish shart emas. Lekin chiqishsiz algoritm ma'nosiz: natija bermasa, u kimga kerak?

Qoida shunday: algoritmda kirish bo'lmasligi mumkin, lekin kamida bitta chiqish bo'lishi shart.

Tekshirib ko'ring: "Taksi narxini hisoblash" algoritmining kirishi va chiqishi nima?

Javob

Kirish: yurilgan masofa (km), ehtimol kutish vaqti va tarif. Chiqish: to'lanadigan summa (so'mda). Kirishni aniq aytish muhim: masofasiz narxni hisoblab bo'lmaydi.

4. Yaxshi algoritmning 5 belgisi

Har qanday qadamlar ro'yxati ham yaxshi algoritm bo'lavermaydi. Keling, beshta belgini birma-bir ko'ramiz.

4.1 Aniqlik: har qadam bir xil tushuniladi

Onangizga "choyga ozgina shakar sol" desangiz, u o'z tajribasiga qarab bir qoshiq soladi. Odam bo'shliqni o'zi to'ldiradi.

Kompyuterda tajriba yo'q. U "ozgina" so'zini tushunmaydi va taxmin ham qilmaydi. Unga "1 choy qoshiq" yoki "5 gramm" deb aniq aytish kerak.

  • "Suvni yaxshilab qaynat."
  • "Suvni 100 °C ga yetguncha qizdir."

4.2 Cheklilik: algoritm albatta tugaydi

Shampun idishida shunday yozuv bor deylik: "Sochga surting. Chayqang. Takrorlang." Agar buni kompyuter bajarsa, u umrbod soch yuvadi. Chunki "qachon to'xtash" aytilmagan.

  • "Chayqang. Takrorlang."
  • "Chayqang. Yana 1 marta takrorlang va to'xtang."

Hech qachon tugamaydigan takror cheksiz sikl (infinite loop) deyiladi. Bunday dastur qotib qoladi va kompyuter resursini behuda yeydi.

4.3 Bir xil kirish — bir xil natija

Kalkulyatorga bugun ham, ertaga ham "2 + 3" bersangiz, u 5 chiqaradi. Bu xususiyat determinizm deyiladi: bir xil kirish har doim bir xil chiqish beradi.

"Chiroyli kiyim tanla" degan qadam esa har safar boshqa natija beradi. Bunday algoritmni tekshirib ham, ishonib ham bo'lmaydi.

Maslahat: Ba'zi dasturlar ataylab tasodifiy (random) natija beradi: lotereya, o'yinlarda zar tashlash. Bu — alohida holat, uni keyinroq ko'rasiz. Oddiy hisob-kitobda esa natija doim bir xil bo'lishi kerak.

4.4 Kirish va chiqish aniq

Algoritmni yozishdan oldin ikki savolga javob bering: "Menga nima beriladi?" va "Men nima qaytarishim kerak?"

"Oylik maoshni hisobla" degan vazifa noaniq. Kirish nima: soatbay stavka va ishlangan soatlarmi? Soliqni ayirish kerakmi? Chiqish aniq summami yoki chekmi? Bu savollarga javob bo'lmasa, algoritm yozib bo'lmaydi.

4.5 Samaradorlik: ortiqcha ish qilmaydi

1000 sahifali qog'oz lug'atdan "nok" so'zini qidiryapsiz. Ikki yo'l bor:

  1. Birinchi sahifadan boshlab har sahifani ko'rib chiqish. Eng yomon holatda 1000 ta sahifa.
  2. Lug'atni o'rtasidan ochish. So'z oldinroqda bo'lsa — chap yarmiga, keyinroqda bo'lsa — o'ng yarmiga o'tish. Har safar qolgan qism ikki barobar kichrayadi.

Ikkinchi yo'lda sahifalar 1000 → 500 → 250 → 125 → ... bo'lib qisqaradi. Taxminan 10 qadamda kerakli sahifaga yetasiz. Ikkala algoritm ham to'g'ri natija beradi, lekin biri 100 barobar tezroq.

Samaradorlik — kam vaqt va kam xotira sarflash. Algoritm tezligini o'lchashni Big-O darsida chuqur o'rganamiz.

4.6 Beshta belgi bir jadvalda

Belgi Savol Buzilsa
Aniqlik Har qadam bir ma'noli? Kompyuter tushunmaydi
Cheklilik Albatta tugaydi? Dastur qotib qoladi
Determinizm Bir xil kirish — bir xil natija? Natijaga ishonib bo'lmaydi
Kirish/chiqish Nima beriladi, nima olinadi? Nima qilish noma'lum
Samaradorlik Ortiqcha ish yo'qmi? Sekin ishlaydi

Tekshirib ko'ring: "Telefoningiz zaryadi to'lguncha kuting, keyin ishga keting" — bu qadam qaysi belgini buzishi mumkin?

Javob

Cheklilikni. Agar zaryadlovchi ishlamasa, zaryad hech qachon to'lmaydi — siz umrbod kutasiz. Yaxshi algoritmda "eng ko'pi bilan 1 soat kuting" kabi chegara bo'ladi.

5. Kompyuterga algoritm yozish

5.1 Nega hamma narsani batafsil yozish kerak?

Tasavvur qiling: robotga "non ustiga sariyog' sur" dedingiz. Robot butun nonni sariyog' qutisi ustiga qo'yadi. Chunki siz "nonni kesib ol", "pichoq bilan sariyog' ol" deb aytmadingiz.

Kompyuter aynan shu robotga o'xshaydi. U siz yozgan narsani so'zma-so'z bajaradi — na ko'p, na kam. Shuning uchun kompyuterga yoziladigan algoritm odamga yoziladiganidan ancha batafsil bo'ladi.

5.2 To'liq yechilgan misol: ikki narxdan arzonini tanlash

Vazifa: bozorda ikki sotuvchi bir xil kartoshkani sotyapti. Qaysi biridan olish arzonroq?

Avval kirish va chiqishni aniqlaymiz:

  • Kirish: birinchi narx va ikkinchi narx (so'mda).
  • Chiqish: arzonroq narx.

Algoritm:

text
1. Birinchi narxni oling.
2. Ikkinchi narxni oling.
3. Agar birinchi narx ikkinchisidan kichik bo'lsa —
   birinchi narxni chiqaring.
4. Aks holda — ikkinchi narxni chiqaring.
5. To'xtang.

Qo'lda tekshiramiz. Kirish: 6 000 va 5 500. 3-qadam: 6 000 kichikmi 5 500 dan? Yo'q. Demak 4-qadam ishlaydi va natija 5 500.

Endi 5 belgini tekshiramiz. Har qadam aniq. Algoritm 5 qadamda tugaydi. Bir xil narxlar har doim bir xil javob beradi. Kirish va chiqish aytilgan. Ortiqcha qadam yo'q.

5.3 Qisman yechilgan misol

Endi siz ham qatnashasiz. Pastdagi algoritm uchta narxdan eng arzonini topadi:

text
1. Birinchi narxni "eng arzon" deb eslab qoling.
2. Agar ikkinchi narx "eng arzon"dan kichik bo'lsa —
   ikkinchi narxni "eng arzon" deb eslab qoling.
3. Agar uchinchi narx "eng arzon"dan kichik bo'lsa —
   uchinchi narxni "eng arzon" deb eslab qoling.
4. "Eng arzon"ni chiqaring.

Narxlar: 7 000, 6 500 va 8 000. 1-qadamdan keyin "eng arzon" = 7 000. 2-qadamdan keyin "eng arzon" = 6 500. 3-qadamda 8 000 kichik emas, hech narsa o'zgarmaydi.

Natija qaysi son? Minglikni bo'sh joysiz yozing:

E'tibor bering: bu yerda "eslab qolish" g'oyasi paydo bo'ldi. Kompyuter qiymatni nom bilan eslab turadi. Buni keyingi darslarda o'zgaruvchi deb ataymiz.

6. Ko'p uchraydigan xatolar

6.1 Noaniq so'zlar

"Ozgina", "tezroq", "yaxshilab", "kerak bo'lsa" — bular odam uchun tushunarli, kompyuter uchun esa bo'sh gap. Algoritm yozgach, har bir sifatga qarang va o'zingizdan so'rang: "Aniq qancha?"

6.2 To'xtash sharti yo'q

"Takrorlang", "kuting", "qidiring" degan har bir qadam yonida "qachongacha?" degan javob bo'lsin. Aks holda algoritm cheksiz davom etishi mumkin.

6.3 Qadamni tashlab ketish

Odam "choynakni oling" deganda uni avval chayishni o'zi eslaydi. Algoritm esa eslamaydi. Yozgan algoritmingizni boshqa odamga bering va faqat yozilganini bajarishini so'rang. U qayerda to'xtab qolsa — o'sha yerda qadam yetishmayapti.

6.4 Faqat oddiy holatni o'ylash

"Ikki narxdan arzonini tanlash" algoritmida narxlar teng bo'lsa-chi? Bizning algoritm 4-qadamga o'tadi va ikkinchi narxni chiqaradi — bu to'g'ri, chunki narx baribir bir xil. Lekin har doim ham bunday omad bo'lmaydi. Bunday "chekka" holatlarni chegaraviy holatlar darsida alohida o'rganamiz.

7. Mashqlar

1-mashq (oson): Telefon hisobini to'ldirish

Click yoki Payme ilovasi orqali telefon hisobingizni 10 000 so'mga to'ldirish algoritmini 6–8 ta aniq qadamda yozing. Kirish va chiqishni ham ko'rsating.

Yechim

Kirish: telefon raqami va summa. Chiqish: to'ldirilgan hisob va to'lov cheki.

text
1. Telefonda to'lov ilovasini oching.
2. "To'lovlar" bo'limiga kiring.
3. "Mobil aloqa" ni tanlang.
4. Operatoringizni tanlang.
5. Telefon raqamini kiriting.
6. Summaga 10 000 yozing.
7. "To'lash" tugmasini bosing va SMS-kodni kiriting.
8. Chekni tekshiring va to'xtang.

Sizning qadamlaringiz boshqacha bo'lishi mumkin — bu normal. Asosiysi: har qadam aniq, tartib to'g'ri va oxirida natija bor.

2-mashq (o'rta): Buzilgan algoritmni tuzating

Quyidagi osh damlash algoritmida 3 ta muammo bor. Har biri qaysi belgini buzganini ayting va qadamni tuzating.

text
1. Qozonga yog' quying.
2. Go'shtni ozgina qovuring.
3. Sabzi soling.
4. Guruch pishguncha kuting.
5. Kerak bo'lsa, tuz soling.
Yechim
  1. "Ozgina qovuring" — aniqlik buzilgan. Tuzatish: "Go'shtni 10 daqiqa qovuring."
  2. "Guruch pishguncha kuting" — cheklilik xavf ostida: qachon pishganini qanday bilamiz? Tuzatish: "Suv bug'lanib ketgach, qopqoqni yopib, 25 daqiqa damlang."
  3. "Kerak bo'lsa, tuz soling" — aniqlik va determinizm buzilgan: kim, qachon hal qiladi? Tuzatish: "Zirvakka 1 osh qoshiq tuz soling."

Bundan tashqari, guruch umuman solinmagan — qadam tashlab ketilgan! Buni ham topgan bo'lsangiz — zo'r.

3-mashq (qiyin): Imtihon bahosi

Talabaning bali (0 dan 100 gacha) berilgan. Shu qoida bo'yicha baho chiqaradigan algoritm yozing:

  • 86–100 — "A'lo"
  • 71–85 — "Yaxshi"
  • 55–70 — "Qoniqarli"
  • 0–54 — "Qoniqarsiz"

So'ng algoritmni 90, 71, 70 va 54 ballar bilan qo'lda tekshiring. Ishora: "agar ... bo'lsa" qadamlarini yuqoridan pastga qo'ying va birinchi mos kelganida to'xtang — xuddi bankomat misolidagidek.

Yechim
text
1. Ballni oling.
2. Agar ball 86 yoki undan katta bo'lsa — "A'lo" chiqaring
   va to'xtang.
3. Agar ball 71 yoki undan katta bo'lsa — "Yaxshi" chiqaring
   va to'xtang.
4. Agar ball 55 yoki undan katta bo'lsa — "Qoniqarli"
   chiqaring va to'xtang.
5. "Qoniqarsiz" chiqaring va to'xtang.

Tekshiruv:

  • 90 → 2-qadamda to'xtaydi → "A'lo".
  • 71 → 2-qadam mos emas, 3-qadamda to'xtaydi → "Yaxshi".
  • 70 → 4-qadamda to'xtaydi → "Qoniqarli".
  • 54 → birortasi mos emas, 5-qadam → "Qoniqarsiz".

Nega 3-qadamda "71 dan 85 gacha" deb yozmadik? Chunki 86 va undan yuqori ballar 2-qadamda allaqachon to'xtagan. 3-qadamga faqat 85 va undan past ball yetib keladi. Qadamlar tartibi ishni yengillashtiradi.

71 va 70 ni ataylab tekshirdik: xato ko'pincha aynan chegarada bo'ladi.

8. Real ishda

Siz ishlatadigan har bir ilova ichida algoritmlar ishlaydi:

  • Xarita ilovalari ikki nuqta orasidagi eng qisqa yo'lni topadi.
  • Telegram xabarlarni vaqt bo'yicha tartiblaydi va qidiruv natijalarini chiqaradi.
  • Bank ilovalari kredit berish-bermaslikni qoidalar asosida hal qiladi.
  • Internet-do'konlar sizga "shu mahsulotni ham ko'ring" deb tavsiya beradi.

Ishga kirishda "algoritmik masala" albatta beriladi: sizga vazifa aytiladi va yechimni ovoz chiqarib tushuntirishingiz so'raladi. Buni live coding intervyu darsida ko'rasiz. Unga tayyorgarlik aynan shu darsdan boshlanadi.

Xulosa

  • Algoritm — maqsadga yetish uchun aniq qadamlar ketma-ketligi.
  • "Algoritm" so'zi Al-Xorazmiy nomining lotincha shaklidan kelib chiqqan.
  • Algoritmda kirish bo'lmasligi mumkin, lekin chiqish albatta bo'ladi.
  • Yaxshi algoritm: aniq, chekli, deterministik, kirish-chiqishi aniq va samarali.
  • Kompyuter yozilganini so'zma-so'z bajaradi — shuning uchun qadamlar batafsil bo'lishi kerak.

Keyingi dars: Kompyutercha fikrlash — katta va qo'rqinchli muammoni kichik, yechiladigan bo'laklarga ajratishni o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Algoritm nima va yaxshi algoritm qanday bo'ladi — IlmHamroh