logo

Binārās meklēšanas algoritms valodā C

Ātra metode noteikta elementa atrašanai sakārtotā masīvā ir binārā meklēšana. Šī algoritma sākotnējais uzdevums ir salīdzināt mērķa vērtību ar masīva vidējo elementu. Meklēšana tiek uzskatīta par veiksmīgu, ja mērķa vērtība ir ietverta vidējā elementā. Algoritms izskatīsies masīva kreisajā pusē, ja mērķa vērtība ir mazāka par centrālo elementu. Programma skenēs masīva labo pusi, ja mērķa vērtība ir lielāka par centra elementu. Šo metodi atkārto, līdz mērķa vērtība vai meklēšanas diapazons ir izsmelts.

Lietošana:

Datu bāzes, meklētājprogrammas un datu apstrāde ir tikai dažas no lietojumprogrammām, kas izmanto bināro meklēšanas stratēģiju.

Raksturlielumi:

  • Ievades vērtību masīvs ir jāsakārto.
  • Ar katru iterāciju metode samazina meklēšanas diapazonu uz pusi, padarot to īpaši efektīvu milzīgām datu kopām.
  • Algoritmam ir O (log n) sliktākā gadījuma laika sarežģītība.
  • Vēlamās vērtības atrašanu veic programma, izmantojot sadali un iekaro stratēģiju.

Šeit ir vienkāršs binārās meklēšanas algoritma piemērs, kas rakstīts C valodā:

java salīdzinājums
 #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 pieņem četrus argumentus: meklējamo masīvu, kreisās un labās meklēšanas diapazona robežas un meklējamo mērķa vērtību. Funkcija atgriež savu indeksu, ja var atrast vajadzīgo vērtību; pretējā gadījumā tas atgriež -1.
  • Galvenā funkcija izveido masīvu arr un vērtības mērķi. Pēc tam funkcija binary_search tiek izmantota, lai masīvā meklētu vēlamo vērtību. Funkcija atgriež indeksu, kurā atradās mērķa vērtība, ja tā bija, funkcija atgriež indeksu, kurā tā tika atrasta. Pretējā gadījumā tiek parādīts ziņojums 'Mērķis nav atrasts'.
  • Binārā meklēšanas algoritma ieviešana ir vienkārša. Mēs sākam, iestatot kreiso robežu masīva sākotnējam indeksam un labo robežu masīva pēdējam indeksam. Kad kreisā robeža ir mazāka par labo apmali vai vienāda ar to, masīvs tiek cilpas cauri vēl vienu reizi. Mēs izmantojam formulu (pa kreisi + pa labi) / 2 cilpas ietvaros, lai aprēķinātu meklēšanas diapazona vidējo indeksu. Šī formula aprēķina vidējā indeksa zemākās vērtības veselo skaitļu vērtību.
  • Masīva centrālais dalībnieks tiek kontrastēts ar mērķa vērtību. Atgriežam vidējā elementa indeksu, ja tie ir vienādi. Mēs mainām labo robežu uz vienu mazāku par vidējo indeksu, ja vēlamā vērtība ir mazāka par vidējo elementu. Ja nē, mēs noregulējam kreiso apmali, lai tā būtu par vienu vairāk nekā centrālais rādītājs. Mēs turpinām to darīt, līdz tiek iegūta mērķa vērtība vai meklēšanas laukums ir aizpildīts.
  • Binārās meklēšanas algoritma laika sarežģītība, kur n ir masīva lielums, ir O(log n). Tas ir daudz efektīvāk nekā lineārā meklēšana, kuras laika sarežģītība ir O (n), kur n ir masīva lielums.
  • Visbeidzot, binārās meklēšanas paņēmiens piedāvā noderīgu veidu, kā sakārtotā masīvā atrast konkrētu dalībnieku. To ir viegli izveidot, un tam ir O(log n) laika sarežģītība, kas padara to par efektīvu pieeju lielām datu kopām.

Priekšrocības:

  • Lielām datu kopām binārais meklēšanas algoritms ir ārkārtīgi efektīvs, un tas spēj apstrādāt plašu ievades izmēru diapazonu.
  • Algoritmu ir vienkārši ieviest gandrīz visās programmēšanas valodās.

Trūkumi:

  • Pirms binārās meklēšanas tehnikas izmantošanas ievades masīvs ir jāsakārto, kas aizņem vairāk laika un atmiņas.
  • Algoritmu nevar lietot nešķirotiem masīviem.
  • Algoritms var dot neprecīzus rezultātus, ja ievades masīvs nav sakārtots.
  • Binārais meklēšanas algoritms nav piemērots nelielām datu kopām, jo ​​metodes pieskaitāmās izmaksas var atsvērt tās priekšrocības.

Secinājums:

Sakārtotā masīvā var ātri meklēt konkrētu elementu, izmantojot binārās meklēšanas paņēmienu. Tas izmanto “skaldi un valdi” stratēģiju, lai katrā iterācijā meklēšanas diapazonu samazinātu uz pusi, ļaujot tam būt ļoti efektīvam lielām datu kopām. Tomēr pirms binārās meklēšanas tehnikas izmantošanas ievades masīvs ir jāsakārto, kas aizņem papildu laiku un atmiņu. Binārais meklēšanas algoritms ir sarežģīts datu apstrādes rīks, kas tiek plaši izmantots dažādās nozarēs.