Alg11.pdf

(429 KB) Pobierz
119
120
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11. ZŁOśONE STRUKTURY DANYCH
11.1. Drzewa dwumianowe (binomial tree)
Jest to drzewo uporządkowane B h o wysokości h składające
się z dwóch drzew B h1 razem powiązanych.
Korzeń jednego drzewa jest skrajnie lewym synem drugiego.
Własności: 1. drzewo B h ma 2*2 h1 = 2 h węzłów ( h –wysokość)
2. na głębokości i znajduje się C(k, i) węzłów, gdzie i = 0,1,…h.
3. stopień korzenia wynosi h i jest większy od stopnia kaŜdego innego węzła.
4. jeŜeli synów korzenia ponumerujemy kolejno od lewej do prawej: h1, h2,…0 to
syn o numerze i jest korzeniem poddrzewa B i .
Katedra Aparatów Elektrycznych
Alg11
Algorytmy i Struktury Danych – wykład/1st
Algorytmy i Struktury Danych – wykład/1st
Dr J. Dokimuk
11.2. Kopiec dwumianowy
Kopiec dwumianowy H jest zbiorem drzew dwumianowych.
Własności kopca dwumianowego:
1. KaŜde drzewo dwumianowe w kopcu H jest
uporządkowane kopcowo, czyli klucz ojca
jest mniejszy niŜ klucz węzła syna.
Klucz w korzeniach drzew kopca jest
najmniejszym kluczem w drzewie.
2. Dla kaŜdego r ≥ 0 istnieje w kopcu dwumianowym
co najwyŜej jedno drzewo dwumianowe,
którego korzeń ma stopień równy r .
Kopiec dwumianowy składa się co najwyŜej z
lg ( n ) + 1 drzew dwumianowych.
Własności pola sibling:
jeŜeli x jest korzeniem, to sibling [ x ] wskazuje na
następny korzeń na liście korzeni .
jeśli x jest ostatnim korzeniem na liście korzeni
to sibling [ x ] = NULL.
Dowolny kopiec H dostępny jest przez wskaźnik
head [H] do pierwszego korzenia na liście korzeni H .
Kopiec nie zawiera elementów to head [H] = NULL.
Operacje na kopcach dwumianowych:
Make_B_Heap () -tworzy nowy, pusty kopiec
Insert_B_Heap ( H , x ) -wstawia węzeł x o kluczu key do kopca H
Min_B_Heap ( H ) zwraca wskaźnik do węzła w z minimalnym kluczem
DelMin_B_Heap (H) -zwraca wskaźnik do węzła z minimalnym
kluczem i węzeł usuwa z H
Union_B_Heap ( H1 , H2 ) -tworzy nowy kopiec ze węzłami H1 i H2
Dec_B_Heap ( H, x, key ) -nadaje kluczowi w węźle x wartość key
Del_B_Heap ( H , x ) -usuwa węzeł x z H
11.2.1. Tworzenie nowego kopca dwumianowego
Funkcja Make_B_Heap () buduje pusty kopiec dwumianowy, przydzielając
pamięć obiektowi, którego adres zwraca.
Dla zwracanego obiektu head [H] = NULL.
Czas wykonania operacji jest stały O(1).
11.2.2. Szukanie minimalnego klucza
Drzewo kopca dwumianowego uporządkowane są
wg minimum, zatem minimalny klucz znajduje się
w korzeniu któregoś drzewa.
Min_B_Heap ( H ) sprawdza kolejno wszystkie korzenie ,
pamiętając bieŜące minimum w zmiennej min , a
wskaźnik do węzła z tym min imum w zmiennej y .
Funkcja zwraca wskaźnik do węzła z minimalnym
kluczem w kopcu dwumianowym H .
ZłoŜoność
B h
B 0
B h1
ukorzenione
poddrzewo
5
10
15
10
12
B h1
21
19
33
16
25
Rys. 11.3. Przykład kopca dwumianowego
Rys. 11.4. Reprezentacja kopca dwumianowego
Rys. 11.1. Przykłady drzew dwumianowych.
Z metodyki montaŜu dwóch drzew B h1 w jedno B h wynika, Ŝe maksymalna głębokość węzła w B h
jest o jeden większa od maksymalnej w B h1 .
Maksymalny stopień węzła w drzewie dwumianowym wynosi lg ( n ).
p[x]
key[x]
degree
key
degree
degree[ x ]
Struktura węzła:
1. wskaźnik do Ojca p [x],
2. klucz key [x],
3. stopień degree[x] –liczba synów ,
4a. wskaźnik do skrajnego lewego syna child[x] ,
4b. wskaźnik do brata z prawej strony sibling[x] .
typedef nodeBinT struct {
nodeBinT *parent;
key x ;
int degree ;
nodeBinT * child , *sibling ;
} * pnodeBinT ;
pnodeBinT head = NULL;
child
child[ x ] sibling
sibling
sibling [x]
2
10
12
Łączenie dwóch drzew dwumianowych
Funkcja Link_B_Tree ( y , z ) dowiązuje drzewo B h1 o korzeniu w węźle y do drzewa
B h1 o korzeniu w węźle z .
Węzeł z staje się ojcem i zostaje korzeniem drzewa B h
Węzeł y zostaje nową głową listy synów węzła z .
Zasada „ na lewo syn, na prawo brat" drzewa dwumianowego:
- w drzewie B h skrajnie lewy syn korzenia jest korzeniem drzewa B h1 .
r
16
Min_B_Heap ( H )
y = NULL // wskaŜnik do węzła z minimum
x = head(H)
min = +inf
while (x ≠ NULL) do
if (key[x] < min) then
min = key [ x ]
y = x
x = sibling [x] //następny wezeł
return y
z
2
2
z
y
degree
degree =
2
degree
degree =
3
1
Link_B_Tree ( y , z )
p[ y ] = z
degree[z] = degree[z] +1
child[z] = y ;
sibling [ y ] = child [z]
y
z
4
1
6
0
y
1
2
3
5
2
4
6
3
5
4
6
7
8
0
obliczeniowa
wynosi
O ( lg(n) ) ,
poniewaŜ
8
7
8
sprawdza się co najwyŜej lg(n) +1 korzeni.
Funkcja działa w czasie stałym.
948295734.1046.png 948295734.1157.png 948295734.1267.png 948295734.1378.png 948295734.001.png 948295734.112.png 948295734.222.png 948295734.333.png 948295734.444.png 948295734.552.png 948295734.563.png 948295734.574.png 948295734.585.png 948295734.596.png 948295734.607.png 948295734.618.png 948295734.629.png 948295734.640.png 948295734.651.png 948295734.662.png 948295734.673.png 948295734.684.png 948295734.695.png 948295734.706.png 948295734.717.png 948295734.728.png 948295734.739.png 948295734.750.png 948295734.761.png 948295734.772.png 948295734.783.png 948295734.794.png 948295734.805.png 948295734.816.png 948295734.827.png 948295734.838.png 948295734.849.png 948295734.860.png 948295734.871.png 948295734.882.png 948295734.893.png 948295734.904.png 948295734.915.png 948295734.926.png 948295734.937.png 948295734.947.png 948295734.958.png 948295734.969.png 948295734.980.png 948295734.991.png 948295734.1002.png 948295734.1013.png 948295734.1024.png 948295734.1035.png 948295734.1047.png 948295734.1058.png 948295734.1069.png 948295734.1080.png 948295734.1091.png 948295734.1102.png 948295734.1113.png 948295734.1124.png 948295734.1135.png 948295734.1146.png 948295734.1158.png 948295734.1169.png 948295734.1180.png 948295734.1191.png 948295734.1201.png 948295734.1212.png 948295734.1223.png 948295734.1234.png 948295734.1245.png 948295734.1256.png 948295734.1268.png 948295734.1279.png 948295734.1290.png 948295734.1301.png 948295734.1312.png 948295734.1323.png 948295734.1334.png 948295734.1345.png 948295734.1356.png 948295734.1367.png 948295734.1379.png 948295734.1390.png 948295734.1401.png 948295734.1412.png 948295734.1423.png 948295734.1434.png 948295734.1445.png 948295734.1456.png 948295734.1467.png 948295734.1478.png 948295734.002.png 948295734.013.png 948295734.024.png 948295734.035.png 948295734.046.png 948295734.057.png 948295734.068.png 948295734.079.png 948295734.090.png 948295734.101.png 948295734.113.png 948295734.124.png 948295734.135.png 948295734.146.png 948295734.157.png 948295734.168.png 948295734.179.png 948295734.190.png 948295734.201.png 948295734.212.png 948295734.223.png 948295734.234.png 948295734.245.png 948295734.256.png 948295734.267.png 948295734.278.png 948295734.289.png 948295734.300.png 948295734.311.png 948295734.322.png 948295734.334.png 948295734.345.png 948295734.356.png 948295734.367.png 948295734.378.png 948295734.389.png 948295734.400.png 948295734.411.png 948295734.422.png 948295734.433.png 948295734.445.png 948295734.456.png 948295734.467.png 948295734.478.png 948295734.489.png 948295734.500.png 948295734.511.png 948295734.522.png 948295734.533.png 948295734.544.png 948295734.553.png 948295734.554.png 948295734.555.png 948295734.556.png 948295734.557.png 948295734.558.png 948295734.559.png 948295734.560.png 948295734.561.png 948295734.562.png 948295734.564.png 948295734.565.png 948295734.566.png 948295734.567.png 948295734.568.png 948295734.569.png 948295734.570.png 948295734.571.png 948295734.572.png 948295734.573.png 948295734.575.png 948295734.576.png 948295734.577.png 948295734.578.png 948295734.579.png 948295734.580.png 948295734.581.png 948295734.582.png 948295734.583.png 948295734.584.png 948295734.586.png 948295734.587.png 948295734.588.png 948295734.589.png 948295734.590.png 948295734.591.png 948295734.592.png 948295734.593.png 948295734.594.png 948295734.595.png 948295734.597.png 948295734.598.png 948295734.599.png 948295734.600.png 948295734.601.png 948295734.602.png 948295734.603.png 948295734.604.png 948295734.605.png 948295734.606.png 948295734.608.png 948295734.609.png 948295734.610.png 948295734.611.png 948295734.612.png 948295734.613.png 948295734.614.png 948295734.615.png 948295734.616.png 948295734.617.png 948295734.619.png 948295734.620.png 948295734.621.png 948295734.622.png 948295734.623.png 948295734.624.png 948295734.625.png 948295734.626.png 948295734.627.png 948295734.628.png 948295734.630.png 948295734.631.png 948295734.632.png 948295734.633.png 948295734.634.png 948295734.635.png 948295734.636.png 948295734.637.png 948295734.638.png 948295734.639.png 948295734.641.png 948295734.642.png 948295734.643.png 948295734.644.png 948295734.645.png 948295734.646.png 948295734.647.png 948295734.648.png 948295734.649.png 948295734.650.png 948295734.652.png 948295734.653.png 948295734.654.png 948295734.655.png 948295734.656.png 948295734.657.png 948295734.658.png 948295734.659.png 948295734.660.png 948295734.661.png 948295734.663.png 948295734.664.png 948295734.665.png 948295734.666.png 948295734.667.png 948295734.668.png 948295734.669.png 948295734.670.png 948295734.671.png 948295734.672.png 948295734.674.png 948295734.675.png 948295734.676.png 948295734.677.png 948295734.678.png 948295734.679.png 948295734.680.png 948295734.681.png 948295734.682.png 948295734.683.png 948295734.685.png 948295734.686.png 948295734.687.png 948295734.688.png 948295734.689.png 948295734.690.png 948295734.691.png 948295734.692.png 948295734.693.png 948295734.694.png 948295734.696.png 948295734.697.png 948295734.698.png 948295734.699.png 948295734.700.png 948295734.701.png 948295734.702.png 948295734.703.png 948295734.704.png 948295734.705.png 948295734.707.png 948295734.708.png 948295734.709.png 948295734.710.png 948295734.711.png 948295734.712.png 948295734.713.png 948295734.714.png 948295734.715.png 948295734.716.png 948295734.718.png 948295734.719.png 948295734.720.png 948295734.721.png 948295734.722.png 948295734.723.png 948295734.724.png 948295734.725.png 948295734.726.png 948295734.727.png 948295734.729.png 948295734.730.png 948295734.731.png 948295734.732.png 948295734.733.png 948295734.734.png 948295734.735.png 948295734.736.png 948295734.737.png 948295734.738.png 948295734.740.png 948295734.741.png 948295734.742.png 948295734.743.png 948295734.744.png 948295734.745.png 948295734.746.png 948295734.747.png 948295734.748.png 948295734.749.png 948295734.751.png 948295734.752.png 948295734.753.png 948295734.754.png 948295734.755.png 948295734.756.png 948295734.757.png 948295734.758.png 948295734.759.png 948295734.760.png 948295734.762.png 948295734.763.png 948295734.764.png 948295734.765.png 948295734.766.png 948295734.767.png 948295734.768.png 948295734.769.png 948295734.770.png 948295734.771.png 948295734.773.png 948295734.774.png 948295734.775.png 948295734.776.png 948295734.777.png 948295734.778.png 948295734.779.png 948295734.780.png 948295734.781.png 948295734.782.png 948295734.784.png 948295734.785.png 948295734.786.png 948295734.787.png 948295734.788.png 948295734.789.png 948295734.790.png 948295734.791.png 948295734.792.png 948295734.793.png 948295734.795.png 948295734.796.png 948295734.797.png 948295734.798.png 948295734.799.png 948295734.800.png 948295734.801.png 948295734.802.png 948295734.803.png 948295734.804.png 948295734.806.png 948295734.807.png 948295734.808.png 948295734.809.png 948295734.810.png 948295734.811.png 948295734.812.png 948295734.813.png 948295734.814.png 948295734.815.png 948295734.817.png 948295734.818.png 948295734.819.png 948295734.820.png 948295734.821.png 948295734.822.png 948295734.823.png 948295734.824.png 948295734.825.png 948295734.826.png 948295734.828.png 948295734.829.png 948295734.830.png 948295734.831.png 948295734.832.png 948295734.833.png 948295734.834.png 948295734.835.png 948295734.836.png 948295734.837.png 948295734.839.png 948295734.840.png 948295734.841.png 948295734.842.png 948295734.843.png 948295734.844.png 948295734.845.png 948295734.846.png 948295734.847.png 948295734.848.png 948295734.850.png 948295734.851.png 948295734.852.png 948295734.853.png 948295734.854.png 948295734.855.png 948295734.856.png 948295734.857.png 948295734.858.png 948295734.859.png 948295734.861.png 948295734.862.png 948295734.863.png 948295734.864.png 948295734.865.png 948295734.866.png 948295734.867.png 948295734.868.png 948295734.869.png 948295734.870.png 948295734.872.png 948295734.873.png 948295734.874.png 948295734.875.png 948295734.876.png 948295734.877.png 948295734.878.png 948295734.879.png 948295734.880.png 948295734.881.png 948295734.883.png 948295734.884.png 948295734.885.png 948295734.886.png 948295734.887.png 948295734.888.png 948295734.889.png 948295734.890.png 948295734.891.png 948295734.892.png 948295734.894.png 948295734.895.png 948295734.896.png 948295734.897.png 948295734.898.png 948295734.899.png 948295734.900.png 948295734.901.png 948295734.902.png 948295734.903.png 948295734.905.png 948295734.906.png 948295734.907.png 948295734.908.png 948295734.909.png 948295734.910.png 948295734.911.png 948295734.912.png 948295734.913.png 948295734.914.png 948295734.916.png 948295734.917.png 948295734.918.png 948295734.919.png 948295734.920.png 948295734.921.png 948295734.922.png 948295734.923.png 948295734.924.png 948295734.925.png 948295734.927.png 948295734.928.png 948295734.929.png 948295734.930.png 948295734.931.png 948295734.932.png 948295734.933.png 948295734.934.png 948295734.935.png 948295734.936.png 948295734.938.png
 
121
122
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11.2.3. Łączenie dwóch kopców dwumianowych
Jest to najwaŜniejsza operacja, za pomocą której definiuje się większość pozostałych.
Funkcja Union_B_Heap ( H1 , H2 ) łączy kopce dwumianowe H 1 i H 2 w jeden kopiec, po czym oba
kopce zostają zniszczone. Jej działanie jest dwuetapowe.
1szy etap: Scalanie listy korzeni kopców w pojedynczą listę H , uporządkowaną według stopni .
Lista H moŜe zawierać najwyŜej dwa korzenie o tym samym stopniu.
2gi etap: Łączenie korzenie o tym samym stopniu, aŜ pozostaną tylko o róŜnych stopniach.
Funkcja działa w czasie O ( lg ( n )) gdzie n = n H1 + n H2 .
Łączenie przypomina dodawania liczb binarnych, przy czym sumowaniu jedynek odpowiada
łączenie dwóch drzew dwumianowych: korzeń z mniejszym kluczem zostaje korzeniem
wynikowego drzewa ('przeniesienia'), a drugi korzeń zostaje jego skrajnie lewym synem.
Zmienne pomocnicze wskazujące na: x aktualnie badany korzeń
prev_x korzeń poprzedzający x
next_x korzeń następny po x
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
Merge_B_Heap (H1, H2): porównuje korzenie na liście korzeni kopców H1 i H2 ,
dodaje korzeń o mniejszym stopniu do listy wynikowej H ,
usuwa dodany korzeń z listy wejściowej.
Funkcja gwarantuje, Ŝe na liście H dwa korzenie o tych samych stopniach są sąsiadami
ZłoŜoność obliczeniowa O( n h1 + n h2 )
JeŜeli połączone kopce okaŜą się puste funkcja Union_B_Heap () kończy działanie.
Algorytmy i Struktury Danych – wykład/1st
Algorytmy i Struktury Danych – wykład/1st
Union_B_Heap ( H1, H2 )
1 H = Make_B_Heap ()
// scalanie listy korzeni H1 I H2 w jedną listę uporządkowaną wg stopni
2 head[H] = Merge_B_Heap (H1, H2)
3 Zwolnij(obiekty H1 i H2) // ale nie listy na które wskazują
4 if (head[H] = NULL) then return H // połączone kopce są puste
// ----------------------------------------- 2gi etap ----------------------------------------------------
6 prev_x = NULL
7 x = head[H] //zmienne pomocnicze
8 next-x = sibling[x]
9 while ( next-x ≠ NULL) do
10 if ( (degree[x] ≠ degree[next_x]) or // badanie czy przypadek 1 lub 2
( sibling[next_x] ≠ NULL and degree[sibling[next_x]] = degree[x]) )
11 then prev_x= x; x = next_x // obsługa przypadku 1 i 2
12 else if (key[x] ≤ key[next_x]) then sibling[x] = sibling[next_x]
// przypadek 3
13 Link _B_Tree (next_x, x)
14 else if (prev_x = NULL)
//przypadek 4
15 then head[H] = next_x
16
else sibling[prec_x] = next_x
17
Link _B_Tree (x, next_x)
18
x = next_x //aktualizacja x przed następnym obiegiem
19 next_x = sibling[x]
20 return H
6 ÷ 8 ustawienie zmiennych pomocniczych.
9 ÷ 10 badane są stopnie węzłów x , next_x oraz sibling [ next_x ] w celu podjęcia decyzji o
ewentualnym scalaniu.
11 występuje przypadek 1 , zatem nie ma łączenia tylko przemieszczenie wskaźników.
12 next_x jest usuwane z listy korzeni, zaś w 13 next_x zostaje skrajnie lewym synem x .
14 ÷ 16 węzeł x jest usuwany z listy korzeni. ( 15 gdy x jest 1-szym korzeniem na liście)
17 węzeł x zostaje skrajnie lewym synem next_x.
19 next_x ma wskazywać węzeł występujący po nowym węźle (wspólne dla wszystkich przypadków).
Rys. 11.5. Łączenie dwóch kopców dwumianowych
Przypadek 1: gdy x jest korzeniem drzewa B h1 zaś next_x drzewa B h2 , dla h2 > h1.
tzn. degree[x] ≠ degree[next_x].
Nie są podejmowanie Ŝadne czynności, poza przesuwaniem wskaźników.
Przypadek 2: na liście znajdują się 3 korzenie o tym samym stopniu, następuje przesunięcie
wskaźników roboczych, co jest przygotowaniem do scalenia w następnym kroku.
Wystąpi przy scaleniu dwóch drzew w jedno B h gdy dwa następne są teŜ typy B h
Przypadek 3 i 4: gdy x jest 1szym z dwóch korzeni o tym samym stopniu .
Łączone są drzewa x i next_x we właściwej kolejności (zachowanie kopcowatości).
11.2.4. Wstawianie węzła
Wstawienie węzła stanowi szczególny przypadek
Union_B_Heap ( H1, H2 ) (łączenie z kolejką jednoelementową).
Funkcja tworzy 1 węzłowy kopiec dwumianowy H1 w czasie O(1)
i łączy go z n -węzłowym kopcem dwumianowym w czasie O(lg(n)).
Tymczasowy kopiec H1 zostaje zniszczony.
Insert_B_Heap ( H, x )
H1 = Make_B_Heap()
p[x] = NULL; degree[x] = 0
child[x] = NULL
sibling[x] = NULL
head( H1 ) = x
H = Union_B_Heap ( H, H1 )
(3) gdy key[x] ≤ key[next_x]; next_x jest podczepiane pod x .
(4) gdy key[x] > key[next_x]; x jest podczepiane pod next_x .
948295734.939.png 948295734.940.png 948295734.941.png 948295734.942.png 948295734.943.png 948295734.944.png 948295734.945.png 948295734.946.png 948295734.948.png 948295734.949.png 948295734.950.png 948295734.951.png 948295734.952.png 948295734.953.png 948295734.954.png 948295734.955.png 948295734.956.png 948295734.957.png 948295734.959.png 948295734.960.png 948295734.961.png 948295734.962.png 948295734.963.png 948295734.964.png 948295734.965.png 948295734.966.png 948295734.967.png 948295734.968.png 948295734.970.png 948295734.971.png 948295734.972.png 948295734.973.png 948295734.974.png 948295734.975.png 948295734.976.png 948295734.977.png 948295734.978.png 948295734.979.png 948295734.981.png 948295734.982.png 948295734.983.png 948295734.984.png 948295734.985.png 948295734.986.png 948295734.987.png 948295734.988.png 948295734.989.png 948295734.990.png 948295734.992.png 948295734.993.png 948295734.994.png 948295734.995.png 948295734.996.png 948295734.997.png 948295734.998.png 948295734.999.png 948295734.1000.png 948295734.1001.png 948295734.1003.png 948295734.1004.png 948295734.1005.png 948295734.1006.png 948295734.1007.png 948295734.1008.png 948295734.1009.png 948295734.1010.png 948295734.1011.png 948295734.1012.png 948295734.1014.png 948295734.1015.png 948295734.1016.png 948295734.1017.png 948295734.1018.png 948295734.1019.png 948295734.1020.png 948295734.1021.png 948295734.1022.png 948295734.1023.png 948295734.1025.png 948295734.1026.png 948295734.1027.png 948295734.1028.png 948295734.1029.png 948295734.1030.png 948295734.1031.png 948295734.1032.png 948295734.1033.png 948295734.1034.png 948295734.1036.png 948295734.1037.png 948295734.1038.png 948295734.1039.png 948295734.1040.png 948295734.1041.png 948295734.1042.png 948295734.1043.png 948295734.1044.png 948295734.1045.png 948295734.1048.png 948295734.1049.png 948295734.1050.png 948295734.1051.png 948295734.1052.png 948295734.1053.png 948295734.1054.png 948295734.1055.png 948295734.1056.png 948295734.1057.png 948295734.1059.png 948295734.1060.png 948295734.1061.png 948295734.1062.png 948295734.1063.png 948295734.1064.png 948295734.1065.png 948295734.1066.png 948295734.1067.png 948295734.1068.png 948295734.1070.png 948295734.1071.png 948295734.1072.png 948295734.1073.png 948295734.1074.png 948295734.1075.png 948295734.1076.png 948295734.1077.png 948295734.1078.png 948295734.1079.png 948295734.1081.png 948295734.1082.png 948295734.1083.png 948295734.1084.png 948295734.1085.png 948295734.1086.png 948295734.1087.png 948295734.1088.png 948295734.1089.png 948295734.1090.png 948295734.1092.png 948295734.1093.png 948295734.1094.png 948295734.1095.png 948295734.1096.png 948295734.1097.png 948295734.1098.png 948295734.1099.png 948295734.1100.png 948295734.1101.png 948295734.1103.png 948295734.1104.png 948295734.1105.png 948295734.1106.png 948295734.1107.png 948295734.1108.png 948295734.1109.png 948295734.1110.png 948295734.1111.png 948295734.1112.png 948295734.1114.png 948295734.1115.png 948295734.1116.png 948295734.1117.png 948295734.1118.png 948295734.1119.png 948295734.1120.png 948295734.1121.png 948295734.1122.png 948295734.1123.png 948295734.1125.png 948295734.1126.png 948295734.1127.png 948295734.1128.png 948295734.1129.png 948295734.1130.png 948295734.1131.png 948295734.1132.png 948295734.1133.png 948295734.1134.png 948295734.1136.png 948295734.1137.png 948295734.1138.png 948295734.1139.png 948295734.1140.png 948295734.1141.png 948295734.1142.png 948295734.1143.png 948295734.1144.png 948295734.1145.png 948295734.1147.png 948295734.1148.png 948295734.1149.png 948295734.1150.png 948295734.1151.png 948295734.1152.png 948295734.1153.png 948295734.1154.png 948295734.1155.png 948295734.1156.png 948295734.1159.png 948295734.1160.png 948295734.1161.png 948295734.1162.png 948295734.1163.png 948295734.1164.png 948295734.1165.png 948295734.1166.png 948295734.1167.png 948295734.1168.png 948295734.1170.png 948295734.1171.png 948295734.1172.png 948295734.1173.png 948295734.1174.png 948295734.1175.png 948295734.1176.png 948295734.1177.png 948295734.1178.png 948295734.1179.png 948295734.1181.png 948295734.1182.png 948295734.1183.png 948295734.1184.png 948295734.1185.png 948295734.1186.png 948295734.1187.png 948295734.1188.png 948295734.1189.png 948295734.1190.png 948295734.1192.png 948295734.1193.png 948295734.1194.png 948295734.1195.png
 
123
124
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11.2.5. Usuwanie węzła z minimalnym kluczem
Funkcja DelMin_B_Heap ( H ) znajduje, zwraca i usuwa z listy H węzeł z najmniejszym kluczem.
Gdzie naleŜy szukać najmniejszego klucza ?
Następnie łączy listy synów usuniętego węzła z H .
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11.2.6. Zmniejszanie wartości klucza
Funkcja Dec_B_Heap ( H, x, key ) nadaje kluczowi w węźle x nową wartość key .
Gdy key jest większe od bieŜącego klucza w x generowany jest błąd.
Wykonuje się podobnie jak poprawianie zwykłego kopca przy wstawianiu elementu:
- Przesuwaj zmniejszony klucz w górę swojego drzewa dwumianowego,
- Zamieniaj miejscami (gdy trzeba) z Ojcem aŜ odtworzony zostanie warunek kopca.
Algorytmy i Struktury Danych – wykład/1st
Algorytmy i Struktury Danych – wykład/1st
DelMin_B_Heap ( H )
Znajdź (korzeń x z minimalnym kluczem na liście korzeni )
Usuń ( korzeń x z listy korzeni )
Odwróć ( kolejność elementów ze względu na stopień na liście synów węzła x )
Utwórz ( ze skrajnym lewym drzewem i odwróconą listą synów nowy kopiec H1 ) .
H = Union_B_Heap ( H , H1 )
return x
Dec_B_Heap ( H, x, k )
if k > key [x] then Error( zla wartość klucza)
key[x] = k
y = x
z = p [y]
while ( z ≠ NULL and key[y] < key[z] ) do
Swap( key[y], key[z] )
y = z; z = p[y]
// operacja Swap realizowana jest na wartościach
wszystkich pól.
W pętli while klucz węzła y ( syn ) porównywany
jest z kluczem węzła z ( Ojciec ).
JeŜeli naruszony jest porządek kopcowy to:
-zamieniany jest klucz syna z Ojcem,
-wskaźnik y jest przesunięty o jeden poziom
w górę drzewa do z ,
-rozpoczyna się nowa iteracja.
nodeBinT struc {
nodeBinT * p arent;
typK key ;
int degree ;
nodeBinT * child ;
nodeBinT * sibling ;
typData Data ;
}
ZłoŜoność obliczeniowa wynosi O ( lg(n) ).
14
11
15
41
36
10
18
26
19
33
21
12
16
55
(
)
28
22
29
17
14
11
15
41
36
10
18
25
26
19
33
21
12
16
55
28
29
17
41
36
18
25
26
19
33
21
12
16
55
28
22
29
17
14
11
15
14
11
15
25
26
26
19
33
19
33
10
12
12
16
16
Odwrócona lista synów węzła
28
28
21
21
29
17
29
17
25
25
Rys. 11.7. Zmniejszanie wartości klucza
26
21
12
36
19
16
41
28
18
28
22
29
17
11.2.7. Usunięcie węzła
Funkcja Del_B_Heap ( H , x ) usuwa węzeł z zawartością, poprzez
przypisanie mu wartości –inf .
Węzeł z kluczem –inf jest wypychany w górę aŜ do korzenia,
poczym korzeń jest usuwany. ZłoŜoność obliczeniowa O ( lg(n) ).
55
Del_B_Heap ( H , x )
Dec_B_Heap(H, x, –inf )
DelMin_B_Heap(H)
25
i
jak na Rys.9.31
28
18
36
41
26
19
55
21
12
16
28
22
29
17
25
Rys. 11.6. Usuwanie węzła z minimalnym kluczem
ZłoŜoność obliczeniowa wynosi O ( lg(n) ) .
Rys. 11.8. Usuwanie klucza
948295734.1196.png 948295734.1197.png 948295734.1198.png 948295734.1199.png 948295734.1200.png 948295734.1202.png 948295734.1203.png 948295734.1204.png 948295734.1205.png 948295734.1206.png 948295734.1207.png 948295734.1208.png 948295734.1209.png 948295734.1210.png 948295734.1211.png 948295734.1213.png 948295734.1214.png 948295734.1215.png 948295734.1216.png 948295734.1217.png 948295734.1218.png 948295734.1219.png 948295734.1220.png 948295734.1221.png 948295734.1222.png 948295734.1224.png 948295734.1225.png 948295734.1226.png 948295734.1227.png 948295734.1228.png 948295734.1229.png 948295734.1230.png 948295734.1231.png 948295734.1232.png 948295734.1233.png 948295734.1235.png 948295734.1236.png 948295734.1237.png 948295734.1238.png 948295734.1239.png 948295734.1240.png 948295734.1241.png 948295734.1242.png 948295734.1243.png 948295734.1244.png 948295734.1246.png 948295734.1247.png 948295734.1248.png 948295734.1249.png 948295734.1250.png 948295734.1251.png 948295734.1252.png 948295734.1253.png 948295734.1254.png 948295734.1255.png 948295734.1257.png 948295734.1258.png 948295734.1259.png 948295734.1260.png 948295734.1261.png 948295734.1262.png 948295734.1263.png 948295734.1264.png 948295734.1265.png 948295734.1266.png 948295734.1269.png 948295734.1270.png 948295734.1271.png 948295734.1272.png 948295734.1273.png 948295734.1274.png 948295734.1275.png 948295734.1276.png 948295734.1277.png 948295734.1278.png 948295734.1280.png 948295734.1281.png 948295734.1282.png 948295734.1283.png 948295734.1284.png 948295734.1285.png 948295734.1286.png 948295734.1287.png 948295734.1288.png 948295734.1289.png 948295734.1291.png 948295734.1292.png 948295734.1293.png 948295734.1294.png 948295734.1295.png 948295734.1296.png 948295734.1297.png 948295734.1298.png 948295734.1299.png 948295734.1300.png 948295734.1302.png 948295734.1303.png 948295734.1304.png 948295734.1305.png 948295734.1306.png 948295734.1307.png 948295734.1308.png 948295734.1309.png 948295734.1310.png 948295734.1311.png 948295734.1313.png 948295734.1314.png 948295734.1315.png 948295734.1316.png 948295734.1317.png 948295734.1318.png 948295734.1319.png 948295734.1320.png 948295734.1321.png 948295734.1322.png 948295734.1324.png 948295734.1325.png 948295734.1326.png 948295734.1327.png 948295734.1328.png 948295734.1329.png 948295734.1330.png 948295734.1331.png 948295734.1332.png 948295734.1333.png 948295734.1335.png 948295734.1336.png 948295734.1337.png 948295734.1338.png 948295734.1339.png 948295734.1340.png 948295734.1341.png 948295734.1342.png 948295734.1343.png 948295734.1344.png 948295734.1346.png 948295734.1347.png 948295734.1348.png 948295734.1349.png 948295734.1350.png 948295734.1351.png 948295734.1352.png 948295734.1353.png 948295734.1354.png 948295734.1355.png 948295734.1357.png 948295734.1358.png 948295734.1359.png 948295734.1360.png 948295734.1361.png 948295734.1362.png 948295734.1363.png 948295734.1364.png 948295734.1365.png 948295734.1366.png 948295734.1368.png 948295734.1369.png 948295734.1370.png 948295734.1371.png 948295734.1372.png 948295734.1373.png 948295734.1374.png 948295734.1375.png 948295734.1376.png 948295734.1377.png 948295734.1380.png 948295734.1381.png 948295734.1382.png 948295734.1383.png 948295734.1384.png 948295734.1385.png 948295734.1386.png 948295734.1387.png 948295734.1388.png 948295734.1389.png 948295734.1391.png 948295734.1392.png 948295734.1393.png 948295734.1394.png 948295734.1395.png 948295734.1396.png 948295734.1397.png 948295734.1398.png 948295734.1399.png 948295734.1400.png 948295734.1402.png 948295734.1403.png 948295734.1404.png 948295734.1405.png 948295734.1406.png 948295734.1407.png 948295734.1408.png 948295734.1409.png 948295734.1410.png 948295734.1411.png 948295734.1413.png 948295734.1414.png 948295734.1415.png 948295734.1416.png 948295734.1417.png 948295734.1418.png 948295734.1419.png 948295734.1420.png 948295734.1421.png 948295734.1422.png 948295734.1424.png 948295734.1425.png 948295734.1426.png 948295734.1427.png 948295734.1428.png 948295734.1429.png 948295734.1430.png 948295734.1431.png 948295734.1432.png 948295734.1433.png 948295734.1435.png 948295734.1436.png 948295734.1437.png 948295734.1438.png 948295734.1439.png 948295734.1440.png 948295734.1441.png 948295734.1442.png 948295734.1443.png 948295734.1444.png 948295734.1446.png 948295734.1447.png 948295734.1448.png
125
126
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11.3. Kopce Fibonacciego
Kopce Fibonacciego zostały wynalezione przez Fredmana i Tarjana w 1984 roku.
Kopiec Fibonacciego to lista drzew , z których kaŜde spełnia warunek kopca.
Katedra Aparatów Elektrycznych
Alg11
Algorytmy i Struktury Danych – wykład/1st
Algorytmy i Struktury Danych – wykład/1st
Dr J. Dokimuk
è
Idea operacji na kopcach Fibonacciego: maksymalnie opóźnić reorganizację jego struktury.
Pozwala to magazynować potencjał, który w odpowiednim momencie jest zuŜywany na
bardziej czasochłonne operacje. Taka metodyka amortyzuje całkowity czas
operacji wykonywanych na kopcu czyniąc go względnie niskim.
Nie są to drzewa dwumianowe i NIE są uporządkowane względem stopni korzeni.
Niech w drzewie dwumianowym nieuporządkowanym korzeń ma stopień k to synowie
korzenia, są korzeniami poddrzew o stopniach 0 , 1 ,…, k-1 , ułoŜonymi w dowolnej kolejności.
Atrybuty kopca Fibonacciego H :
MIN [ H ] wskaźnik do korzenia drzewa zawierającego najmniejszy klucz,
jeśli kopiec H jest pusty, to MIN[ H ] = NULL .
n [ H ] liczba węzłów naleŜących aktualnie do H .
Korzenie drzew w kopcu Fibonacciego połączone za pomocą wskaźników left i
right w cykliczną listę dwukierunkową, zwaną listą korzeni kopca Fibonacciego.
Kolejność drzew na liście korzeni jest dowolna.
+
+
Wstawiając nowy węzeł lub łącząc dwa kopce , nie skleja się drzew w kopcu Fibonacciego.
Odkładamy to do operacji EXTRACT-MlN, kiedy musimy znaleźć nowy węzeł minimalny.
Teoretycznie są one niezwykle przydatne, gdy liczba operacji Del_Min oraz Del
jest niewielka w stosunku do liczby pozostałych operacji.
Operacje na kopcu Fibonacciego, które nie reorganizują jego struktury:
Make_F_Heap () -tworzy i zwraca nowy, pusty kopiec,
Insert_F_Heap (H, x) -wstawia do kopca H węzeł x o danym kluczu key ,
Min_F_Heap (H) -zwraca wskaźnik do węzła w kopcu H , który zawiera minimalny klucz,
Union_F_Heap (H1, H2) -łączy dwa kopce H1 i H2 w jeden nowy kopiec H.
Operacje na kopcu Fibonacciego, które reorganizacją jego strukturę :
Del_Min_F_Heap (H) -usuwa z kopca H węzeł o minimalnym kluczu, zwraca wskaźnik do tego węzła;
Dec_F_Heap (H, x,key) -nadaje kluczowi w węźle x kopca H wartość key, nie większą od poprzedniej;
Del_F_Heap (H, x) -usuwa węzeł x z kopca H .
9.6.1. Tworzenie nowego kopca Fibonacciego
Funkcja Make_F_Heap () rezerwuje pamięć i zwraca obiekt H , reprezentujący kopiec
Fibonacciego o atrybutach: n[H] = 0 , MIN[H] = NULL .
PoniewaŜ t(H) = 0 oraz m(H) = 0 , potencjał pustego kopca Φ(H) = 0 , zatem koszt zamortyzowany
funkcji jest równy jej kosztowi faktycznemu O(1);
11.3.2. Wstawianie węzła
Realizuje funkcja Insert_F_Heap ( H, x ), dodając do listy korzeni nowy węzeł.
Zakłada się, Ŝe sam węzeł x z wartością klucza key został juŜ utworzony .
Struktura węzła:
1. p[x] wskaźnik do Ojca,
2. child[x] wskaźnik do syna
któregokolwiek ,
3. key[x] pole kluczy,
4. mark[x ] -czy węzeł x stracił
syna od ostatniej chwili, kiedy
sam został synem innego węzła
(węzeł zaznaczony ),
4. degree[x] - liczba węzłów na
liście synów ,
5a. right [ x ] - wskaźnik do prawego
brata,
5b. left [ x ] - wskaźnik do lewego brata
Synowie węzła x powiązani są
cykliczna listą dwukierunkową .
Do analizy efektywności operacji
na kopcach Fibonacciego stosuje
się metodę potencjału.
Oznaczenia: t ( H ) -liczba drzew na liście korzeni H ,
m ( H ) -liczba zaznaczonych węzłów w H .
Potencjał kopca Fibonacciego H określa zaleŜność: Φ(H) = t(H) + 2m(H)
Potencjał zbioru kopców Fibonacciego jest sumą potencjałów kopców składowych.
Jednostka potencjału moŜe opłacić wykonanie pewnej stałej pracy, przy czym wielkość tej stałej
jest na tyle duŜa, Ŝeby pokryć koszt dowolnej spośród występujących w algorytmach
operacji wykonywalnych w czasie stałym.
Są ulepszeniem kopców dwumianowych, co pozwoliło uzyskać stały, zamortyzowanym koszt
operacji DecreaseKey , dominującej w algorytmie Dijkstry i podobnych.
Dla grafów gęstych stały zamortyzowany czas wykonania DecreaseKey jest po zsumowaniu
lepszy niŜ czas O(lg(n)) wykonania tej operacji na kopcach binarnych lub dwumianowych.
Asymptotycznie najszybsze algorytmy wyznaczające minimalne drzewo rozpinające lub
najkrótsze ścieŜki z ustalonego węzła wykorzystują kopce Fibonacciego .
Jednak złoŜona implementacja kopców Fibonacciego powoduje, Ŝe w większości
zastosowań wygodniej jest uŜywać zwykłych kopców binarnych.
Insert_F_Heap ( H, x )
p[x] = NULL; child[x] = NULL
degree[x] = 0
left[x] = x; right[x] = x
mark[x] = FALSE
Połącz (listę korzeni korzeni H z x )
if (MIN[X]=NULL) or (key[x]<key[MIN[H]])
then MIN[H] = x // ewentualna aktualizacja wskaźnika
n[H] = n[H]+1 // sygnalizacja dodania nowego węzła .
Rys. 11.9. Kopiec Fibonacciego
Węzeł x staje się drzewem z własnością kopca, po
dodaniu do listy korzeni, zostaje lewym bratem korzenia.
*
Rys. 11.10. Wstawianie węzła
Funkcja nie sklejać drzew w kopcu Fibonacciego.
Dla k kolejnych operacji Insert do listy korzeni zostanie dodanych k drzew jednowęzłowych.
Wykonanie operacji Insert zwiększa potencjał kopca o 1 w stosunku do wartości pierwotnej.
Faktyczny koszt Insert wynosi O(1), zatem koszt zamortyzowany to O(1) + 1 = O(1).
11.3.3. Wyszukiwanie węzła minimalnego
Wskaźnik MIN[H] wskazuje na węzeł minimalny w kopcu Fibonacciego H
MoŜna go znaleźć w faktycznym czasie O(1).
Potencjał kopca H przy tej operacji nie zmienia się, zatem koszt zamortyzowany jest równy
kosztowi faktycznemu O(1).
948295734.1449.png 948295734.1450.png 948295734.1451.png 948295734.1452.png 948295734.1453.png 948295734.1454.png 948295734.1455.png 948295734.1457.png 948295734.1458.png 948295734.1459.png 948295734.1460.png 948295734.1461.png 948295734.1462.png 948295734.1463.png 948295734.1464.png 948295734.1465.png 948295734.1466.png 948295734.1468.png 948295734.1469.png 948295734.1470.png 948295734.1471.png 948295734.1472.png 948295734.1473.png 948295734.1474.png 948295734.1475.png 948295734.1476.png 948295734.1477.png 948295734.1479.png 948295734.1480.png 948295734.1481.png 948295734.1482.png 948295734.1483.png 948295734.1484.png 948295734.1485.png 948295734.1486.png 948295734.1487.png 948295734.1488.png 948295734.003.png 948295734.004.png 948295734.005.png 948295734.006.png 948295734.007.png 948295734.008.png 948295734.009.png 948295734.010.png 948295734.011.png 948295734.012.png 948295734.014.png 948295734.015.png 948295734.016.png 948295734.017.png 948295734.018.png 948295734.019.png 948295734.020.png 948295734.021.png 948295734.022.png 948295734.023.png 948295734.025.png 948295734.026.png 948295734.027.png 948295734.028.png 948295734.029.png 948295734.030.png 948295734.031.png 948295734.032.png 948295734.033.png 948295734.034.png 948295734.036.png 948295734.037.png 948295734.038.png 948295734.039.png 948295734.040.png 948295734.041.png 948295734.042.png 948295734.043.png 948295734.044.png 948295734.045.png 948295734.047.png 948295734.048.png 948295734.049.png 948295734.050.png 948295734.051.png 948295734.052.png 948295734.053.png 948295734.054.png 948295734.055.png 948295734.056.png 948295734.058.png 948295734.059.png 948295734.060.png 948295734.061.png 948295734.062.png 948295734.063.png 948295734.064.png 948295734.065.png 948295734.066.png 948295734.067.png 948295734.069.png 948295734.070.png 948295734.071.png 948295734.072.png 948295734.073.png 948295734.074.png 948295734.075.png 948295734.076.png 948295734.077.png 948295734.078.png 948295734.080.png 948295734.081.png 948295734.082.png 948295734.083.png 948295734.084.png 948295734.085.png 948295734.086.png 948295734.087.png 948295734.088.png 948295734.089.png 948295734.091.png 948295734.092.png 948295734.093.png 948295734.094.png 948295734.095.png 948295734.096.png 948295734.097.png 948295734.098.png 948295734.099.png 948295734.100.png 948295734.102.png 948295734.103.png 948295734.104.png 948295734.105.png 948295734.106.png 948295734.107.png 948295734.108.png 948295734.109.png 948295734.110.png 948295734.111.png 948295734.114.png 948295734.115.png 948295734.116.png 948295734.117.png 948295734.118.png 948295734.119.png 948295734.120.png 948295734.121.png 948295734.122.png 948295734.123.png 948295734.125.png 948295734.126.png 948295734.127.png 948295734.128.png 948295734.129.png 948295734.130.png 948295734.131.png 948295734.132.png 948295734.133.png 948295734.134.png 948295734.136.png 948295734.137.png 948295734.138.png 948295734.139.png 948295734.140.png 948295734.141.png 948295734.142.png 948295734.143.png 948295734.144.png 948295734.145.png 948295734.147.png 948295734.148.png 948295734.149.png 948295734.150.png 948295734.151.png 948295734.152.png 948295734.153.png 948295734.154.png 948295734.155.png 948295734.156.png 948295734.158.png 948295734.159.png 948295734.160.png 948295734.161.png 948295734.162.png 948295734.163.png 948295734.164.png 948295734.165.png 948295734.166.png 948295734.167.png 948295734.169.png 948295734.170.png 948295734.171.png 948295734.172.png 948295734.173.png 948295734.174.png 948295734.175.png 948295734.176.png 948295734.177.png 948295734.178.png 948295734.180.png 948295734.181.png 948295734.182.png 948295734.183.png 948295734.184.png 948295734.185.png 948295734.186.png 948295734.187.png 948295734.188.png 948295734.189.png 948295734.191.png 948295734.192.png 948295734.193.png 948295734.194.png 948295734.195.png 948295734.196.png 948295734.197.png 948295734.198.png 948295734.199.png 948295734.200.png 948295734.202.png 948295734.203.png 948295734.204.png 948295734.205.png 948295734.206.png 948295734.207.png 948295734.208.png 948295734.209.png 948295734.210.png 948295734.211.png 948295734.213.png 948295734.214.png 948295734.215.png 948295734.216.png 948295734.217.png 948295734.218.png
 
127
128
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
11.3.4. Łączenie dwóch kopców Fibonacciego
Funkcja Union_F_Heap ( H1, H2 ) łączy dwa kopce H1 i H2 w jeden nowy kopiec H ,
poprzez połączenie listy korzeni .
Katedra Aparatów Elektrycznych
Alg11 Dr J. Dokimuk
2gi: konsolidacja listy drzew w wyniku której wszystkie korzenie na liście będą
miały róŜne stopnie .
Wykonuje się przejście przez listę korzeni i łączenie drzew jednakowego
stopnia, uaktualniając wskaźnik do korzenia zawierającego najmniejszy klucz.
Realizuje funkcja Consolidate ( H ) .
MoŜna ją zrealizować w czasie proporcjonalnym do liczby konsolidowanych drzew,
wykorzystując Tablicę indeksowaną stopniami korzeni.
Redukcja liczby drzew w kopcu, to wielokrotne powtarzanie poniŜszych operacji:
(aŜ kaŜdy korzeń na liście będzie miał inną wartości pola degree )
1. Znajdź na liście korzeni dwa węzły x i y tego samego stopnia, przy czym key [ x ] ≤ key [ y ].
2. Dołącz ( y do x ): usuń y z listy korzeni i uczyń go synem x (realizuje funkcja Link_F_Heap).
Wartość degree[x] jest zwiększana o 1, a y przestaje być zaznaczone (jeśli był).
Tablica A [ k ] indeksowana stopniami korzeni przechowuje wskaźnik do korzenia stopnia k w
przetworzonej części listy, albo NULL, jeśli w tej części listy korzenia o stopniu k nie ma.
Algorytmy i Struktury Danych – wykład/1st
Algorytmy i Struktury Danych – wykład/1st
Kopce H1 i H2 zostają zniszczone.
Union_F_Heap ( H1, H2 )
H = Make_F_Heap()
MIN[ H ] = MIN[ H1 ] // wstaw stary kopiec H1 do nowego H
Sklej (listę korzeni H2 z listą korzeni H )
if (MIN[H1]==NULL) or (MIN[H2]<>NULL and MIN[H2]<MIN[H1]) then MIN[H] = MIN[H2]
n[H] = n[H1] + n[H2]
Zwolnij_Pamięć (H1 i H2)
return H
Nie występuje porządkowanie względem stopni ani eliminowanie powtórzeń.
*
Inaczej: jeŜeli A[k] = y , to y jest aktualnie korzeniem o wartości pola degree[y] = k .
(każdy węzeł na liście korzeni )
( )
3 przebiegi pętli
(wiersz 211)
po 1szym przejściu pętli
łączenie
(
)
0 1 2 3 4
0 1 2 3 4
Odłaczenie węzła
od listy korzeni
e
(d)
(c)
Rys. 11.11. Łączenie dwóch kopców Fibonacciego
w,x
w,x
w,x
18
52
38
18
52
38
Zmiana potencjału kopca jest równa zero, gdyŜ nowopowstały kopiec H jest strukturą, której lista
korzeni powstała poprzez złaczenie list korzeni kopców H1 i H2 .
Tym samym t(H) = t(H1) + t(H2) , zaś liczba węzłów zaznaczonych równieŜ nie ulega zmianie,
poniewaŜ struktura drzew po złączeniu kopców H1 i H2 pozostaje niezmieniona.
Koszt zamortyzowany operacji Union jest równy kosztowi faktycznemu O(1).
11.3.5. Usuwanie węzła minimalnego
Funkcja Del_Min_F_Heap ( H ) usuwa węzeł z kluczem minimalnym i dokonuje kompletnej
reorganizacji struktury kopca Fibonacciego.
39
41
30
26
46
w
23
39
41
30
26
46
35
35
w A[3] umieszczono
wskaźnik do węzła 7
węzeł dołączony do ,
wskazywanego przez
0 1 2 3 4
0 1 2 3 4
( )
( )
x
18
52
38
18
52
38
Jej działanie jest dwu etapowe.
1szy: usunięcie węzła MIN imum i dodanie
wszystkich jego synów do listy korzeni.
Jeśli z = NULL to kopiec Fibonacciego jest juŜ pusty i
zadanie jest zakończone.
Pętla for usuwa węzeł z z kopca H , i wszystkich jego
synów wstawia na listę korzeni.
Jeśli z = right[ z ], to z był jedynym węzłem na liście
korzeni i nie miał synów, więc naleŜy zazna-
czyć, Ŝe kopiec Fibonacciego jest pusty;
Del_Min_F_Heap ( H )
z = MIN[H] //pamiętanie wsk do węzła min
if ( z = NULL) then return z
for kaŜdy syn x węzła z do
Dodaj ( x do listy korzeni H )
p[ x ] = NULL
Usuń ( z z listy korzeni H )
if (z=right[z]) then MIN[H] = NULL
else MIN[H] = right[z]
Consolidate ( H )
n[H] = n[H]1
return z
39
41
26
46
39
41
24
17
23
w
17
23
w
26
46
30
35
30
35
4ry kolejne przebiegi pętli
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
l
(j) w,x
(i)
w,x
( )
( )
( )
w,x
w,x
18
38
18
52
38
18
38
41
w
przeciwnym razie do wskaźnika min [ H ]
przypisuje się węzeł right [ z ].
21
39
24
17
23
39
41
24
17
23
21
39
41
29
52
52
26
46
30
26
46
30
MIN(
MIN
H)
po usunięciu MIN
(
b)
MIN
MIN(
H)
(
a)
Del_Min_F_Heap( )
35
35
23
223
23
7
21
221
21
3
17
117
17
24
224
24
23
223
23
7
21
221
21
18
52
38
17
117
17
24
224
24
Rys. 11.12. Usuwanie węzła minimalnego: 2gi etap – przetwarzanie od węzła MIN po wskaźnikach right
39
41
30
26
46
Po skróceniu listy korzeni funkcja Consolidate ( H ) kończy działanie.
Zmniejszana jest wartość n[H] i zwracany zostaje wskaźnik do usuniętego węzła z .
Zamortyzowany koszt operacji wynosi O(D( n )) co moŜna oszacować na O(lg(n)).
18
52
38
30
26
46
35
39
41
35
948295734.219.png 948295734.220.png 948295734.221.png 948295734.224.png 948295734.225.png 948295734.226.png 948295734.227.png 948295734.228.png 948295734.229.png 948295734.230.png 948295734.231.png 948295734.232.png 948295734.233.png 948295734.235.png 948295734.236.png 948295734.237.png 948295734.238.png 948295734.239.png 948295734.240.png 948295734.241.png 948295734.242.png 948295734.243.png 948295734.244.png 948295734.246.png 948295734.247.png 948295734.248.png 948295734.249.png 948295734.250.png 948295734.251.png 948295734.252.png 948295734.253.png 948295734.254.png 948295734.255.png 948295734.257.png 948295734.258.png 948295734.259.png 948295734.260.png 948295734.261.png 948295734.262.png 948295734.263.png 948295734.264.png 948295734.265.png 948295734.266.png 948295734.268.png 948295734.269.png 948295734.270.png 948295734.271.png 948295734.272.png 948295734.273.png 948295734.274.png 948295734.275.png 948295734.276.png 948295734.277.png 948295734.279.png 948295734.280.png 948295734.281.png 948295734.282.png 948295734.283.png 948295734.284.png 948295734.285.png 948295734.286.png 948295734.287.png 948295734.288.png 948295734.290.png 948295734.291.png 948295734.292.png 948295734.293.png 948295734.294.png 948295734.295.png 948295734.296.png 948295734.297.png 948295734.298.png 948295734.299.png 948295734.301.png 948295734.302.png 948295734.303.png 948295734.304.png 948295734.305.png 948295734.306.png 948295734.307.png 948295734.308.png 948295734.309.png 948295734.310.png 948295734.312.png 948295734.313.png 948295734.314.png 948295734.315.png 948295734.316.png 948295734.317.png 948295734.318.png 948295734.319.png 948295734.320.png 948295734.321.png 948295734.323.png 948295734.324.png 948295734.325.png 948295734.326.png 948295734.327.png 948295734.328.png 948295734.329.png 948295734.330.png 948295734.331.png 948295734.332.png 948295734.335.png 948295734.336.png 948295734.337.png 948295734.338.png 948295734.339.png 948295734.340.png 948295734.341.png 948295734.342.png 948295734.343.png 948295734.344.png 948295734.346.png 948295734.347.png 948295734.348.png 948295734.349.png 948295734.350.png 948295734.351.png 948295734.352.png 948295734.353.png 948295734.354.png 948295734.355.png 948295734.357.png 948295734.358.png 948295734.359.png 948295734.360.png 948295734.361.png 948295734.362.png 948295734.363.png 948295734.364.png 948295734.365.png 948295734.366.png 948295734.368.png 948295734.369.png 948295734.370.png 948295734.371.png 948295734.372.png 948295734.373.png 948295734.374.png 948295734.375.png 948295734.376.png 948295734.377.png 948295734.379.png 948295734.380.png 948295734.381.png 948295734.382.png 948295734.383.png 948295734.384.png 948295734.385.png 948295734.386.png 948295734.387.png 948295734.388.png 948295734.390.png 948295734.391.png 948295734.392.png 948295734.393.png 948295734.394.png 948295734.395.png 948295734.396.png 948295734.397.png 948295734.398.png 948295734.399.png 948295734.401.png 948295734.402.png 948295734.403.png 948295734.404.png 948295734.405.png 948295734.406.png 948295734.407.png 948295734.408.png 948295734.409.png 948295734.410.png 948295734.412.png 948295734.413.png 948295734.414.png 948295734.415.png 948295734.416.png 948295734.417.png 948295734.418.png 948295734.419.png 948295734.420.png 948295734.421.png 948295734.423.png 948295734.424.png 948295734.425.png 948295734.426.png 948295734.427.png 948295734.428.png 948295734.429.png 948295734.430.png 948295734.431.png 948295734.432.png 948295734.434.png 948295734.435.png 948295734.436.png 948295734.437.png 948295734.438.png 948295734.439.png 948295734.440.png 948295734.441.png 948295734.442.png 948295734.443.png 948295734.446.png 948295734.447.png 948295734.448.png 948295734.449.png 948295734.450.png 948295734.451.png 948295734.452.png 948295734.453.png 948295734.454.png 948295734.455.png 948295734.457.png 948295734.458.png 948295734.459.png 948295734.460.png 948295734.461.png 948295734.462.png 948295734.463.png 948295734.464.png 948295734.465.png 948295734.466.png 948295734.468.png 948295734.469.png 948295734.470.png 948295734.471.png 948295734.472.png 948295734.473.png 948295734.474.png 948295734.475.png 948295734.476.png 948295734.477.png 948295734.479.png 948295734.480.png 948295734.481.png 948295734.482.png 948295734.483.png 948295734.484.png 948295734.485.png 948295734.486.png 948295734.487.png 948295734.488.png 948295734.490.png 948295734.491.png 948295734.492.png 948295734.493.png 948295734.494.png 948295734.495.png 948295734.496.png 948295734.497.png 948295734.498.png 948295734.499.png 948295734.501.png 948295734.502.png 948295734.503.png 948295734.504.png 948295734.505.png 948295734.506.png 948295734.507.png 948295734.508.png 948295734.509.png 948295734.510.png 948295734.512.png 948295734.513.png 948295734.514.png 948295734.515.png 948295734.516.png 948295734.517.png 948295734.518.png 948295734.519.png 948295734.520.png 948295734.521.png 948295734.523.png 948295734.524.png 948295734.525.png 948295734.526.png 948295734.527.png 948295734.528.png 948295734.529.png 948295734.530.png 948295734.531.png 948295734.532.png 948295734.534.png 948295734.535.png 948295734.536.png 948295734.537.png 948295734.538.png 948295734.539.png 948295734.540.png 948295734.541.png 948295734.542.png 948295734.543.png 948295734.545.png 948295734.546.png 948295734.547.png 948295734.548.png 948295734.549.png 948295734.550.png 948295734.551.png
Zgłoś jeśli naruszono regulamin