Məzmuna keç
Educora
Orta8–10-cu sinif16 dəq27 / 59

Axtarış alqoritmləri

Xətti və ikili axtarışın necə işlədiyini öyrən, onların sürətini müqayisə et və ikili axtarışın niyə nizamlanmış siyahı tələb etdiyini anla.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Xətti axtarış alqoritmini izah etmək və tətbiq etmək
  • İkili axtarışı nizamlanmış siyahıda addım-addım yerinə yetirmək
  • Hər iki üsulda lazım olan müqayisələrin sayını qiymətləndirmək

Murad 1-dən 100-ə qədər bir ədəd tutur, Aysel isə onu tapmalıdır. Hər təxmindən sonra Murad yalnız «daha böyükdür», «daha kiçikdir» və ya «tapdın» deyir. Aysel 1, 2, 3… deyə ardıcıl soruşsa, 100 cəhd lazım ola bilər. Amma o, 50-dən başlayıb hər dəfə aralığı yarıya bölsə, ədədi ən çoxu 7 cəhddə tapacaq. Bu iki yanaşma iki məşhur alqoritmdir: xətti və ikili axtarış.

Xətti axtarış

Xətti (ardıcıl) axtarışda siyahının elementləri birincidən başlayaraq bir-bir axtarılan qiymətlə müqayisə olunur. Uyğun element tapılanda axtarış dayanır; siyahının sonuna çatıb tapmasaq, deməli, belə element yoxdur.

Xətti axtarışın üstünlüyü sadəliyidir: o, istənilən siyahıda, hətta nizamlanmamış siyahıda da işləyir. Çatışmazlığı isə yavaşlığıdır: n elementli siyahıda ən pis halda n müqayisə lazımdır.

Nümunə: xətti axtarış

[7, 3, 23, 9, 15] siyahısında 23 ədədini xətti axtarışla tap.

Həllini göstər
1-ci müqayisə: 7 ≠ 23 → davam edirik.
2-ci müqayisə: 3 ≠ 23 → davam edirik.
3-cü müqayisə: 23 = 23 → tapıldı!
Element siyahıda 3-cü yerdədir (proqramlaşdırmada nömrələmə 0-dan başladığı üçün onun indeksi 2-dir). Cəmi 3 müqayisə lazım oldu.
Python
def linear_search(items, target):
    for i in range(len(items)):
        if items[i] == target:
            return i
    return -1

numbers = [7, 3, 23, 9, 15]
print(linear_search(numbers, 23))
print(linear_search(numbers, 4))
▸ Gözlənilən nəticə
2
-1
Funksiya elementin indeksini, element siyahıda yoxdursa, -1 qaytarır.
İnteraktiv
Simulyasiya yüklənir…
Xətti axtarışı addım-addım izlə: hər addımda yalnız bir element yoxlanılır.

İkili axtarış

İkili axtarış yalnız nizamlanmış (məsələn, artan sıra ilə düzülmüş) siyahıda işləyir, amma çox sürətlidir. Hər addımda axtarılan qiymət aralığın ortasındakı elementlə müqayisə edilir və siyahının yarısı birdən kənara atılır.

  1. 1
    Ortanı tap

    Axtarış aralığının ortasındakı elementi götür.

  2. 2
    Müqayisə et

    Orta element axtarılan qiymətə bərabərdirsə, element tapıldı — axtarış bitdi.

  3. 3
    Yarını at

    Axtarılan qiymət orta elementdən kiçikdirsə, axtarışı sol yarıda, böyükdürsə, sağ yarıda davam etdir.

  4. 4
    Təkrar et

    Element tapılana və ya aralıq boş qalana qədər 1–3-cü addımları təkrarla. Aralıq boşdursa, element siyahıda yoxdur.

Nümunə: ikili axtarış

Nizamlanmış [3, 8, 12, 17, 23, 31, 37, 42, 50] siyahısında 37-ni ikili axtarışla tap. Elementlərin indeksləri 0-dan 8-ə qədərdir.

Həllini göstər
1-ci addım: aralıq 0–8, orta indeks (0 + 8) : 2 = 4, element 23. 37 > 23 → sağ yarı qalır: indekslər 5–8.
2-ci addım: orta indeks (5 + 8) : 2 = 6 (tam hissə), element 37. 37 = 37 → tapıldı!
Cəmi 2 müqayisə lazım oldu. Xətti axtarış isə 7 müqayisə aparardı.
İnteraktiv
Simulyasiya yüklənir…
İkili axtarışda aralığın hər addımda necə yarıya endiyinə bax.
Python
def binary_search(items, target):
    low, high = 0, len(items) - 1
    steps = 0
    while low <= high:
        mid = (low + high) // 2
        steps += 1
        if items[mid] == target:
            return mid, steps
        elif items[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1, steps

numbers = [3, 8, 12, 17, 23, 31, 37, 42, 50]
print(binary_search(numbers, 37))
print(binary_search(numbers, 5))
▸ Gözlənilən nəticə
(6, 2)
(-1, 3)
Funksiya indeksi və müqayisələrin sayını qaytarır. 5 ədədi siyahıda yoxdur: 3 addımdan sonra aralıq boş qalır.

Hansı daha sürətlidir?

İkili axtarışda hər müqayisə siyahını iki dəfə kiçildir, ona görə siyahı 2 dəfə böyüyəndə cəmi bir müqayisə əlavə olunur. Böyük siyahılarda fərq heyrətamiz olur:

Elementlərin sayıXətti axtarışİkili axtarış
10104
1001007
1000100010
1 000 0001 000 00020
Ən pis halda müqayisələrin sayı

Əsas fikirlər

  • Xətti axtarış elementləri bir-bir yoxlayır və istənilən siyahıda işləyir.
  • n elementli siyahıda xətti axtarış ən pis halda n müqayisə aparır.
  • İkili axtarış yalnız nizamlanmış siyahıda işləyir və hər addımda aralığı yarıya bölür.
  • 1000 elementdə ikili axtarışa ən çoxu 10, milyon elementdə isə 20 müqayisə kifayətdir.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
İkili axtarış üçün hansı şərt mütləqdir?