logo

Binární vyhledávací algoritmus v C

Rychlou metodou pro vyhledání určitého prvku v seřazeném poli je binární vyhledávání. Počátečním úkolem tohoto algoritmu je porovnat cílovou hodnotu se středním prvkem pole. Vyhledávání je považováno za úspěšné, pokud je cílová hodnota obsažena v prostředním prvku. Algoritmus se podívá do levé poloviny pole, pokud je hodnota cíle menší než středový prvek. Pokud je cílová hodnota větší než středový prvek, program naskenuje pravou polovinu pole. Tato metoda se opakuje, dokud není vyčerpána buď cílová hodnota, nebo vyhledávací rozsah.

Používání:

Databáze, vyhledávače a zpracování dat jsou jen některé z aplikací, které využívají strategii binárního vyhledávání.

Vlastnosti:

  • Pole vstupních hodnot musí být seřazeno.
  • S každou iterací metoda zmenší rozsah vyhledávání na polovinu, což je zvláště efektivní pro velké datové sady.
  • Algoritmus má O (log n) nejhorší časovou složitost.
  • Nalezení požadované hodnoty provádí program pomocí strategie rozděl a panuj.

Zde je přímý příklad binárního vyhledávacího algoritmu napsaného v 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></=>
  • Funkce binary_search přijímá čtyři argumenty: pole, které se má prohledat, levé a pravé hranice rozsahu hledání a cílovou hodnotu, kterou má hledat. Funkce vrátí svůj index, pokud lze nalézt požadovanou hodnotu; jinak vrátí -1.
  • Funkce main vytvoří pole arr a cílovou hodnotu. Funkce binary_search se pak použije k vyhledání požadované hodnoty v poli. Funkce vrátí index, kde byla umístěna cílová hodnota, pokud byla, funkce vrátí index, na kterém byla nalezena. V opačném případě se zobrazí zpráva „Cíl nenalezen“.
  • Implementace binárního vyhledávacího algoritmu je základní. Začneme nastavením levého okraje na počáteční index pole a pravého okraje na poslední index pole. Jakmile je levá hranice menší nebo rovna pravému okraji, pole se protočí ještě jednou. Pro výpočet středního indexu rozsahu hledání používáme vzorec (vlevo + vpravo) / 2 v rámci cyklu. Tento vzorec vypočítá celočíselnou hodnotu spodní hranice středního indexu.
  • Středový člen pole je v kontrastu s cílovou hodnotou. Pokud jsou stejné, vrátíme index prostředního prvku. Pravou hranici změníme tak, aby byla o jednu menší než prostřední index, pokud je požadovaná hodnota menší než prostřední prvek. Pokud ne, upravíme levý okraj tak, aby byl o jeden více než středový index. Pokračujeme v tom, dokud nezískáme cílovou hodnotu nebo nevyplníme vyhledávací prostor.
  • Časová složitost binárního vyhledávacího algoritmu, kde n je velikost pole, je O(log n). To je mnohem efektivnější než lineární vyhledávání, které má časovou složitost O(n), kde n je velikost pole.
  • A konečně, technika binárního vyhledávání nabízí užitečný způsob, jak najít konkrétního člena v seřazeném poli. Snadno se staví a má časovou složitost O(log n), což z něj činí efektivní přístup pro velké datové sady.

výhody:

  • Pro velké datové sady je binární vyhledávací algoritmus výjimečně účinný a je schopen zpracovat širokou škálu vstupních velikostí.
  • Algoritmus je snadno implementovatelný téměř ve všech programovacích jazycích.

Nevýhody:

  • Před použitím techniky binárního vyhledávání je nutné vstupní pole seřadit, což vyžaduje více času a paměti.
  • Algoritmus nelze použít na nesetříděná pole.
  • Algoritmus může poskytovat nepřesné výsledky, pokud vstupní pole není seřazeno.
  • Algoritmus binárního vyhledávání není vhodný pro malé soubory dat, protože režie této techniky může převážit její výhody.

Závěr:

Seřazené pole lze rychle vyhledat konkrétní prvek pomocí techniky binárního vyhledávání. Využívá strategii rozděl a panuj ke snížení rozsahu vyhledávání na polovinu při každé iteraci, což umožňuje, aby byl vysoce účinný pro velké soubory dat. Před použitím techniky binárního vyhledávání je však nutné vstupní pole seřadit, což vyžaduje čas a paměť navíc. Binární vyhledávací algoritmus je sofistikovaný nástroj pro zpracování dat, který je široce využíván v různých odvětvích.