PerlGtk.pl

  
Menu główne
use PerlMongers::Warszawa;
use PerlMongers::Krakow;
NG_gRadio
Perl Wyszukiwanie Informacji Część Druga
  przez wrares (221 odsłon)
Wyszukiwanie przeglądowe jest najpopularniejszą formą strategi poszukiwania. Wszyscy wiemy co chcemy znaleźć, ale nie wiemy gdzie to się znajduje. Stajemy przed problemem odnajdywania elementów pasujących do wzorca. Dlatego w tego typu wyszukiwaniu ważnym czynnikiem jest dobrze dobrana struktura. Przykładowo skorzystanie ze struktury którą oferuje hash może okazać się kluczowa dla naszych poszukiwań. Można oczywiście znacznie przyśpieszyć samą operację poszukiwania poprzez sortowanie.
Wyszukiwanie Chybił Trafił to jedno z prostszych wyszukiwań. Może ono trwać w nieskończoność, gdyż nigdy nie potrafimy odpowiedzieć na pytanie Czy element poszukiwany znajduje się w zbiorze. Jeśli przypadkowy element, który otrzymaliśmy nie jest tym oczekiwanym, oddajemy go z powrotem do zbioru i poszukiwanie rozpoczynamy ponownie.
Wyszukiwanie liniowe to prosta forma wyszukiwania elementów w strukturze. Poszukujemy tak długo, aż natrafimy na ten który jest poszukiwany. W poniższym kodzie programu
#!/usr/bin/perl -w

#Deklaracja modułów
use strict;
use warnings;

#Deklaracja zmiennych
my @owoce = ("jabłko","gruszka","śliwka","wiśnia","czereśnia");

my ($poszukiwany,$indeks) = ();

#poszukiwany element
$poszukiwany = "śliwka";

#Sprubujmy go znaleźć
foreach $indeks(@owoce) {
    
  if ($indeks eq $poszukiwany) {
    
    #Jeśli sukces to drukuj
    print "$poszukiwany\n";
    
  }  
    
}

mamy zadeklarowana tablicę z owocami. Owocem który poszukujemy jest śliwka. Aby wyszukać nazwę owocu, po kolei przeglądamy cały koszyk. Czas wyszukiwania jest proporcjonalny do ilości elementów. Stwierdzamy czy przeszukiwanie zakończyło się sukcesem lub porażką. Musimy przejrzeć wszystkie elementy. Dlatego, jeśli wiemy że zbiór jest mały, zawiera niewielką liczbę elementów i jeszcze możemy posortować taką strukturę, to warto zastanowić się czy należy skorzystać z tego rozwiązania.
Zagnieżdżając struktury danych możemy tworzyć coraz bardziej wydajne rozwiązania z uwzględnieniem potrzeb wyszukiwania informacji. Dobrze jest podzielić strukturę na logiczne elementy, rozbudować ją oraz optymalizować. Wiele wydań książek dotyczących środowiska Perla jak i samego programowania w tym języku wspomina o takich rozwiązaniach. Mogą to być tablice tablic, tablice haszy, hasze tablic itp. Załóżmy że mamy taki problem do rozwiązania. Przechowujemy informacje dla pracownika o każdym dniu jego pracy na przestrzeni wielu lat. Wygodnie jest mieć dostęp do tabel z latami a później dopiero odwołać się do dnia jego pracy. Innym przykładem niech będzie struktura katalogów na dysku. Załóżmy że mamy różne parametry wywołania tego samego programu, które przechowujemy w drzewie katalogów. Mamy taki układ

(1)Kod A
1.Dodaj A 
2.Usuń A
3.Zmień A
(2)Kod B
1.Dodaj B
2.Usuń B
3.Zmień B



Najpierw odszukujemy właściwy kod, a następnie procedurę np. Dodaj B. Jeśli brak kodu to poszukiwanie zakończyło się porażką i otrzymujemy bardzo szybką odpowiedź, gdyż przeszukaliśmy informację tylko o kodach nie zagłębiając się w dalszą treść. Pozostałych informacji już nie przetwarzamy. W dokumentacji Perla można znaleźć opisy takich struktur.

#!/usr/bin/perl -w
use strict;
use warnings;

#Deklaracja tablic haszy
my %kod_a = (
    dodaj => 'kwiatek',
    usun  => 'bratek',
    zmien => 'owoc',
);

my %kod_b = (
    dodaj => 'balon',
    usun  => 'koszyk',
    zmien => 'piłka',
);

#poszukiwany wzorzec
my $poszukiwany = 'balon';

my @poszukiwany = (\%kod_a, \%kod_b);

#procedura wyszukiwania
for my $i(@poszukiwany) {
    
#Sukces    
    if ($i->{'dodaj'} eq $poszukiwany) { 
    
        print $i->{'dodaj'};
          
        
    }
#Porażka    
    next if ($i->{'dodaj'} ne 'www');
    
}


Wynik nie jest trudny do przewidzenia.

Cytat:


balon



Przedstawiony program jest tylko przykładem możliwości jakie oferują zagnieżdżone struktury. Resztę można doczytać w dokumentacji, internecie lub książkach.




Powrót
Szukaj w PerlGtk.pl
The Perl Job site
Szukaj kodu :