Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 4.050 pregleda

Najnovija ↓

Najbrža pretraga 15.10.2005. u 20:46 · pre 256 meseci #1
Koja je najbrža pretraga stringa?
Ja to radim ovako:
Code:

l1:=length(str1);
l2:=length(str2);
for i:=1 to l1 do if copy(str1, i, l2)=str2 then
  begin
    ...
  end;

Da li je brže ako se koristi pos funkcija?
Re: Najbrža pretraga 16.10.2005. u 00:23 · pre 256 meseci #3
Naravno da je brzi jer Pos() ne pravi nove stringove u memoriji kao sto to radi tvoja Copy() varijanta.
Re: Najbrža pretraga 16.10.2005. u 00:35 · pre 256 meseci #4
>

Ako ti je brzina bas bitna, uzmi faststrings unit od Petera Morrissa (free) koji
je par puta brzi od standardnih delphi varijanti. Sajt je www.droopyeyes.com
a tamo kaze:

"A useful set of assembly optimised string manipulation routines. The most
remarkable of these is without a doubt the FastReplace function. StringReplace
took over 8 hours to complete multiple replacements on a 10mb string, whereas
FastReplace took 0.5 seconds (yes, half of a second)."
Re: Najbrža pretraga 16.10.2005. u 00:47 · pre 256 meseci #5
Da dopunim :)

Varijanta sa Copy() generise nekoliko puta duzi masinski kod od Pos() varijante i vrsi interno pozivanje nekoliko procedura (npr. LStrLen, LStrCopy itd.) sto rezultuje sporijim kodom (postavljanje parametara na stek, dodatno "diranje" memorije itd.).
Re: Najbrža pretraga 17.10.2005. u 15:16 · pre 256 meseci #6
Pos() je cisto asemblerska rutina; pogledati unit System.pas. Od ovoga tesko da ima brze.

Rajko
Re: Najbrža pretraga 17.10.2005. u 19:03 · pre 256 meseci #7
[zezanje]ovo je brzhe:
1000101010010111100101010010100000101001011111010010100100111000[/zezanje]

hehehe...

eto, nisam ni znao da je POS asemblerska rutina, ali u svakom slucaju sam pretpostavljao da je to brze od tvog nacina gore... inace ne bi Pos(); ni postojala...
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Najbrža pretraga 17.10.2005. u 19:49 · pre 256 meseci #8
Baš vam hvala. Pos je funkcija u kompajleru, nema soursa (delphi 7)
hvala
Re: Najbrža pretraga 18.10.2005. u 23:18 · pre 256 meseci #9
Naravno da ima source. Ako ne mozes da nadjes unit System, onda otvori neki tvoj unit, pa u uses deo dodaj "System". Zatim desni klik na tu rec, pa 'Open file at cursor'. Kad ti otvori, trazi 'pos{' (nije greska: viticasta zagrada). Naci ces vise verzija funkcije, vec prema tipu stringa (short, long/Ansi, wide...). Kompajler bira koju ce funkciju pozvati i to je to.

Rajko
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme