DSA chiziqli qidiruv
Chiziqli qidiruv
Chiziqli qidiruv (Linear Search) algoritmi massiv bo‘ylab qidiradi va izlanayotgan qiymatning indeksini qaytaradi.
Tezlik:
Joriy qiymat: {{ currVal }}
{{ msgDone }}Chiziqli qidiruv algoritmi qanday ishlashini ko‘rish uchun yuqoridagi simulyatsiyani ishga tushiring.
Qiymat topilmaganda nima sodir bo‘lishini ko‘rish uchun 5 qiymatini topishga urinib ko‘ring.
Bu algoritm juda oddiy, uni tushunish va amalga oshirish oson.
Agar massiv allaqachon saralangan bo‘lsa, keyingi sahifada ko‘rib chiqadigan ancha tezroq ikkilik qidiruv (Binary Search) algoritmidan foydalangan ma’qul.
Saralash algoritmlari va qidirish algoritmlari o‘rtasidagi katta farq shundaki, saralash algoritmlari massivni o‘zgartiradi, qidirish algoritmlari esa massivni o‘zgarishsiz qoldiradi.
Qanday ishlaydi:
- Massivni boshidan boshlab qiymatma-qiymat ko‘rib chiqing.
- Har bir qiymatni biz izlayotgan qiymatga tengligini tekshirish uchun taqqoslang.
- Agar qiymat topilsa, shu qiymatning indeksini qaytaring.
- Agar massiv oxiriga yetib borilsa-yu, qiymat topilmasa, qiymat topilmaganini bildirish uchun -1 ni qaytaring.
Qo‘lda bajarib ko‘rish
Chiziqli qidiruvni dasturlash tilida amalda amalga oshirishdan oldin, u qanday ishlashini yanada yaxshiroq tushunib olish uchun qidiruvni qo‘lda bajarib ko‘raylik. Biz 11 qiymatini qidiramiz.
1-qadam: Tasodifiy qiymatlardan iborat massivdan boshlaymiz.
[ 12, 8, 9, 11, 5, 11]
2-qadam: Massivdagi birinchi qiymatni ko‘rib chiqamiz: u 11 ga tengmi?
[ 12, 8, 9, 11, 5, 11]
3-qadam: 1 indeksidagi keyingi qiymatga o‘tamiz va teng yoki teng emasligini bilish uchun uni 11 bilan taqqoslaymiz.
[ 12, 8, 9, 11, 5, 11]
4-qadam: 2 indeksidagi keyingi qiymatni tekshiramiz.
[ 12, 8, 9, 11, 5, 11]
5-qadam: 3 indeksidagi keyingi qiymatga o‘tamiz. U 11 ga tengmi?
[ 12, 8, 9, 11, 5, 11]
Topdik!
11 qiymati 3 indeksida topildi.
3 indeks pozitsiyasi qaytariladi.
Chiziqli qidiruv yakunlandi.
Yuqoridagi qadamlarni animatsiyada ko‘rish uchun quyidagi simulyatsiyani ishga tushiring:
Qo‘lda bajarib ko‘rish: nima sodir bo‘ldi?
Bu algoritm haqiqatan ham juda oddiy.
Massiv boshidan boshlab har bir qiymat biz topmoqchi bo‘lgan qiymat — 11 ga teng yoki teng emasligi tekshiriladi.
Qiymat topilganda qidiruv to‘xtatiladi va qiymat topilgan indeks qaytariladi.
Agar massiv bo‘ylab to‘liq qidirilib, qiymat topilmasa, -1 qaytariladi.
Chiziqli qidiruvni amalga oshirish
Chiziqli qidiruv algoritmini amalga oshirish uchun bizga quyidagilar kerak:
- Qidiruv olib boriladigan qiymatlarga ega massiv.
- Qidiriladigan maqsadli qiymat.
- Massiv bo‘ylab boshidan oxirigacha o‘tadigan sikl.
- Joriy qiymatni maqsadli qiymat bilan taqqoslaydigan va maqsadli qiymat topilsa, joriy indeksni qaytaradigan if operatori.
- Sikldan keyin -1 ni qaytaring, chunki bu nuqtada maqsadli qiymat topilmaganini bilamiz.
Chiziqli qidiruv uchun natijaviy kod quyidagicha ko‘rinadi:
Misol
def linearSearch(arr, targetVal):
for i in range(len(arr)):
if arr[i] == targetVal:
return i
return -1
arr = [3, 7, 2, 9, 5]
targetVal = 9
result = linearSearch(arr, targetVal)
if result != -1:
print("Value",targetVal,"found at index",result)
else:
print("Value",targetVal,"not found")
O‘zingiz sinab ko‘ring »
Chiziqli qidiruvning vaqt murakkabligi
Vaqt murakkabligi nima ekanligi haqida umumiy tushuntirish uchun ushbu sahifaga tashrif buyuring.
Insertion Sort vaqt murakkabligi haqida yanada chuqurroq va batafsil tushuntirish uchun ushbu sahifaga tashrif buyuring.
Agar chiziqli qidiruv \(n\) ta qiymatli massivda maqsadli qiymatni massivning birinchi qiymati sifatida topsa, faqat bitta taqqoslash kerak bo‘ladi.
Ammo agar chiziqli qidiruv maqsadli qiymatni topmasdan \(n\) ta qiymatli butun massiv bo‘ylab o‘tib chiqsa, \(n\) ta taqqoslash kerak bo‘ladi.
Demak, chiziqli qidiruvning vaqt murakkabligi
\[ O(n) \]
Agar chiziqli qidiruvga \(n\) ta qiymatli massivda qiymatni topish uchun qancha vaqt kerakligini chizsak, quyidagi grafikni olamiz:
Quyidagi simulyatsiyani massivdagi qiymatlarning turli sonlari uchun ishga tushiring va chiziqli qidiruvga \(n\) ta qiymatli massivda qiymatni topish uchun qancha taqqoslash kerakligini ko‘ring:
{{ this.userX }}
Amallar: {{ operations }}
Topilmadi!
Yuqoridagi simulyatsiyada "Tasodifiy", "Kamayish tartibida" yoki "O‘sish tartibida" variantini tanlash chiziqli qidiruv tezligiga hech qanday ta’sir qilmaydi.
DSA mashqlari
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
