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

Informatiker Board » Themengebiete » Praktische Informatik » perl » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen perl
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
nora
Grünschnabel


Dabei seit: 28.10.2022
Beiträge: 1

perl Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

28.10.2022 11:37 nora ist offline E-Mail an nora senden Beiträge von nora suchen Nehmen Sie nora in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » perl