Ordenación por Inserción y Ordenación por Selección Reglas para calcular O Dept. de Computación, Universidade da Coruña alberto.valderruten@udc.es
Ordenación por Inserción (1) procedimiento Ordenación por Inserción (var T[1..n]) para i:=2 hasta n hacer x:=t[i]; j:=i-1; mientras j>0 y T[j]>x hacer T[j+1]:=T[j]; j:=j-1 fin mientras; T[j+1]:=x fin para fin procedimiento
Ordenación por Inserción (2) 3 1 4 1 2 9 5 6 5 3 1 3 4 1 2 9 5 6 5 3 1 3 4 1 2 9 5 6 5 3 1 1 3 4 2 9 5 6 5 3 1 1 2 3 4 9 5 6 5 3 1 1 2 3 4 9 5 6 5 3 1 1 2 3 4 5 9 6 5 3 1 1 2 3 4 5 6 9 5 3 1 1 2 3 4 5 5 6 9 3 1 1 2 3 3 4 5 5 6 9
Ordenación por Inserción (3) - Análisis de casos Peor caso insertar siempre en la primera posición entrada en orden inverso el bucle interno se ejecuta 1 vez en la primera iteración, 2 veces en la segunda,..., n 1 veces en la última: n 1 i=1 i = n(n 1) iteraciones del bucle interno 2 n i=1 i = n(n+1) 2 T (n) = n(n 1) 2 c 1 + (n 1)c 2 + c 3 : polinomio de grado 2 T (n) = Θ(n 2 ) Mejor caso no insertar nunca entrada ordenada el bucle interno no se ejecuta T (n) = (n 1)c 1 + c 2 : polinomio de grado 1 T (n) = Θ(n) T (n) depende también del estado inicial de la entrada
Ordenación por Selección (1) procedimiento Ordenación por Selección (var T[1..n]) para i:=1 hasta n-1 hacer minj:=i; minx:=t[i]; para j:=i+1 hasta n hacer si T[j]<minx entonces minj:=j; minx:=t[j] fin si fin para; T[minj]:=T[i]; T[i]:=minx fin para fin procedimiento
Ordenación por Selección (2) 3 1 4 1 2 9 5 6 5 3 1 3 4 1 2 9 5 6 5 3 1 1 4 3 2 9 5 6 5 3 1 1 2 3 4 9 5 6 5 3 1 1 2 3 4 9 5 6 5 3 1 1 2 3 3 9 5 6 5 4 1 1 2 3 3 4 5 6 5 9 1 1 2 3 3 4 5 6 5 9 1 1 2 3 3 4 5 5 6 9 1 1 2 3 3 4 5 5 6 9
Ordenación por Selección (3) - Análisis de casos T (n) = Θ(n 2 ) sea cual sea el orden inicial (ejercicio) la comparación interna se ejecuta las mismas veces Empíricamente: T (n) no fluctúa más del 15% algoritmo mínimo máximo Inserción 0,004 5,461 Selección 4,717 5,174 Tabla: Tiempos (en segundos) obtenidos para n = 4000 Comparación: algoritmo peor caso caso medio mejor caso Inserción Θ(n 2 ) Θ(n 2 ) Θ(n) Selección Θ(n 2 ) Θ(n 2 ) Θ(n 2 ) Quicksort O(n 2 ) O(nlogn) O(nlogn)
Reglas para calcular O (1) 1. operación elemental = 1 Modelo de Computación
Reglas para calcular O (2) 2. secuencia: S 1 = O(f 1 (n)) S 2 = O(f 2 (n)) S 1 ;S 2 = O(f 1 (n) + f 2 (n)) = O(max(f 1 (n),f 2 (n))) También con Θ
Reglas para calcular O (3) 3. condición: B = O(f B (n)) S 1 = O(f 1 (n)) S 2 = O(f 2 (n)) si B entonces S 1 sino S 2 = O(max(f B (n),f 1 (n),f 2 (n))) Si f 1 (n) f 2 (n) y max(f 1 (n),f 2 (n)) > f B (n) Peor caso Caso medio? f(n): promedio de f 1 y f 2 ponderado con las frecuencias de cada rama O(max(f B (n),f(n)))
Reglas para calcular O (4) 4. iteración: B;S = O(f B,S (n)) n o iter= O(f iter (n)) mientras B hacer S = O(f B,S (n) f iter (n)) ssi el coste de las iteraciones no varía, sino: costes indiv. para i x hasta y hacer S = O(f S (n) n o iter) ssi el coste de las iteraciones no varía, sino: costes indiv. B es comparar 2 enteros = O(1); n o iter = y x + 1
Reglas para calcular O (5) Uso de las reglas: análisis de adentro hacia afuera analizar primero los subprogramas recursividad: intentar tratarla como un ciclo, sino resolver relación de recurrencia Ejemplo: n i=1 i3 función suma (n:entero) : entero {1} s:=0; {2} para i:=1 hasta n hacer {3} s:=s+i*i*i; {4} devolver s fin función El razonamiento ya incluye las aproximaciones Θ(1) en {3} y no hay variaciones Θ(n) en {2} (regla 4) T (n) = Θ(n) (regla 2)
Ordenación por Selección (3) procedimiento Ordenación por Selección (var T[1..n]) {1} para i:=1 hasta n-1 hacer {2} minj:=i; minx:=t[i]; {3} para j:=i+1 hasta n hacer {4} si T[j]<minx entonces {5} minj:=j; minx:=t[j] fin si fin para; {6} T[minj]:=T[i]; T[i]:=minx fin para fin procedimiento
Ordenación por Selección (4) Θ(1) en {5} (regla 2) O(max(Θ(1),Θ(1),0)) = Θ(1) en {4} (regla 3: no estamos en peor caso) S = Θ(1); n o iter=n i Θ(n i) en {3} (regla 4) Θ(1) en {2} y en {6} (regla 2) Θ(n i) en {2-6} (regla 2) { i = 1 S = Θ(n i) varía: i = n 1 Θ(n) Θ(1) n 1 i=1 (n i) = n 1 i=1 n n 1 i=1 i en {1} (regla 4) = (n 1)n n(n 1) : polinomio de grado 2 2 T (n) = Θ(n 2 ) en cualquier caso