Download - 1.2.monticulos
![Page 1: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/1.jpg)
Técnicas Avanzadas de Programación - Javier Campos 32
Análisis en el caso peor
• El plan:
– Repaso de conceptos– Montículos y el problema de ordenación– Árboles rojinegros
![Page 2: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/2.jpg)
Técnicas Avanzadas de Programación - Javier Campos 33
Montículos y el problema de ordenación
• Estructura de datos “montículo”
16
78
2 4 1
10
9 3
14
161410 8 7 9 3 2 4 1 ? ? ?11
datonum
12)(2)(
2)(
iiderechoiiizquierdo
hijo
iipadre
numiidatoidatonumiidatoidato
12 si ),12()(2si ),2()(
![Page 3: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/3.jpg)
Técnicas Avanzadas de Programación - Javier Campos 34
Montículos y el problema de ordenación
• Mantenimiento de un montículo:algoritmo monticulea(M:montículo; pri,ult:entero){Pre: M.dato[pri+1]..M.dato[ult] verifican la
propiedad del montículo}principioi:=2*pri; d:=2*pri+1;si iult and M.dato[i]>M.dato[pri]
entonces max:=i sino max:=prifsi;si dult and M.dato[d]>M.dato[max]
entonces max:=dfsi;si maxpri entonces
intercambia(M.dato[pri],M.dato[max]);monticulea(M,max,ult)
fsifin{Post: M.dato[pri]..M.dato[ult] se han permutado y
verifican la propiedad del montículo.}
X
78
2 4 1
10
9 3
14
![Page 4: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/4.jpg)
Técnicas Avanzadas de Programación - Javier Campos 35
Montículos y el problema de ordenación
• Coste del mantenimiento de un montículo:– El coste de “monticulea” para un subárbol de tamaño
n con raíz en el nodo pri es (1) más… el coste de “monticulea” para un subárbol cuya raíz es uno de los hijos del nodo pri.
– El tamaño de los subárboles hijos de pri es, como máximo, 2n/3 (*), por tanto:
– Por el Teorema (Master): T(n) es O(log n)
(*) caso peor: la última fila del árbol está exactamente medio llena
)1()3/2()( nTnT
![Page 5: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/5.jpg)
Técnicas Avanzadas de Programación - Javier Campos 36
Montículos y el problema de ordenación
• Construcción de un montículo:algoritmo construye_montículo(M:montículo)principiopara pri:=M.num div 2 descendiendo hasta 1 hacermonticulea(M,pri,M.num)
fparafin
Cota superior del coste fácil de calcular: hay O(n) llamadas a “monticulea” y cada una tiene un coste como máximo O(log n), por tanto el coste está acotado por O(n log n).(Esta es una cota correcta pero no muy ajustada...)
![Page 6: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/6.jpg)
Técnicas Avanzadas de Programación - Javier Campos 37
Montículos y el problema de ordenación
• Coste de la construcción de un montículo:16
78
2 4 1
10
9 3
14
altura h: 1 nodo
altura h-1: 2 nodos… …
altura 1: 2h-1 nodos
altura 0: entre 1 y 2h nodos(“altura” de un nodo = longitud del camino más largo hasta una hoja)
Cota superior para el coste de “construye_montículo”: suma de las “alturas” de todos los nodos del árbol (completo)
)()1()1()12(
)22)1(2()12(22)(2
1
121
000
nOhnh
hhhihihS
h
hhh
chuleta
h
i
ih
i
ih
i
i
nº total de nodos2h
n
2h+1–1
![Page 7: 1.2.monticulos](https://reader036.vdocuments.co/reader036/viewer/2022073121/55cf9687550346d0338c195b/html5/thumbnails/7.jpg)
Técnicas Avanzadas de Programación - Javier Campos 38
Montículos y el problema de ordenación
• Ordenación por el método del montículo:
algoritmo ordena(M:montículo)principioconstruye_montículo(M);para ult:=M.num descendiendo hasta 2 hacerintercambia(M.dato[1],m.dato[ult]);monticulea(M,1,ult-1)
fparafin
Coste: O(n log n), porque “construye_montículo” es O(n) y cada una de las n-1 llamadas a “monticulea” es O(log n).