logo

Dvejetainis paieškos algoritmas C

Greitas būdas rasti tam tikrą elementą surūšiuotame masyve yra dvejetainė paieška. Pradinė šio algoritmo užduotis yra palyginti tikslinę reikšmę su viduriniu masyvo elementu. Paieška laikoma sėkminga, jei tikslinė reikšmė yra viduriniame elemente. Algoritmas atrodys kairėje masyvo pusėje, jei tikslo reikšmė yra mažesnė už centrinį elementą. Programa nuskaitys dešinę masyvo pusę, jei tikslo reikšmė yra didesnė už centrinį elementą. Šis metodas kartojamas tol, kol išnaudojama tikslo reikšmė arba paieškos diapazonas.

Naudojimas:

Duomenų bazės, paieškos sistemos ir duomenų apdorojimas yra tik keletas programų, kurios naudoja dvejetainę paieškos strategiją.

Charakteristikos:

  • Įvesties reikšmių masyvas turi būti surūšiuotas.
  • Su kiekviena iteracija metodas sumažina paieškos diapazoną per pusę, todėl jis yra ypač efektyvus dideliems duomenų rinkiniams.
  • Algoritmas turi O (log n) blogiausio atvejo laiko sudėtingumą.
  • Norimą reikšmę randa programa, naudodama „skaldyk ir valdyk“ strategiją.

Štai paprastas dvejetainio paieškos algoritmo pavyzdys, parašytas C:

 #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></=>
  • Funkcija binary_search priima keturis argumentus: masyvą ieškoti, kairiosios ir dešiniosios paieškos diapazono ribas ir tikslinę reikšmę, kurios reikia ieškoti. Funkcija grąžina savo indeksą, jei galima rasti norimą reikšmę; kitu atveju grąžinama -1.
  • Pagrindinė funkcija sukuria masyvą arr ir vertės tikslą. Tada funkcija binary_search naudojama norint masyve ieškoti norimos reikšmės. Funkcija grąžina indeksą, kuriame buvo tikslinė reikšmė, jei ji buvo, funkcija grąžina indeksą, kuriame ji buvo rasta. Kitu atveju bus rodomas pranešimas „Tikslas nerastas“.
  • Dvejetainės paieškos algoritmo įgyvendinimas yra pagrindinis. Pradedame kairiąją kraštą nustatydami pradiniam masyvo indeksui, o dešiniąją – paskutiniam masyvo indeksui. Kai kairioji riba yra mažesnė arba lygi dešiniajai kraštinei, masyvas perkeliamas dar kartą. Norėdami apskaičiuoti vidurinį paieškos diapazono indeksą, ciklo viduje naudojame formulę (kairė + dešinė) / 2. Ši formulė apskaičiuoja vidurinio indekso žemiausios ribos sveikąjį skaičių.
  • Centrinis masyvo narys kontrastuojamas su tiksline verte. Grąžiname vidurinio elemento indeksą, jei jie lygūs. Dešinę ribą pakeičiame į vieną mažesnę už vidurinį indeksą, jei norima reikšmė mažesnė už vidurinį elementą. Jei ne, koreguojame kairįjį kraštą taip, kad jis būtų vienu daugiau nei centrinis indeksas. Tai darome tol, kol gaunama tikslo reikšmė arba užpildoma paieškos vieta.
  • Dvejetainės paieškos algoritmo, kur n yra masyvo dydis, laikinasis sudėtingumas yra O(log n). Tai daug efektyviau nei tiesinė paieška, kurios laikinasis sudėtingumas yra O (n), kur n yra masyvo dydis.
  • Galiausiai dvejetainė paieškos technika yra naudingas būdas surasti tam tikrą narį surūšiuotame masyve. Jį lengva sukurti, o jo laikas yra sudėtingas (log n), todėl tai yra efektyvus metodas dideliems duomenų rinkiniams.

Privalumai:

  • Didelių duomenų rinkinių atveju dvejetainis paieškos algoritmas yra ypač efektyvus ir gali apdoroti įvairius įvesties dydžius.
  • Algoritmą paprasta įgyvendinti beveik visomis programavimo kalbomis.

Trūkumai:

  • Prieš naudojant dvejetainę paieškos techniką, įvesties masyvas turi būti surūšiuotas, o tai užima daugiau laiko ir atminties.
  • Algoritmas negali būti taikomas nerūšiuotiems masyvams.
  • Algoritmas gali duoti netikslius rezultatus, jei įvesties masyvas nėra surūšiuotas.
  • Dvejetainis paieškos algoritmas netinka mažiems duomenų rinkiniams, nes technikos pridėtinės išlaidos gali viršyti jos naudą.

Išvada:

Surūšiuotame masyve galima greitai ieškoti konkretaus elemento naudojant dvejetainės paieškos techniką. Ji naudoja „skaldyk ir užkariauk“ strategiją, kad su kiekviena iteracija paieškos diapazonas būtų sumažintas per pusę, todėl jis gali būti labai efektyvus dideliems duomenų rinkiniams. Tačiau prieš naudojant dvejetainę paieškos techniką, įvesties masyvas turi būti surūšiuotas, o tai užima papildomo laiko ir atminties. Dvejetainis paieškos algoritmas yra sudėtingas duomenų apdorojimo įrankis, plačiai naudojamas įvairiuose sektoriuose.