1-bo‘lim

Algoritm nima?

Algoritm tushunchasi, uning xossalari, blok-sxema va psevdokod yordamida yozish hamda algoritmning kundalik hayotdagi o'rni.

🕑 8 daqiqa o‘qish 📄 864 so‘z 👁 15 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Algoritm - bu nima?
  2. Algoritmning majburiy xossalari
  3. Algoritmni yozishning uch usuli
  4. 1. Oddiy so'zlar bilan
  5. 2. Psevdokod
  6. 3. Blok-sxema
  7. Blok-sxema belgilari
  8. Nihoyat - kod
  9. Bitta masala - bir nechta algoritm
  10. Algoritm turlari
  11. Xulosa

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 ishAlgoritm qadamlari
Choy damlashSuv qaynatish → choynakka choy solish → suv quyish → 5 daqiqa kutish
Lug'atdan so'z topishKitobni o'rtasidan ochish → solishtirish → kerakli yarmiga o'tish
Kiyimni tartiblashRangi bo'yicha ajratish → har guruhni joyiga qo'yish

Uchinchi misol - bu saralash, ikkinchisi esa ikkilik qidiruv. Ikkalasini ham keyingi bo'limlarda batafsil ko'ramiz.

Nom qayerdan kelgan?

"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.

783-850

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:

XossaMa'nosiBuzilganda nima bo'ladi
AniqlikHar bir qadam bir xil tushuniladi"Bir oz tuz soling" - qancha?
ChekililikChekli qadamdan keyin tugaydiCheksiz sikl - dastur qotadi
KirishNol yoki undan ortiq kirish qiymati-
ChiqishKamida bitta natija bo'lishi shartNatijasiz algoritm foydasiz
SamaradorlikHar bir qadam bajarilishi mumkin"Eng katta tub sonni top" - imkonsiz
Aniqlik nima uchun muhim?

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:

Natija
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 #

Boshlanish royxat ni o'qish eng_katta = royxat[0] yana element bormi? yo'q ha element > eng_katta? ha eng_katta = element yo'q eng_katta ni qaytar
Blok-sxemada: oval - boshlanish/tugash, to'rtburchak - amal, romb - shart

Blok-sxema belgilari #

ShaklNomiMa'nosi
OvalTerminatorBoshlanish yoki tugash
To'rtburchakJarayonHisoblash, qiymat berish
RombQarorShart tekshirish
ParallelogrammMa'lumotKirish yoki chiqish
StrelkaOqimBajarilish yo'nalishi

Nihoyat - kod #

Python
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)}")
Natija
Eng yuqori baho: 95
Avval fikrlang, keyin yozing

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:

Python
# 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))
Natija
5050
5050

Natija bir xil, lekin farq juda katta:

n1-usul (qadamlar)2-usul (qadamlar)
1001001
1 000 0001 000 0001
1 000 000 0001 000 000 0001
qadamlar n 1-usul: sikl n ta qadam 2-usul: formula har doim 1 ta qadam n oshgani sari farq keskin kattalashadi
Bir xil masalaning ikki yechimi - butunlay boshqa samaradorlik
Bu shunchaki nazariya emas

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 #

TuriG'oyasiMisol
To'liq izlashBarcha variantni sinab ko'rishParolni tanlash
Bo'l va hukmronlik qilMasalani bo'laklarga bo'lishMerge sort
Ochko'zHar qadamda eng yaxshi tanlovPul maydalash
Dinamik dasturlashNatijalarni eslab qolishFibonachchi
Orqaga qaytishYo'l tanlash, kerak bo'lsa qaytishSudoku

Ularning har birini alohida bo'limlarda ko'rib chiqamiz.

Amaliy topshiriq

Kodsiz, faqat qog'ozda ishlang:

  1. Talabalar ro'yxatidan o'rtacha bahoni topish algoritmini psevdokodda yozing.
  2. Uni blok-sxema ko'rinishida chizing.
  3. Algoritmingiz ro'yxat bo'sh bo'lgan holatni to'g'ri boshqaradimi? Tekshiring.
  4. 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.

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.