1 / 8

C ăutare binară

C ăutare binară. PROBLEMĂ:

parker
Download Presentation

C ăutare binară

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Căutare binară PROBLEMĂ: Se citeşte un vector cu n componente numere întregi, unde numerele se presupun ordonate crescător şi o valoare întreagă nr. Să se decidă dacă nr se găseşte sau nu printre numerele citite, iar în caz afirmativ să se tipărească indicele componentei care conţine acea valoare. OBSERVAŢIE: O rezolvare în care valoarea variabilei nr se compară pe rând cu cele n valori, este lipsită de eficienţă (nu exploatează faptul că cele n valori sunt în secvenţă crescătoare). Algoritmul care va fi propus este mult mai performant şi se bazează pe faptul că elementele vectorului sunt ordonate.

  2. Vectorul iniţial 1 7 11 15 21 28 30 41 50 Numărul căutat 50

  3. Valoareaelementului de pepoziţia din mijloc este: v[(i+j)/2]=21 1 7 11 15 21 28 30 41 50 j=9 i=1 Se verifică dacă numărul căutat este egal cu valoarea din şir aflată pe poziţia din mijloc 50=21? FALS

  4. Se compară numărul căutat cu elmentul aflat pe poziţia din mijloc 50<21? FALS, atunci căutarea se face în jumătatea a doua a şirului 28 30 41 50 j=9 i=6 Se reia algoritmul v[(i+j)/2]=30 50=30? FALSatunci 50<30? FALS

  5. 41 50 i=8 j=9 v[(i+j)/2]=41 50=41? FALSatunci 50<41? FALS

  6. 50 i=9 j=9 v[(i+j)/2]=50 50=50? ADEVĂRAT Numărul căutat se află pe poziţia 9

  7. #include<iostream.h> int v[100], n, nr; void caut (int i, int j) {if (nr==v[(i+j)/2]) cout<<“gasit”<<“ “<<“indice”<<(i+j)/2; else if (i<j) if (nr<v[(i+j)/ 2]) caut (i, (i+j)/2 -1); else caut ((i+j)/2 +1, j);}; main() {cout<<“n=“; cin>>n; for (int i=1; i<=n; i++) {cout<<“v[“<<i<<“]=“; cin>>v[i]; cout<<“nr=“; cin>>nr; caut (1,n); }

  8. Performanţă Algoritmul de căutare binară efectuează cel mult [ ]+1 comparaţii, în cazul unei căutări cu succes, respectiv [ ] sau [ ]+1 comparaţii, în cazul unei căutări fără succes, unde n este dimensiunea spaţiului de căutare.

More Related