![]() |
Nextchar Algo zu langsam
Hallo,
Ich hoffe ich bin hier richtig. Ich habe gerade eben folgenden Algo geschrieben: Er soll immer die nächste Zeichenkette liefern. z.b.: nextchar('abc','a') = b nextchar('abc','c') = aa nextchar('abc','ab') = ac usw...
Delphi-Quellcode:
Er funktioniert soweit auch ganz gut, aber er ist mir zu langsam, wenn er oft wiederholt wird. :gruebel:
function nextchar(const scharset,sword:string):string;
var slastchar:string; l,f:integer; begin l:=length(sword); f:=length(scharset); slastchar := sword[l]; if stringofchar(scharset[f],l) = sword then begin result := stringofchar(scharset[1],l+1) end else begin if slastchar = scharset[f] then begin result := nextchar(scharset,copy(sword,1,l-1))+scharset[1] end else begin slastchar := copy(scharset,pos(slastchar,scharset)+1,1); result := copy(sword,1,l-1)+slastchar end; end; end; Bsp.:
Delphi-Quellcode:
Hat vll jemand ein paar Ideen, wie man ihn optimieren kann, damit er schneller läuft?
var
s:string; f:textfile; begin AssignFile(f, 'C:\test.txt'); ReWrite(f); s:='a'; repeat writeln(f,s); s:=nextchar('abcdefghijklmnopqrstuvwxyz',s); until s = 'zzzzz'; closefile(f); Gibt es vll einen schnelleren Ersatz für die "copy" oder "stringofchar" Funktion etc.? Danke :) |
Re: Nextchar Algo zu langsam
Was ist der tiefere Sinn dahinter wenn
nextchar('abc','c') = aa nextchar('abc','ab') = ac liefert? nextchar('abc','a') = b - das verstehe ich noch nextchar('abc','c') = aa - das nicht mehr, nach dem c gibt es kein Zeichen mehr nextchar('abc','ab') = ac - das verstehe ich auch nicht, denn das Zeichen nach ab ist c Grüße Klaus |
Re: Nextchar Algo zu langsam
Der dargestellte Algorithmus berechnet aus einen Zeichensatz (Parameter 1) und einer Permutation (Parameter 2) dieses Zeichensatzes die jeweils nächste. Dazu gibt's in der Codelib unter
![]() |
Re: Nextchar Algo zu langsam
Const-Angabe bei Strings bringt einiges an Performance da hiermit der overhead der referenzzählung bei Strings nicht mehr nötig ist.
Delphi-Quellcode:
function nextchar(const scharset, sword:string): string;
|
Re: Nextchar Algo zu langsam
Zitat:
![]() |
Re: Nextchar Algo zu langsam
Zitat:
|
Re: Nextchar Algo zu langsam
du rufst zudem length mehrfach auf. Rufe es nur einmal auf und speicher dir das Ergebnis in einer Variablen.
Und bist du dir sicher das dein aktueller algorythmus funktioniert? Weder mit '1234567890' noch mit '0123456789' als scharset funktioniert es wenn ich als sword '9' übergebe. Damit es schneller läuft würde ich an deiner Stelle auf die Funktion NextChar ganz verzichten und gleich in der Schleife hochzählen. Denn so musst du jedesmal erst die aktuelle Zahl analysieren. Wenn du gleich von Anfang an in der Schleife hochzählst geht es schneller da die analyse weg fällt. |
Re: Nextchar Algo zu langsam
Zitat:
Hast Recht, wenn man als sword nicht den ersten char aus scharset übergibt, funktioniert er nicht richtig :pale: //Edit Ist aber nicht weiter schlimm... Kann man den Code vll in inline asm umschreiben? Thx. |
Re: Nextchar Algo zu langsam
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz