Schrift
[thread]6434[/thread]

Vergleichen verbessern

Leser: 1


<< >> 6 Einträge, 1 Seite
Gast Gast
 2004-07-27 18:02
#85000 #85000
Gibt es möglichkeiten eine vergleichsroutine schneller zu machen?

vorgegeben sind 2 strings zum vergleichen, bei übereinstimmung soll string 1 geändert werden.

z.b

string1 kommt aus datei1, die 1mb groß ist.
string2 kommt aus datei2, welche 50k groß ist.

jetz muss ich string1 mit JEDEM string2 vergleichen, bis etwas gefunden wird ( und wenn es der letzte string aus datei2 ist )

erst wenn string1 mit allen string2 verglichen bzw etwas gefunden wurde kommt der nächste string1.

das ganze dauert bei mir ewig, ich verwende zum vergleichen ein einfaches IF ( string1 = string2 )

gibt es möglichkeiten zb. vorheriges sortieren, arrays, hash
um dies zu beschleunigen.

wie lange dauert ein einziger vergleich?
ist es besser bei einem string mit 50 zeichen nur die ersten 3 zu vergleichen und nur wenn diese stimmen den rest zu vergleichen?

über eine antwort würde ich mich sehr freuen!
THX
kabel
 2004-07-27 18:10
#85001 #85001
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
also hast du zwei for-schleifen in deinem skript?

du hast ja eine moegliche loesung schon genannt:
du kannst z.b. die strings aus datei2 als keys in einen hash packen.
dann reduziert sich die abfrage auf einen hashzugriff.

Quote
%strings_aus_datei_2 = build_hash ("datei2");
foreach my $string (aus "datei1") {
if (defined $strings_aus_datei_2{$string}) {
do_stuff ();
}
}
-- stefan
renee
 2004-07-27 18:21
#85002 #85002
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Guest,27.07.2004, 16:02]das ganze dauert bei mir ewig, ich verwende zum vergleichen ein einfaches IF ( string1 = string2 )[/quote]
Übrigens: Strings vergleicht man mit eq...

Also z.B.:
Code: (dl )
1
2
3
if('string' eq 'hallo'){
print "The strings are equal\n";
}


Ich würde es auch auf jeden Fall mit dem Hash machen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sri
 2004-07-27 18:25
#85003 #85003
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Edit: Ups, verlesen...\n\n

<!--EDIT|sri|1090938513-->
jan
 2004-07-27 18:31
#85004 #85004
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Edit: mhkay, ohne sri's beitrag macht meiner irgendwie keinen sinn ;)\n\n

<!--EDIT|jan|1090938719-->
kabel
 2004-07-27 19:23
#85005 #85005
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
da fallen mir noch zwei module ein:

1. CPAN:Tree::Trie
ein trie ist ein baum, bei dem die zeichen eines strings einen pfad in einem baum bilden. das kann aber mehr als du brauchst.

2. CPAN:Set::Scalar
du kannst die strings aus datei1 als menge betrachten, da dich die reihenfolge nicht interessiert. kann ebenfalls zu viel.

der hash reicht ;-)
-- stefan
<< >> 6 Einträge, 1 Seite



View all threads created 2004-07-27 18:02.