Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 Struktury danych. 2 Using Data Structures u Records u Lists u Association Lists u Binary Trees u Hierarchical Modelling u Tree Layout.

Podobne prezentacje


Prezentacja na temat: "1 Struktury danych. 2 Using Data Structures u Records u Lists u Association Lists u Binary Trees u Hierarchical Modelling u Tree Layout."— Zapis prezentacji:

1 1 Struktury danych

2 2 Using Data Structures u Records u Lists u Association Lists u Binary Trees u Hierarchical Modelling u Tree Layout

3 3 Rekordy u najprostszą strukturą danych jest rekord u rekord tworzy jedną paczkę z różnych elementów, często różnego typu u np. date(3, feb, 1997) u np. liczba zespolona X + Yi może być zapisana jako rekord c(X, Y)

4 4 Liczby zespolone Liczba zespolona X + Yi jest reprezentowana jako c(X,Y) Predykaty dla dodawania i mnożenia c_add(c(R1,I1), c(R2,I2), c(R3,I3)) :- R3 = R1 + R2, I3 = I1 + I2. c_mult(c(R1,I1), c(R2,I2), c(R3,I3)) :- R3 = R1*R2 - I1*I2, I3 = R1*I2 + R2*I1. Mogą być używane do odejmowania/dzielenia

5 5 Przykład dodawanie 1+3i do 2+Yi Po uproszczeniu wzgl C3 i Y otrzymujemy

6 6 Rekordy u Za pomocą równań na termach można u tworzyć rekordC3 = c(R3, I3) u uzyskać dostęp do pola C2 = c(R2, I2) u underscore _ opisuje zmienną anonimową, każde jej wystąpienie jest inne. Przydaje się do dostępu do pól u D = date(_, M, _)

7 7 Listy u W liście zapisuje się pewną ilość obiektów tego samego typu. u Lista pusta [](list) u konstruktor listowy.(item x list -> list) u specjalna notacja:

8 8 Programowanie z listami u Dwie formy listy L u lista pusta L = [] u lista niepusta L = [F|R] u Połączenie L1 i L2 daje L3 u L1 jest pusta, L3 to L2 u L1 to [F|R], jeśli Z to R połączone z L2 to L3 = [F|Z] append([], L2, L2). append([F|R], L2, [F|Z]) :- append(R,L2,Z).

9 9 Konkatenacja append([], L2, L2). append([F|R], L2, [F|Z]) :- append(R,L2,Z). Łączenie list append([1,2],[3,4],L) odpowiedź L = [1,2,3,4] rozdzielanie list append(X,Y,[1,2]) odp X=[]/\Y=[1,2],X=[1]/\Y=[2],X=[1,2 ]/\Y=[] Czy istnieje lista równa sobie + [1]? append(L,[1],L) daje nieskończone obliczenia!

10 10 Alldifferent Możemy zaprogramować alldifferent używając nierówności alldifferent_neq([]). alldifferent_neq([Y|Ys]) :- not_member(Y,Ys), alldifferent_neq(Ys). not_member(_, []). not_member(X, [Y|Ys]) :- X != Y, not_member(X, Ys). The goal alldifferent_neq([A,B,C]) has one solution

11 11 Tablice u Można reprezentować tablice jako listy list u opis metalowej tablicy 6 x 7 ze 100C na górnym z ze 0C na innych brzegach [[0, 100, 100, 100, 100, 100, 0], [0, _, _, _, _, _, 0], [0, 0, 0, 0, 0, 0, 0]]

12 12 Tablice. Przykład u W rozgrzanej tablicy metalowej każdy punkt ma temperaturę równą średniej temperaturze sąsiadów rows([_,_]). rows([R1,R2,R3|Rs]) :- cols(R1,R2,R3), rows([R2,R3|Rs]). cols([_,_], [_,_], [_,_]). cols([TL,T,TR|Ts],[L,M,R|Ms],[BL,B,BR|Bs]):- M = (T + L + R + B)/4, cols([T,TR|Ts],[M,R|Ms],[B,BR|Bs]).

13 13 Tablice. Przykład  Po zapytaniu rows( plate ) otrzymujemy plate równe [[0, 100, 100, 100, 100, 100, 0], [0, 46.6, 62.5, 66.4, 62.5, 46.6, 0], [0, 24.0, 36.9, 40.8, 36.9, 24.0, 0], [0, 12.4, 20.3, 22.9, 20.3, 12.4, 0], [0, 5.3, 9.0, 10.2, 9.0, 5.3, 0], [0, 0, 0, 0, 0, 0, 0]]

14 14 Listy skojarzeń u lista par jest listą skojarzeń u dostęp do pary za pomocą połówki informacji u np.. Książka telefoniczna [p(peter,5551616), p(kim, 5559282), p(nicole, 5559282)] u nazwiemy ją phonelist

15 15 Należenie do listy member(X, [X|_]). member(X, [_|R]) :- member(X, R). X należy do listy jeżeli jest jej pierwszym elementem, lub należy do jej ogona Możemy znaleźć telefon do Kima member(p(kim,N), phonelist ) Unikalna odpowiedź: N = 5559282

16 16 Przykład

17 17 Typ abstrakcyjny: słownik lookup informacja skojarzona z kluczem newdic buduje pustą listę skojarzeń add key oraz informacje delete key oraz informacje lookup(D,Key,Info):-member(p(Key,Info),D). newdic([]). addkey(D0,K,I,D) :- D = [p(K,I)|D0]. delkey([],_,[]). delkey([p(K,_)|D],K,D). delkey([p(K0,I)|D0],K,[p(K0,I)|D]) :- K != K0, delkey(D0,K,D).

18 18 Modelowanie grafu u Możemy myśleć o grafie skierowanym jako o liście par złożonych z węzła i listy jego sąsiadów [p(fn,[]), p(iw,[fn]), p(ch,[fn]), p(ew,[fn]), p(rf,[ew]), p(wd,[ew]), p(tl,[ch,rf]), p(dr,[iw])] graf ten nazwiemy house

19 19 Znajdywanie poprzedników Poprzednicy węzła to jego bezpośredni poprzednicy oraz ich poprzednicy predecessors(N,D,P) :- lookup(D,N,NP), list_predecessors(NP,D,LP), list_append([NP|LP],P). list_predecessors([],_,[]). list_predecessors([N|Ns],D,[NP|NPs]) :- predecessors(N,D,NP), list_predecessors(Ns,D,NPs).

20 20 Znajdywanie poprzedników list_append([],[]). list_append([L|Ls],All) :- list_append(Ls,A), append(L,A,All). Łączy listę list w jedną listę. Możemy określić poprzedników (tl) używając: predecessors(tl, house, Pre) Odpowiedź to Pre = [ch, rf, fn, ew, fn] Dwa ray znaleźliśmy fn

21 21 Akumulacja u Używanie odpowiedzi policzonej do tej pory w celu przyśpieszenia obliczeń u Zamiast jednego argumentu 2: odpowiedź do tej pory i odpowiedź ostateczna u To jest accumulator pair

22 22 Znajdywanie poprzedników u Lepsza metoda. predecessors(N,D,P0,P) :- lookup(D,N,NP), cumul_predecessors(NP,D,P0,P). cumul_predecessors([],_,P,P). cumul_predecessors([N|Ns],D,P0,P) :- member(N,P0), cumul_predecessors(Ns,D,P0,P). cumul_predecessors([N|Ns],D,P0,P) :- not_member(N,P0), predecessors(N,D,[N|P0],P1), cumul_predecessors(Ns,D,P1,P).

23 23 Drzewa binarne u drzewo puste: null u niepuste: node(t1, i, t2) gdzie t1 i t2 to drzewa, natomiast i to zapamiętany w węźle element danych u programy zgodne z wzorcem (tak, jak dla list) u klauzula dla pustego drzewa u klauzula rekurencyjna dla niepustego

24 24 Drzewa binarne node(node(null,p(k,282),null),p(n,282),node(null,p(p,616),null)) Drzewo binarne z tą samą infornacją co phonelist. Nazywamy je ptree.

25 25 Drzewa binarne traverse(null,[]). traverse(node(T1,I,T2),L) :- traverse(T1,L1), traverse(T2,L2), append(L1,[I|L2],L). Program przeglądający drzewo binarne i zbierający elementy traverse( ptree,L) daje jedną odpowiedź L = [p(k,282),p(n,282),p(p,616)]

26 26 drzewa przeszukiwań binarnych u binary search tree (BST): Drzewo pb; porządek na elementach taki, że dla każdego węzła node(t1,i,t2), każdy element w t1 jest mniejszy niż i oraz każdy element w t2 jest większy niz i u poprzedni przykład to bst u daje implementację słownika

27 27 drzewa przeszukiwań binarnych find(node(_,I,_),E) :- E = I. find(node(L,I,_),E):-less_than(E,I),find(L,E). find(node(_,I,R),E):-less_than(I,E),find(R,E). Szukanie elementu w drzewie bst less_than(p(k,_),p(n,_)). less_than(p(k,_),p(p,_)). less_than(p(n,_),p(p,_)). Weźmy zapytanie find( ptree, p(k,N))z poniższą definicją less_than

28 28 drzewa przeszukiwań binarnych Efektywny słownik: wyszukiwanie, kasowanie i dodawanie w średnim czasie logarytmicznym

29 29 Modelowanie hierarchiczne u Często problemy mają hierarchiczną naturę u Złożone obiekty są kolekcjami obiektów prostszych u modelowanie powinno odzwierciedlać hierarchiczną naturę problemu

30 30 Modelowanie hierarch. Przykład u ciągłe układy RLC u sinusoidalne napięcie i natężenie wyrażane za pomocą liczb zespolonychs: u każdy element układu ma stowarzyszone I oraz V: u układy powstają z łączenia komponentów

31 31 Modelowanie hierarch. Przykład u Napięcie i natężenie to liczby zespolone: V = c(X,Y) u Elementy układu to drzewa z wartościami par. komponetów: E = resistor(100), E = capacitor(0.1), E = inductor(2) u Więzy to kombinacje lub pojedyńcze elementy: C = parallel(E1,E2), C = series(E1,E2), C = E

32 32 Modelowanie hierarch. Przykład. resistor(R,V,I,_) :- c_mult(I,c(R,0),V). inductor(L,V,I,W) :- c_mult(c(0,W*L),I,V). capacitor(C,V,I,W) :- c_mult(c(0,W*C),V,I). circ(resistor(R),V,I,W):-resistor(R,V,I,W). circ(inductor(L),V,I,W):-inductor(L,V,I,W). circ(capacitor(C),V,I,W):-capacitor(C,V,I,W). circ(parallel(C1,C2),V,I,W) :-c_add(I1,I2,I), circ(C1,V,I1,W),circ(C2,V,I2,W). circ(series(C1,C2),V,I,W) :- c_add(V1,V2,V), circ(C1,V1,I,W),circ(C2,V2,I,W).

33 33 Modelowanie hierarch. Przykład Zapytanie circ(series(parallel(resistor(100),capacitor(0.0001)), parallel(inductor(2),resistor(50))),V,I,60). Daje odpowiedź I=c(_t23,_t24) V=c(-103.8*_t24+52.7*_t23,52.7*_t24+103.8*_t23)

34 34 Wygląd drzewa u Drzewa rysowane za pomocą więzów (trudno ręcznie) u Drzewa na tym samym poziomie wyrównywane horyzontalnie u Rożne poziomy oddzielone o co najmniej 10 u Minimalna przerwa pomiędzy węzłami na tym samym poziomie wynosi 10 u Rodzic jest powyżej i pośrodku swoich dzieci u Minimalna szerokość drzewa

35 35 Wygląd drzewa u Można napisać program CLP, który mając zadane drzewo próbuje je narysować spełniając zadane więzy u lista skojarzeń łączy węzeł ze współrzędnymi u predykaty do tworzenia więzów u predykaty do obliczania wysokości u zapytanie minimalizujące

36 36 Wygląd drzewa node(node(node(node(null,kangaroo,null),marsupial,node(null,ko ala,null)),mammal,node(null,monotreme,node(null,platypus,null) )),animal,node(node(node(null,cockatoo,null),parrot(node(null,lo rikeet,null)),bird,node(null,raptor,node(null,eagle,null))))

37 37 Data Structures Summary u Tree constraints provide data structures u accessing and building in the same manner u Records, lists and trees are straightforward u Programs reflect the form of the data struct. u Association lists are useful data structure for attaching information to objects u Hierarchical modelling


Pobierz ppt "1 Struktury danych. 2 Using Data Structures u Records u Lists u Association Lists u Binary Trees u Hierarchical Modelling u Tree Layout."

Podobne prezentacje


Reklamy Google