KÜRE LogoKÜRE Logo
Ai badge logo

Bu madde yapay zeka desteği ile üretilmiştir.

Dizilerde Kullanılan Arama Algoritmaları

Matematik+2 Daha
fav gif
Kaydet
kure star outline
dogrusalarama.webp
Doğrusal Arama

Dizilerde arama algoritmaları (Searching Algorithms in Arrays) belirli bir öğeyi bulmak için kullanılan sistematik yöntemlerdir. Bu algoritmalar, verilen bir dizinin içinde belirli bir değerin olup olmadığını kontrol etmeye yönelik tasarlanmıştır. Arama işleminin verimliliği, algoritmanın yapısına ve dizinin sıralı olup olmamasına bağlıdır.


Temelde en yaygın kullanılan 3 arama algoritması Doğrusal Arama (Linear Search), İkili Arama (Binary Search) ve İki İşaretçi Tekniği (Two Pointers Technique)'dir. Bu algoritmaların her biri, farklı veri yapılarına ve gereksinimlere göre avantajlar ve dezavantajlar sunar.

Doğrusal Arama (Linear Search)

Doğrusal arama, en basit ve en temel arama algoritmalarından biridir. Bu yöntemde, dizinin ilk elemanından başlanarak aranan öğe bulunana kadar her eleman tek tek kontrol edilir. Eğer öğe dizide bulunursa, ilgili indeks döndürülür; aksi takdirde "bulunamadı" sonucu verilir.


Bu algoritmanın zaman karmaşıklığı O(n) olup, büyük veri kümelerinde verimsiz olabilir. Sırasız diziler için en uygun yöntemlerden biridir.


Doğrusal Arama Adım 1 (Kaynak: www.geeksforgeeks.org)


Doğrusal Arama Adım 3 (Kaynak: www.geeksforgeeks.org)


C++ ile Doğrusal Arama Algoritması Kod Örneği

#include 
using namespace std;

int linearSearch(int arr[], int size, int target) {
    for (int i = 0; i < size; i++) { // sırasıyla bütün dizi dolaşılır.
        if (arr[i] == target)
            return i; // Elemanın bulunduğu indeks
    }
    return -1; // Eleman bulunamadı
}

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 30;
    
    int result = linearSearch(arr, size, target);
    if (result != -1)
        cout << "Eleman bulundu. Indeks: " << result << endl;
    else
        cout << "Eleman bulunamadi." << endl;

    return 0;
}

İkili Arama (Binary Search)

İkili arama algoritması, yalnızca sıralı dizilerde çalışan, oldukça verimli bir arama yöntemidir. Bu algoritma tekniğinde dizi sürekli sağ veya sol yarım olacak şekilde ikiye bölünür. Algoritma, dizinin ortasındaki elemanı seçerek aranan değerle karşılaştırır. Eğer aranan değer ortadaki elemandan küçükse sol yarıda, büyükse sağ yarıda aramaya devam edilir. Sürekli ikiye bölünen sonlu bir dizide nihayetinde sağ ve sol değerlerimiz birbirine eşit olacak ve arama sonlanacaktır.


Bu yöntem, O(log n) zaman karmaşıklığına sahiptir ve doğrusal aramaya kıyasla çok daha hızlıdır. Ancak, dizinin sıralı olması zorunluluğu vardır.


İkili Arama Başlangıç Görseli (Kaynak: www.geeksforgeeks.org)


İkili Arama Adım 1 (Kaynak: www.geeksforgeeks.org)


İkili Arama Adım 2 (Kaynak: www.geeksforgeeks.org)


İkili Arama Adım 3 (Kaynak: www.geeksforgeeks.org)


C++ ile İkili Arama Algoritması Kod Örneği

#include 
using namespace std;

// İkili Arama Fonksiyonu
int binarySearch(int arr[], int left, int right, int target) {
    while (left <= right) { 
        // Ortanca eleman bulunur
        int mid = left + (right - left) / 2; 
        
        // Eğer ortanca eleman hedef değere eşitse, indeksi döndür
        if (arr[mid] == target) 
            return mid;

        // Hedef değer ortanca elemandan büyükse, arama dizinin sağ yarısına kaydırılır
        if (arr[mid] < target)
            left = mid + 1;
        else 
            // Hedef değer ortanca elemandan küçükse, arama dizinin sol yarısına kaydırılır
            right = mid - 1;
    }
    return -1; // Eleman bulunamadı
}

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 30;
    
    int result = binarySearch(arr, 0, size - 1, target);
    
    if (result != -1)
        cout << "Eleman bulundu. Indeks: " << result << endl;
    else
        cout << "Eleman bulunamadi." << endl;


    return 0;
}

İki İşaretçi Tekniği (Two Pointers Technique)

İki işaretçi tekniği, özellikle sıralı dizilerde belirli bir hedef değere ulaşmak veya belirli bir koşulu sağlamak için kullanılır. Bu yöntemde, dizinin başında ve sonunda olmak üzere iki farklı işaretçi belirlenir. İşaretçiler, belirlenen koşula göre hareket ettirilerek istenilen sonuca ulaşılır.


Örneğin, belirli bir toplamı veren iki elemanı bulmak için bu yöntem kullanılır. İşaretçiler, toplam istenilenden büyükse sağa, küçükse sola kaydırılarak ilerletilir. O(n) zaman karmaşıklığına sahiptir ve büyük veri kümelerinde doğrusal aramaya göre daha verimlidir.


İki İşaretçi Tekniği Adım 1 (Kaynak: www.geeksforgeeks.org)


İki İşaretçi Tekniği Adım 2 (Kaynak: www.geeksforgeeks.org)


İki İşaretçi Tekniği Adım 3 (Kaynak: www.geeksforgeeks.org)


İki İşaretçi Tekniği Adım 4 (Kaynak: www.geeksforgeeks.org)


İki İşaretçi Tekniği Adım 5 (Kaynak: www.geeksforgeeks.org)


İki İşaretçi Tekniği Adım 6 (Kaynak: www.geeksforgeeks.org)


C++ ile İkili İşaretçi Algoritması Kod Örneği

// İki İşaretçi Tekniği C++ Örnek Kod
#include 
using namespace std;

bool twoPointerSum(int arr[], int size, int target) {
    int left = 0, right = size - 1;
    
    while (left < right) {
        int sum = arr[left] + arr[right];
        if (sum == target)
            return true;  // Çifti bulduk
        else if (sum < target)
            left++;  // Küçükse sol işaretçiyi sağa kaydır
        else
            right--; // Büyükse sağ işaretçiyi sola kaydır
    }
    return false;  // Çift bulunamadı
}

int main() {
    int arr[] = {1, 3, 4, 6, 8, 10};  // Sıralı dizi
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 10;
    
    if (twoPointerSum(arr, size, target))
        cout << "Toplamı " << target << " olan iki eleman bulundu." << endl;
    else
        cout << "Toplamı " << target << " olan iki eleman bulunamadi." << endl;


    return 0;
}


Hangi Algoritma Hangi Koşullarda kullanılmalı?

Dizilerde kullanılan arama algoritmaları, performans açısından farklı avantajlar sunar.

  • Doğrusal arama, sırasız diziler için basit ve kolay bir yöntemdir ancak büyük veri kümelerinde verimsizdir.
  • İkili arama, sıralı dizilerde oldukça hızlıdır ve büyük veri kümeleri için daha uygundur.
  • İki işaretçi tekniği, belirli koşulları sağlayan problemlerde ekstra verimlilik sağlar.


Uygun algoritmanın seçimi, veri yapısının büyüklüğüne, sıralı olup olmamasına ve işlem gereksinimlerine bağlıdır. Optimal performans için en uygun arama algoritmasının belirlenmesi, sistem kaynaklarının etkin kullanımını sağlar.

Kaynakça

Geeksforgeeks. (2024). "Searching in Array"Erişim Adresi

Geeksforgeeks. (2024). "Two Pointers Technique" Erişim Adresi

Geeksforgeeks. (2024). "Binary Search Algorithm – Iterative and Recursive Implementation"  Erişim Adresi

Geeksforgeeks. (2024). "Linear Search Algorithm"  Erişim Adresi

Sen de Değerlendir!

0 Değerlendirme

Yazar Bilgileri

Avatar
Ana YazarAbdulsamet Ekinci13 Şubat 2025 17:29
KÜRE'ye Sor