AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dubletten-Funktion: Dubletten in einem Array
Thema durchsuchen
Ansicht
Themen-Optionen

Dubletten-Funktion: Dubletten in einem Array

Ein Thema von wolfram · begonnen am 11. Jul 2004 · letzter Beitrag vom 12. Jul 2004
Antwort Antwort
wolfram

Registriert seit: 11. Jul 2004
5 Beiträge
 
#1

Dubletten-Funktion: Dubletten in einem Array

  Alt 11. Jul 2004, 17:38
Hallo,
Ich moechte eine Dublettensuchfunktion für einen string-Array programmieren.
Die dublettenfunktion soll eine Art "matching factor" (t) zurueckgeben, so dass
die Übereinstimmung gemessen werden kann. ist t = 0 stimmen die strings 100% ueberein,
bei t=1 unterscheiden sie sich an einer stelle...

Haette jemand einen anderen Vorschlag nach dubletten in einem String zu suchen?
Oder eine function in Assembler, die das ganze beschleunigen wuerde?

Danke!

----------------

Bis jetzt habe ich mir folgenden Ablauf überlegt:

for x := 1 to "Groesse des Array" do

...
for y := 1 to "Groesse des Array" do
...
if (x<>y) then
t := doublette(array[x],array[y]);
if (t=Festgelegtes t, welches nicht ueberschritten werden darf) then
dublette := true //oder aehnlich
end;
end;

end;

//uses math;

function dublette(a,z):integer;
var x,t,Zmin:integer;
begin
Zmin := Min(length(a), length(z));

for x := 1 to zMin do
begin
if (a[x]=z[x]) then inc(t);
...

result := zMin-t;
end
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Dubletten-Funktion: Dubletten in einem Array

  Alt 11. Jul 2004, 18:01
1.) Das müsste eigentlich so in Ordnung sein, denke ich.
2.) Nimm doch bitte die [ delphi ]-Tags
Julian J. Pracht
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#3

Re: Dubletten-Funktion: Dubletten in einem Array

  Alt 11. Jul 2004, 18:06
Naja, nen richtigen Vorschlag hab ich nicht, aber optimier mal deine for Schleifen

Delphi-Quellcode:
for x := 1 to "Groesse des Array" do
  ...
  for y := i+1 to "Groesse des Array" do
    ...
    t := doublette(array[x],array[y]);
    if (t=Festgelegtes t, welches nicht ueberschritten werden darf) then dublette := true //oder aehnlich
  end;
end;

end;
verkürzt die 2te for-Schleife, weil wenn array[1] und array[2] verglichen hast, musst du ja nicht später nochmal array[2] mit array[1] vergleichen.

wenn die 2te for-Schleife mit i+1 anfängt sparst du dir das if x<>y

NACHTRAG:
Achja, die erste for-Schleife dann natürlich nur bis "Groesse des Array -1"
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Dubletten-Funktion: Dubletten in einem Array

  Alt 11. Jul 2004, 18:37
Der zugehoerige Algorithmus nennt sich Levensthein-Distanz.
  Mit Zitat antworten Zitat
wolfram

Registriert seit: 11. Jul 2004
5 Beiträge
 
#5

Re: Dubletten-Funktion: Dubletten in einem Array

  Alt 12. Jul 2004, 11:52
danke für die schnellen antworten!

aber die funktion in assembler zu programmieren wuerde keinen geschwindigkeitszuwachs bringen? ich muss immerhin 100 000 datensaetze in den array einlesen und dann vergleichen!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Dubletten-Funktion: Dubletten in einem Array

  Alt 12. Jul 2004, 13:35
Die for-Schleifen sind jetzt ja optimiert. Assembler bringt bei denen garnichts.
Die Levenshtein-Distanz sollte erst mal funktionieren, dann kann man ueber Assembler vielleicht nachdenken.
Ich bezweifle aber das Assembler hilft. Levenshtein ist einfache lineare Optimierung.
  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 12:11 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