Descărcați ca doc, pdf sau txt
Descărcați ca doc, pdf sau txt
Sunteți pe pagina 1din 3

Metode de cutare

Cutare binar
(Divide et impera)
Definirea problemei
Se citesc de la tastatur n numere sortate cresctor. De asemenea se citete un
numr ntreg nr. S se decid dac nr se gsete n irul celor n numere citite.
Analiza problemei
Nu vom compara pe rnd nr cu toate numerele citite (asta se ntmpl doar la
cutarea secvenial, cnd vectorul nu este sortat). Vom ine cont de faptul c
numerele citite sunt sortate cresctor. ie v un vector cu n numere ntregi. iind
date li i ls procedm astfel!
" se calculea# indicele componentei din mi$loc, %& (li'ls)(). *par trei
posi+iliti!
nr este egal cu v[k] ca# n care cutarea se termin cu succes.
Se afiea# po#iia pe care a fost gsit nr,
nr-v.%/, ca# n care li&%'0, ls rmne nesc1im+at,
nr2v.%/, ca# n care ls&%"0, li rmne nesc1im+at.
3utarea se termin cnd numrul nr a fost identificat sau li2ls (fr succes).
Exemplu
n!"#$ nr!"%$ v!(&$ &$ &$ '$ ($ ($ )$ )$ )$ *$ "%$ "%$ +&$ +&)
v["]!&, v[+]!&, v[-]!&, v[#]!', v[&]!(, v[']!(, v[(]!), v[)]!),
v[*]!), v["%]!*, v[""]!"%, v["+]!"%, v["-]!+&, v["#]!+&
4niial li&0, ls&05. Se calculea# indicele componentei din mi$loc k!(li.ls)/+
k&6. v.6/&7 - 08 deci li devine k." adic li&7 iar ls rmne nesc1im+at.
Se calculea# din nou k&(7'05)() k&00. De aceast dat nr!v[k]
(08&v.00/) deci am locali#at numrul nr pe po#iia 00. 9lementul cutat a fost
gsit doar dup dou comparri.
Dac am fi folosit al0oritmul de cutare secven1ial$ dup c2te comparri
s3ar fi 0sit nr4
Al0oritmul 5n pseudocod (cutare binar)
ntreg v.088/, n, i, li, ls, %, nr, gasit,
citete n,
pentru i0, n e:ecut
citete v.i/,
li0,
lsn,
e:ecut
% (li'ls)(),
dac (nr&v.%/)
atunci scrie ;gsit pe po#iia< %
gasit0,
altfel
dac (nr-v.%/)
atunci ls%"0,
altfel li%'0,
sfrit=dac,
sfrit=dac,
ct timp (li-ls and not gasit),
6ariabile utilizate
" v este vectorul n care se vor memora cele n elementele ntregi sortate cresctor
" n " numrul de elemente ale vectorului
" nr " valoare pe care o cutm n vectorul v
" 0asit " varia+il n care se va reine dac s"a gsit nr printre elementele vectorului,
va avea valoarea iniial 8 (adic nr nu se gsete n v), alfel, 0asit va primi
valoarea 0
" k " indicele componentei din mi$loc
" li i ls " capetele intervalului de cutare
Aplica1ie de laborator
>ranscriei n lim+a$ul de programare 3'' algoritmul descris anterior n
pseudocod.
7em acas
Scriei programul 3'' pentru cutare +inar n ca#ul n care vectorul este
sortat descresctor.
888 Cele dou fi9iere le trimite1i pe adresa de mail
ne0aracristina((:;a<oo=com 888

S-ar putea să vă placă și