Listy i drzewa - main5.amu.edu.pl
Transkrypt
Listy i drzewa - main5.amu.edu.pl
Algorytmy i programowanie Listy i drzewa Lista jednokierunkowa Lista jednokierunkowa to ciąg elementów, w którym każdy zawiera atrybuty: key i next, gdzie dla dowolnego elementu x listy next [x] wskazuje następny element po x. Wartość elementu x odczytujemy przez key [x] , a następnego elementu po x - key [next [x]] . Listę reprezentujemy przez obiekt L, który zawiera atrybuty: head i tail, wskazujące odpowiednio na pierwszy i ostatni element listy L. Ostatni element listy wskazuje na element pusty NIL. Lista dwukierunkowa W odróżnieniu od listy jednokierunkowej, każdy element listy dwukierunkowej zawiera dodatkowy atrybut prev, wskazujący na element go poprzedzający. Na przykład element listy prev [next [x]] , to tak na prawdę element x. Drzewo binarne Drzewo binarne składa się z elementów, z których każdy posiada atrybuty: key, left, right, gdzie left i right wskazyją na lewego i prawego syna odpowiednio. Drzewo reprezentowane jest przez obiekt z atrybutem root. Drzewo BST (Binary Search Tree) Jest to drzewo binarne z dodatkową własnością, że dla każdego jego węzła x spełnione są nierówności: key [left [x]] ¬ key [x] oraz key [x] ¬ key [right [x]] 1. Napisać w pseudokodzie procedurę ListInsertAfter(L, wsk, x) wstawiającą element x po elemencie wsk w liście L, która jest: a) jednokierunkowa, b) dwukierunkowa. 2. Napisać w pseudokodzie procedurę ListInsert(L, x), która będzie umieszczała element x o zadanym kluczu klucz [x] na właściwym miejscu w posortowanej według kluczy liście dwukierunkowej L. 3. Napisać w pseudokodzie procedurę (może być rekurencyjna), odwracającą kolejność elementów w liście jednokierunkowej L. 4. Zasymulować działanie metod: preorder i inorder, na poniższym drzewie: 5. Napisać w pseudokodzie procedurę TreeAdd(T, x) dodającą węzeł x do drzewa BST T. a) Jak będzie wyglądało drzewo BST dla listy: 65, 78, 18, 99, 3, 45, 79, 80, 61, 128. b) Dlaczego czas działania algorytmu tworzenia drzewa BST z listy n elementowej jest ograniczony z dołu przez Ω (n log n)? Kiedy ten algorytm ma złożoność Ω n2 ?