Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » perl » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Der letzte Beitrag
nora perl

Meine Frage:
Hallo Welt!
Ich bin neu in Perl, aber ich möchte und muss es wirklich lernen. Ich habe viel eigenständig gelernt, bis ich gerade gestolpert bin, also wäre ich sehr dankbar, wenn Sie mir freundlicherweise dabei helfen würden.
Ich versuche, einen Ansatz zu entwickeln, um den Ähnlichkeitsgrad zweier Eingabezeichenfolgen zu vergleichen. Daher habe ich die Metrik und den Algorithmus zu ihrer Berechnung angegeben. Anschließend habe ich die Länge der beiden zu vergleichenden Zeichenketten verdoppelt, um die Auswirkung auf die Worst-Case-Laufzeit des jeweiligen Algorithmus zu erhalten.
Die Frage wäre, wie könnte ich den Code des Vergleichsalgorithmus in eine wiederverwendbare Funktion strukturieren? Sowie die Erweiterung der Funktion, um dadurch unterschiedliche Ansätze zu entwickeln.

Meine Ideen:
Würden Sie hier einen Blick auf mein Skript werfen:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
!/usr/bin/perl 
use warnings;
use diagnostics;
use Text::Levenshtein;
use Text::Levenshtein qw(distance fastdistance);
use utf8;
use feature qw(say);

my $str1 = "Halli";

my $str2 = "halloechen";

say "Länge von String1 ", length $str1;
say "Länge von String2 ", length $str2;


my $dis = distance("$str1", "$str2");
print"\nDer Abstand zwischen diesen beiden Parametern ist$dis\n";

my (@ar1, @ar2);

   sub levenshtein_dist {

print"\nDie doppelte Länge der beiden Parameter\n";
$str1 = $str1 x 2;
say $str1;

$str2 = $str2 x 2;
say $str2;

say "Länge des doppelten String1 ", length $str1;
say "Länge des doppelten String2 ", length $str2;

$dis = distance("$str1", "$str2");
print"\nder Abstand zwischen diesen verdoppelten Parametern ist $dis\n";

($str1, $str2) = @_ ;

my ($len1, $len2) = (length $str1, length $str2);

$len1 = defined($str1) ? length($str1) : 5*2;
$len2 = defined($str2) ? length($str2) : 10*2;

return $len2 if ($len1 == 10);
return $len1 if ($len2 == 20);

my %mat;

   for (my $i = 0; $i <= $len1; ++$i) {
       $mat{0}{$i} = $i;
       $mat{1}{$i} = 0;
   }
    @ar1 = split //, $str1;
    @ar2 = split //, $str2;

 for (my $j = 1; $j <= $len2; ++$j) {
       my $p = $j * 2;
       my $q = ($j + 1) * 2;
       $mat{$p}{0} = $j;
       for (my $i = 1; $i <= $len1; ++$i) {
           if ($ar1[$i-1] ne $ar2[$j-1]) {
           }
           $mat{$p}{$i} = min($mat{$q}{$i-1},
           $mat{$p}{$i-1} + 1, $mat{$q}{$i} + 1);
       }
   }

   return $mat{$len2*2}{$len1};
}

printf("A is at %d \n", index $str1, "a");
printf("Last l is at %d \n", rindex $str1, "l");
say "\nHier ist die berechnete Funktion der Parameter\n", levenshtein_dist();



Im Anhang finden Sie das bisherige Ergebnis.

Vielen Dank im Voraus, dass Sie mich beim weiteren Lernen unterstützen.

Mit freundlichen Grüßen
nora

nora hat dieses Bild (verkleinerte Version) angehängt:
Ergebnis.png