AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nextchar Algo zu langsam

Offene Frage von "xtZ"
Ein Thema von xtZ · begonnen am 22. Jul 2007 · letzter Beitrag vom 22. Jul 2007
Antwort Antwort
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#1

Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:13
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:
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;
Er funktioniert soweit auch ganz gut, aber er ist mir zu langsam, wenn er oft wiederholt wird.
Bsp.:
Delphi-Quellcode:
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);
Hat vll jemand ein paar Ideen, wie man ihn optimieren kann, damit er schneller läuft?
Gibt es vll einen schnelleren Ersatz für die "copy" oder "stringofchar" Funktion etc.?


Danke
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:26
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
Klaus
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:33
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 PermutationPermutation bestimmt auch was
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:33
Const-Angabe bei Strings bringt einiges an Performance da hiermit der overhead der referenzzählung bei Strings nicht mehr nötig ist.

function nextchar(const scharset, sword:string): string;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#5

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:34
Zitat von Klaus01:
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
Wieso keinen Sinn, es generiert sozusagen alle Kombinationsmöglichkeiten aus dem Charset, also so eine Art Brute Force Methode.
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#6

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:38
Zitat von Bernhard Geyer:
Const-Angabe bei Strings bringt einiges an Performance da hiermit der overhead der referenzzählung bei Strings nicht mehr nötig ist.

function nextchar(const scharset, sword:string): string;
Danke, werde ich gleich mal testen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 20:51
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#8

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 21:05
Zitat von SirThornberry:
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.
Hab das mit den Variablen mal geändert.

Hast Recht, wenn man als sword nicht den ersten char aus scharset übergibt, funktioniert er nicht richtig

//Edit
Ist aber nicht weiter schlimm...
Kann man den Code vll in inline asm umschreiben?

Thx.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Nextchar Algo zu langsam

  Alt 22. Jul 2007, 22:30
Und hier die gleiche Frage bei Delphi-Forum.
Wenn schon Doppelpost dann bitte verlinken.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz