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

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 1 von 1 Treffern
Autor Beitrag
Thema: perl
nora

Antworten: 0
Hits: 289
perl 28.10.2022 11:37 Forum: Praktische Informatik


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
Zeige Beiträge 1 bis 1 von 1 Treffern