logo

C'de ikili arama algoritması

Sıralanmış bir dizide belirli bir öğeyi bulmanın hızlı bir yöntemi ikili aramadır. Bu algoritmanın ilk görevi hedef değeri dizinin orta elemanıyla karşılaştırmaktır. Hedef değer ortadaki öğede yer alıyorsa arama başarılı sayılır. Hedef değeri merkezdeki elemandan küçükse algoritma dizinin sol yarısına bakacaktır. Hedef değeri merkezdeki elemandan büyükse program dizinin sağ yarısını tarayacaktır. Bu yöntem, hedef değer veya arama aralığı tükenene kadar tekrarlanır.

Kullanımı:

Veritabanları, arama motorları ve veri işleme, ikili arama stratejisini kullanan uygulamalardan sadece birkaçıdır.

Özellikler:

  • Giriş değerleri dizisi sıralanmalıdır.
  • Her yinelemede yöntem, arama aralığını yarı yarıya daraltarak onu özellikle büyük veri kümeleri için verimli hale getiriyor.
  • Algoritma O (log n) en kötü durum zaman karmaşıklığına sahiptir.
  • İstenilen değerin bulunması, program tarafından böl ve yönet stratejisi kullanılarak yapılır.

İşte C ile yazılmış ikili arama algoritmasının basit bir örneği:

 #include int binary_search(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right - left) 2; if (arr[mid]="=" target) return mid; } else < left="mid" 1; right="mid" -1; target not found main() arr[]="{1," 3, 5, 7, 9}; n="sizeof(arr)" sizeof(arr[0]); index="binary_search(arr," 0, 1, target); (index="=" -1) printf('target found
'); at %d
', index); 0; pre> <p> <strong>Output:</strong> </p> <pre> Target found at index 2 </pre> <ul> <li>The binary_search function accepts four arguments: the array to search, the left and right search range boundaries, and the target value to look for. The function returns its index if the desired value can be found; else, it returns -1.</li> <li>The main function creates an array arr and a value target. The binary_search function is then used to search the array for the desired value. The function returns the index where the target value was located if it was, the function returns the index at which it was found. Otherwise, the message &apos;Target not found&apos; is displayed.</li> <li>The binary search algorithm&apos;s implementation is basic. We begin by setting the left border to the array&apos;s initial index and the right boundary to the array&apos;s last index. Once the left boundary is less than or equal to the right border, the array is looped through one more time. We use the formula (left + right) / 2 within the loop to calculate the middle index of the search range. This formula computes the integer value of the middle index&apos;s floor.</li> <li>The centre member of the array is contrasted with the target value. We return the index of the middle element if they are equal. We change the right boundary to be one less than the middle index if the desired value is less than the middle element. If not, we adjust the left border so that it is one more than the centre index. We continue doing this until the goal value is obtained or the search space is filled.</li> <li>The temporal complexity of the binary search algorithm, where n is the array size, is O(log n). This is far more efficient than linear search, which has a temporal complexity of O(n), where n is the size of the array.</li> <li>Finally, the binary search technique offers a useful way to locate a particular member in a sorted array. It is easy to build and has an O(log n) time complexity, making it an efficient approach for large datasets.</li> </ul> <h3>Advantages:</h3> <ul> <li>For large datasets, the binary search algorithm is exceptionally efficient, and it is capable of handling a wide range of input sizes.</li> <li>The algorithm is simple to implement in almost all programming languages.</li> </ul> <h3>Disadvantages:</h3> <ul> <li>Before using the binary search technique, the input array must be sorted, which takes more time and memory.</li> <li>The algorithm cannot be applied to unsorted arrays.</li> <li>The algorithm may yield inaccurate results if the input array is not sorted.</li> <li>The binary search algorithm is not appropriate for tiny datasets since the technique&apos;s overhead may outweigh its benefits.</li> </ul> <h2>Conclusion:</h2> <p>A sorted array can be quickly searched for a specific element using the binary search technique. It employs a divide-and-conquer strategy to cut the search range in half with each iteration, allowing it to be highly efficient for large datasets. However, before using the binary search technique, the input array must be sorted, which takes extra time and memory. The binary search algorithm is a sophisticated data processing tool that is widely utilised in various sectors.</p> <hr></=>
  • Binary_search işlevi dört bağımsız değişkeni kabul eder: aranacak dizi, sol ve sağ arama aralığı sınırları ve aranacak hedef değer. İstenilen değer bulunabiliyorsa işlev indeksini döndürür; aksi takdirde -1 değerini döndürür.
  • Main işlevi bir dizi dizisi ve bir değer hedefi oluşturur. Daha sonra ikili_arama işlevi, dizide istenen değeri aramak için kullanılır. İşlev, hedef değerin bulunduğu dizini, eğer öyleyse, bulunduğu dizini döndürür. Aksi halde 'Hedef bulunamadı' mesajı görüntülenir.
  • İkili arama algoritmasının uygulanması basittir. Sol kenarlığı dizinin ilk indeksine, sağ kenarlığı ise dizinin son indeksine ayarlayarak başlıyoruz. Sol sınır sağ kenardan küçük veya ona eşit olduğunda dizi bir kez daha döngüye alınır. Arama aralığının orta indeksini hesaplamak için döngü içerisinde (sol + sağ) / 2 formülünü kullanırız. Bu formül orta endeksin tabanının tamsayı değerini hesaplar.
  • Dizinin merkez üyesi hedef değerle kontrast oluşturur. Eşit olmaları durumunda ortadaki elemanın indeksini döndürürüz. İstenilen değer ortadaki elemandan küçükse, sağ sınırı orta indeksten bir eksik olacak şekilde değiştiririz. Değilse, sol kenarlığı ortadaki indeksten bir fazla olacak şekilde ayarlıyoruz. Hedef değer elde edilene veya arama alanı dolana kadar bunu yapmaya devam ediyoruz.
  • n'nin dizi boyutu olduğu ikili arama algoritmasının zamansal karmaşıklığı O(log n)'dir. Bu, n'nin dizinin boyutu olduğu O(n) zamansal karmaşıklığına sahip doğrusal aramadan çok daha verimlidir.
  • Son olarak ikili arama tekniği, sıralanmış bir dizide belirli bir üyeyi bulmak için kullanışlı bir yol sunar. Oluşturulması kolaydır ve O(log n) zaman karmaşıklığına sahiptir, bu da onu büyük veri kümeleri için etkili bir yaklaşım haline getirir.

Avantajları:

  • Büyük veri kümeleri için ikili arama algoritması son derece verimlidir ve çok çeşitli girdi boyutlarını işleyebilir.
  • Algoritmanın neredeyse tüm programlama dillerinde uygulanması kolaydır.

Dezavantajları:

  • İkili arama tekniğini kullanmadan önce giriş dizisinin sıralanması gerekir, bu da daha fazla zaman ve hafıza gerektirir.
  • Algoritma sıralanmamış dizilere uygulanamaz.
  • Giriş dizisi sıralanmazsa algoritma hatalı sonuçlar verebilir.
  • İkili arama algoritması küçük veri kümeleri için uygun değildir çünkü tekniğin maliyeti yararlarından daha ağır basabilir.

Çözüm:

Sıralanmış bir dizi, ikili arama tekniği kullanılarak belirli bir öğe için hızlı bir şekilde aranabilir. Her yinelemede arama aralığını yarıya indirmek için böl ve yönet stratejisini kullanarak büyük veri kümeleri için oldukça verimli olmasını sağlar. Ancak ikili arama tekniğini kullanmadan önce giriş dizisinin sıralanması gerekir, bu da ekstra zaman ve hafıza gerektirir. İkili arama algoritması, çeşitli sektörlerde yaygın olarak kullanılan karmaşık bir veri işleme aracıdır.