Forum » Programiranje » rekurzivno iskanje max elementa v tabeli
rekurzivno iskanje max elementa v tabeli
inglog ::
Napisal sem iterativno rešitev za iskanje največjega elementa v poljubno veliki tabeli elementov.
Zdej pa tega ne znam pretvorit v rekurzivno različico, da bi primerjal čase iskanja.
Iterativna varianta gre tkole:
procedure najvecjiElIterativno;
var i,najvecji,rez:integer;
begin
najvecji:=tabR[0].key;
for i:=1 to stEl do
begin
if najvecji < tabR[i].key then
begin
najvecji:=tabR[i].key
end;
end;
rez:=najvecji;
Form1.Edit2.Text:=inttostr(rez);
end;
Zdej bi pa prosu, če zna kdo tole dat v rekurzivno varianto, da mi prosim pomaga.
Bil bi full vesel, tnx!
Zdej pa tega ne znam pretvorit v rekurzivno različico, da bi primerjal čase iskanja.
Iterativna varianta gre tkole:
procedure najvecjiElIterativno;
var i,najvecji,rez:integer;
begin
najvecji:=tabR[0].key;
for i:=1 to stEl do
begin
if najvecji < tabR[i].key then
begin
najvecji:=tabR[i].key
end;
end;
rez:=najvecji;
Form1.Edit2.Text:=inttostr(rez);
end;
Zdej bi pa prosu, če zna kdo tole dat v rekurzivno varianto, da mi prosim pomaga.
Bil bi full vesel, tnx!
Gundolf ::
Upam da vsaj veš kaj je rekurzija.
Narediš funkcijo, ki kot argumente sprejme do zdaj največji najdeni element in še nepregledano tabelo.
V tej funkciji pogledaš če je prvi element podane tabele večji od do sedaj najdenega maximuma in če je, si ga zapomniš kot nov maximum.
V primeru, da je v tabeli poleg prvega še kakšen element, kličeš isto funkcijo, s tem da ji podaš novi/stari max element in tabelo brez prvega elementa (ki si ga ravno pregledal).
To je to.
Narediš funkcijo, ki kot argumente sprejme do zdaj največji najdeni element in še nepregledano tabelo.
V tej funkciji pogledaš če je prvi element podane tabele večji od do sedaj najdenega maximuma in če je, si ga zapomniš kot nov maximum.
V primeru, da je v tabeli poleg prvega še kakšen element, kličeš isto funkcijo, s tem da ji podaš novi/stari max element in tabelo brez prvega elementa (ki si ga ravno pregledal).
To je to.
inglog ::
Gundolf: Upam, da vsaj veš kaj je rekurzija... s temle si me pa cist ozalu no.
Nimam problemov okrog tega, da ne bi vedu, da gre za to, da funkcija klice samo sebe.
Nimam problemov okrog tega, da ne bi vedu, da gre za to, da funkcija klice samo sebe.
Zgodovina sprememb…
- spremenil: inglog ()
Vesoljc ::
in kje je potem problem?
kako globoko si?
je trenutni večji od max?
najvčji(i+1)
tko nekak...
kako globoko si?
je trenutni večji od max?
najvčji(i+1)
tko nekak...
Abnormal behavior of abnormal brain makes me normal...
Sergio ::
Ce ze delas rekurzivno, delaj vsaj tako, da array 'razbijes' na 2 enakovredna dela, in rekurzivno klices max nad polovico, kar se rekurzivno klice, dokler ne ostane samo en element... :)
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
če usoda ustavi mu korak,
on se ji zoperstavi.
Gundolf ::
inglog: Me veseli da veš kaj je to rekurzija. Upam da boš zdaj ko veš tudi kakšen je postopek znal rešiti problem.
Sergio: Ne vidim zakaj bi bilo bolje deliti na polovico. [Popravek: ok, iskanje bolj v širino kot globino - zdaj mi je jasno]
Sergio: Ne vidim zakaj bi bilo bolje deliti na polovico. [Popravek: ok, iskanje bolj v širino kot globino - zdaj mi je jasno]
Zgodovina sprememb…
- spremenil: Gundolf ()
Phil ::
int max_stevilo=0;
int *tabela;
int max(int indeks) {
if(tabela[indeks]>max_stevilo)
max_stevilo=tabela[indeks];
if (indeks>0) return max(indeks-1); else return max_stevilo;
}
Ta enostavna varianta. Klices max(elementov-1).
LP
int *tabela;
int max(int indeks) {
if(tabela[indeks]>max_stevilo)
max_stevilo=tabela[indeks];
if (indeks>0) return max(indeks-1); else return max_stevilo;
}
Ta enostavna varianta. Klices max(elementov-1).
LP
Zgodovina sprememb…
- spremenil: Phil ()
inglog ::
Kaj pravite na tole
Procedure NajvecjiEl(el,max: integer);
begin
if(tabR[el].key>max) then max:=tabR[el].key;
if (el > 0) then NajvecjiEl(el-1, max);
end;
Sergio: tvoj predlog mi je všeč, ker koker se jst tole kej spomnem s predavanj bo to tut hitrejš...a? Ravno čase moram primerjat z iterativno varianto. Ampak kako to realizirat ? Prosim.
LP
Procedure NajvecjiEl(el,max: integer);
begin
if(tabR[el].key>max) then max:=tabR[el].key;
if (el > 0) then NajvecjiEl(el-1, max);
end;
Sergio: tvoj predlog mi je všeč, ker koker se jst tole kej spomnem s predavanj bo to tut hitrejš...a? Ravno čase moram primerjat z iterativno varianto. Ampak kako to realizirat ? Prosim.
LP
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Algortimi (matematična indukcija)Oddelek: Programiranje | 1480 (1208) | lebdim |
» | RekurzijaOddelek: Programiranje | 2370 (1830) | lebdim |
» | Java metode;Oddelek: Programiranje | 4912 (4104) | ragezor |
» | [Turbo Pascal] Pomoč...Oddelek: Programiranje | 1467 (1369) | Grey |
» | rekurzija - problem?Oddelek: Programiranje | 3800 (3364) | Vesoljc |