Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!
Strony WWWSerwery VPSDomenyHostingDarmowy Hosting CBA.pl

Operacje ze względu na poziom struktury.

Posted by Darek on Sierpień 30, 2012

Operacje takie jak dodawanie czy mnożenie jest w większości języków programowania podobnie skonstruowana. Tym co dzieli te języki jest ich podejście do większych struktur, tj. tablice czy listy.

Do wszystkich przykładów użyłem listy 10 elementowe. Operacja to dodanie 3 do każdego elementu. Oraz listy wcześniej zainicjalizowane.

Przy użyciu pętli

W tym przypadku musimy przejrzeć całą listę ręcznie. W C:

Jak widać takie podejście wymaga pewnych elementów:
operacje na całej strukturze wymagają znania ilości elementów(tutaj #define rozmiar_listy 10).
Całkiem prosta operacja zajmuje więcej kodu.
Jednak mam możliwość pełniejszej kontroli nad daną strukturą. Możemy na przykład w każdym obejściu pętli wykonać kilka przypisań, które może przyspieszyć wykonywanie obliczeń:

Aplikowanie operacji do struktury:

Język funkcyjny jakim jest Haskell pozwala na zaaplikowanie pewnego działania to listy(lub innych struktur):

Tym sposobem zmniejszamy kod, lecz tracimy kontrolę na to co się dzieje w środku.

Podejście tablicowe[kolekcji]

Przy tym podejściu operacje zapisywane są podobnie jak operacje na zmiennych pojedynczych.
Przykład w J:

Zalety tego podejścia:
Mniejsza ilość miejsca.
Wynikające z powyższego, program staje się czytelniejszy.
Nie potrzeba nam wielkość tablicy(w powyższym przykładzie).
Wady:
Oddajemy implementacje przeszukiwania struktur twórcy języka. Może się okazać, że nie spełnia ono naszych oczekiwań.

Operowanie poziomem struktury:

Tutaj zaczynają się schody. Stosunkowo łatwo jest wykonywać obliczenia lista/tablica i jakaś pojedyncza jednostka, ale co co jeśli chcemy wykorzystać tablicę 2 2 2 i listę 2-elementową?
Podam kilka przykładów z J:

W pierwszych dwóch linijkach utworzyłem tablicę 2x2x2 o elementach 0-7(i.8).
Aby mógł wyjaśnić wyżej wymienione obliczenia muszę wyjaśnić pojęcie poziomu struktury(ang. Rank) w języku J. Mamy tablicę 4x3x2:

Poziom 0 to wszystkie wartości z osobna, czyli np. 0, 1..23.
Poziom 1 to wartości typu <0,1>, <2,3>..<22,23>
Poziom 2 to wartości typu:

Schemat jest taki sam. Poziom wyżej obejmuje o jeden wymiar więcej.
Teraz zapis:

Mnoży pod-tablicę 2-wymiarową przez tablicę 1-wymiarową. 0 i jeden x 1; 2 i 3 x 2…etc.
Poniższy zapis:

Mnoży każdy element z tablicy y(poziom 0) przez całą tablicę x2(poziom 3). Z czego wychodzi 2 tablicę 2x2x2.

Podsumowując ten sposób, mamy dostępne operacje dopasowaną do ostatniego poziomu, lecz jeśli potrzebujemy innego wyniku możemy zmienić poziom nie uciekając się do pętli.

Last modified on Kwiecień 18, 2013

Categories: Języki programowania
No Comments »

« | Home | »

Leave a Reply