Doğrusal Arama
Elemanları baştan sona tek tek kontrol eden en basit arama yöntemi.
#Nasıl çalışır?
Doğrusal arama (linear search), aranan değeri bulmak için dizinin başından başlar ve elemanları tek tek kontrol eder. Bulursa sırasını döndürür, sona kadar bulamazsa "yok" der.
En basit arama yöntemidir ve verinin sıralı olmasını gerektirmez. Dizi, bağlı liste ya da dosya satırları gibi sırayla gezilebilen her veride çalışır.
Bedeli ise süredir: en kötü durumda (değer sonda ya da hiç yoksa) bütün elemanlara bakmak gerekir.
#Canlı animasyon
Aranan değer: 24. Dizinin başından başlayıp elemanları tek tek kontrol edeceğiz.
for i = 0 to n - 1if a[i] == target: return ireturn -1
#Adım adım
- 01İlk elemandan başla.
- 02Elemanı aranan değerle karşılaştır.
- 03Eşitse sırasını döndür ve dur.
- 04Eşit değilse bir sonraki elemana geç.
- 05Dizinin sonuna gelirsen değer yoktur; -1 döndür.
#Örnek kod
Aynı algoritma 8 dilde. Her program derlenip çalıştırılarak test edildi ve hepsi aynı çıktıyı veriyor.
def linear_search(a: list[int], target: int) -> int:
"""Returns the index of the first element equal to target, or -1."""
for i, value in enumerate(a):
if value == target:
return i
return -1
numbers = [4, 8, 1, 9, 3]
print(linear_search(numbers, 9))
print(linear_search(numbers, 7))#Karmaşıklık
| En iyi | O(1) |
|---|---|
| Ortalama | O(n) |
| En kötü | O(n) |
| Ek bellek | O(1) |
| Sıralı veri gerekir mi? | Hayır |
Değer ilk sıradaysa tek karşılaştırma yeter. Ortalamada elemanların yarısına, değer yoksa hepsine bakılır. Veri bir kez sıralanıp çok kez aranacaksa ikili arama çok daha hızlıdır.
#Ne zaman kullanılır?
Küçük ya da sıralı olmayan verilerde, tek seferlik aramalarda ve bağlı liste gibi indeksle erişilemeyen yapılarda doğru seçimdir. Programlama dillerindeki indexOf, includes ve find gibi fonksiyonlar doğrusal arama yapar.
#Alıştırma
Soruları cevaplamak ve ilerlemeni kaydetmek için giriş yap.
Kolay
Doğrusal arama verinin sıralı olmasını gerektirir mi?
- 1Hayır
- 2Evet
Doğrusal aramanın en kötü durum karmaşıklığı nedir?
- 1O(n)
- 2O(1)
- 3O(log n)
- 4O(n²)
Aranan değer dizinin ilk elemanıysa kaç karşılaştırma yapılır?
- 11
- 2n
- 3n / 2
- 4log n
Orta
[7, 3, 9, 3, 5] dizisinde 3 aranırsa doğrusal arama hangi sırayı (index) döndürür?
- 11
- 23
- 30
- 4-1
Zor
Aşağıdakilerden hangisinde ikili arama yerine doğrusal arama kullanmak gerekir?
- 1Sıralı olmayan bir bağlı listede arama yaparken
- 2Sıralı bir dizide çok sayıda arama yaparken
- 3Bir sözlükte kelime ararken
- 4Sıralı bir veritabanı indeksinde arama yaparken
#Bundan sonra
Bu dersi bildiğini varsayan dersler: