algoritmos y estructuras de datos ii ejemplo algoritmo comando for análisis 4 número de...

82
Introducción Motivación Ordenación por selección Número de operaciones de un programa (función ops) Ordenación por inserción Resumen Algoritmos y Estructuras de Datos II Ordenación elemental 11 y 13 de marzo de 2019 Ordenación elemental Algoritmos y Estructuras de Datos II

Upload: others

Post on 21-Jun-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Algoritmos y Estructuras de Datos II

Ordenación elemental

11 y 13 de marzo de 2019

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 2: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Contenidos

1 Introducción2 Motivación3 Ordenación por selección

IdeaEjemploAlgoritmoComando forAnálisis

4 Número de operaciones de un programa (función ops)5 Ordenación por inserción

EjemploAlgoritmoAnálisis

6 Resumen Ordenación elemental Algoritmos y Estructuras de Datos II

Page 3: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Generalidades

Toda la información sobre la materia se encuentra en la wiki,accesible desde

wiki.cs.famaf.unc.edu.ar

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 4: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Algoritmos y Estructuras de Datos

Programación imperativa:

Algoritmos y Estructuras de Datos Ipre- y post- condiciones“qué” hace un algoritmo

Algoritmos y Estructuras de Datos II“cómo” hace el algoritmo

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 5: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo de “qué” y “cómo” de un algoritmo

Ejemplo:

un algoritmo para contar los ceros de una secuencia finita deenteros.

¿Qué hace?devuelve (calcula, computa) el número deocurrencias del cero en la secuencia dada.

¿Cómo lo hace? Hay varias posibilidades, por ejemplo:recorre la secuencia de izquierda a derechaincrementando un contador cada vez queobserva un cero.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 6: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Análisis de algoritmos

Analizar el “cómo” permite

predecir el tiempo de ejecución (eficiencia en tiempo)predecir el uso de memoria (eficiencia en espacio)predecir el uso de otros recursoscomparar distintos algoritmos para un mismo problema

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 7: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Organización de la materia

La materia está organizada en tres partes:

Análisis de algoritmos.Cómo se ejecutan los algoritmos y estimar cuánto trabajorealiza.

Estructuras de datos.Tipos de datos concretos y abstractos.

Algoritmos avanzados.Algunas técnicas para resolver problemas algorítmicos.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 8: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Problema del pintor

Un pintor tarda una hora y media en pintar una paredde 3 metros de largo. ¿Cuánto tardará en pintar unade 5 metros de largo?

3 metros ←→ 90 minutos1 metro ←→ 30 minutos

5 metros ←→ 150 minutos

Solución: dos horas y media.El trabajo de pintar la pared es proporcional a su longitud.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 9: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Problema del profe de Algoritmos 2

El profe de esta materia tarda media hora en ordenaralfabéticamente 100 exámenes. ¿Cuánto tardará enordenar 200 exámenes?

Razonamiento similar

100 exámenes ←→ 1/2 hora200 exámenes ←→ 1 hora

Solución: una hora.¿Está bien? ¿Es el trabajo de ordenar exámenesproporcional a la cantidad de exámenes a ordenar?

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 10: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Otros problemasdel pintor

Un pintor tarda una hora y media en pintar una paredcuadrada de 3 metros de lado. ¿Cuánto tardará enpintar una de 5 metros de lado?

9 metros cuadrados ←→ 90 minutos1 metro cuadrado ←→ 10 minutos

25 metros cuadrados ←→ 250 minutos

Solución: cuatro horas y 10 minutos.El trabajo de pintar la pared cuadrada es proporcional a susuperficie, que es proporcional al cuadrado del lado.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 11: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Otros problemasel del globo esférico

Si lleva cinco horas inflar un globo aerostático esféricode 2 metros de diámetro, ¿cuánto llevará inflar uno de4 metros de diámetro?

El trabajo de inflar el globo es proporcional a su volumen, quees proporcional al cubo del diámetro (V = πd3

6 ).

diámetro = 2 ←→ k metros cúbicos ←→ 5 horasdiámetro = 4 ←→ 8k metros cúbicos ←→ 40 horas

Solución: cuarenta horas.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 12: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Algoritmos de ordenación

Para resolver el problema del profe de esta materia, esnecesario

establecer a qué es proporcional la tarea de ordenarexámenes,estudiar/inventar métodos de ordenación,asumiremos la existencia de elementos o items a ordenar,relacionados por un orden total,que deben ordenarse de menor a mayor yque no necesariamente son diferentes entre sí.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 13: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

¿Cómo?

Reflexionemos sobre lo siguiente:¿Qué significa que una secuencia de exámenes, números,palabras, etc. esté ordenada?¿Cómo hacen para controlar si una secuencia de númerosestá ordenada?

(a esta pregunta la vamos a continuar en el práctico y en ellaboratorio)

¿Cómo harían para ordenar de menor a mayor ciertosdatos o ciertas cosas físicas que están desordenados/as?

númeroscartas de un juego,palabras,exámenes.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 14: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónIdea

Es el algoritmo de ordenación más sencillo (pero no elmás rápido),selecciona el menor de todos, lo coloca en el primer lugarapartándolo del resto,selecciona el menor de todos los restantes, lo coloca enel segundo lugar apartándolo del resto,selecciona el menor de todos los restantes, lo coloca enel tercer lugar apartándolo del resto,. . . (en cada uno de estos pasos ordena un elemento) . . .hasta terminar.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 15: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónEjemplo

[9, 3, 1, 3, 5, 2, 7]

[ 9, 3, 1, 3, 5, 2, 7][1, 9, 3, 3, 5, 2, 7][1, 2, 9, 3, 3, 5, 7][1, 2, 3, 9, 3, 5, 7][1, 2, 3, 3, 9, 5, 7][1, 2, 3, 3, 5, 9, 7][1, 2, 3, 3, 5, 7, 9]

[1, 2, 3, 3, 5, 7, 9]

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 16: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónEn Haskell

ssort :: [Integer] -> [Integer]ssort [] = []ssort ns = m : ssort r

where m = minimum nsr = erase m ns

erase :: Integer -> [Integer] -> [Integer]erase m (n:ns) | m == n = ns

| otherwise = n : erase m ns

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 17: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónEjecución en Haskell

cronometrar su ejecución con las secuencias5000..110000..1

y comparar los tiempos obtenidos.resulta que en el segundo caso demora el cuádruple!

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 18: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónEjemplo: ahora con arreglos

9 3 1 3 5 2 7

9 3 1 3 5 2 7

1 3 9 3 5 2 7

1 3 9 3 5 2 7

1 2 9 3 5 3 7

1 2 9 3 5 3 7

1 2 3 9 5 3 7

1 2 3 9 5 3 7

1 2 3 3 5 9 7

1 2 3 3 5 9 7

1 2 3 3 5 9 7

1 2 3 3 5 9 7

1 2 3 3 5 7 9

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 19: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Demo (www.sorting-algorithms.com)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 20: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónEn un arreglo

a

� -� -a[1,i)

mínimos ordenados

a[i,n]

aún no seleccionados

1 2 3 i -1 i n-1 n

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 21: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónInvariante

a

� -� -a[1,i)

mínimos ordenados

a[i,n]

aún no seleccionados

1 2 3 i -1 i n-1 n

Invariante:el arreglo a es una permutación del original,un segmento inicial a[1,i) del arreglo está ordenado, ydicho segmento contiene los elementos mínimos delarreglo.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 22: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónPseudocódigo

{Pre: n ≥ 0 ∧ a = A}proc selection_sort (in/out a: array[1..n] of T)

var i, minp: nati:= 1 {Inv: Invariante de recién}do i < n→ minp:= min_pos_from(a,i)

swap(a,i,minp)i:= i+1

odend proc{Post: a está ordenado y es permutación de A}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 23: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónSwap o intercambio

{Pre: a = A ∧ 1 ≤ i,j ≤ n }proc swap (in/out a: array[1..n] of T, in i,j: nat)

var tmp: Ttmp:= a[i]a[i]:= a[j]a[j]:= tmp

end proc{Post: a[i] = A[j] ∧ a[j] = A[i] ∧ ∀ k. k 6∈{i,j}⇒ a[k]=A[k]}

¡Garantiza permutación!

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 24: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónInvariante de la función de selección

a

� -� -a[1,i)

mínimos ordenados

a[i,n]

aún no seleccionados

1 2 3 i -1 i n-1 ni minp j n� -� -a[i,j) cuyo min es a[minp] a[j,n] aún por revisar

Invariante:invariante anterior, yel mínimo del segmento a[i,j) está en la posición minp.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 25: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selecciónFunción de selección

{Pre: 0 < i ≤ n}fun min_pos_from (a: array[1..n] of T, i: nat) ret minp: nat

var j: natminp:= ij:= i+1 {Inv: a[minp] es el mínimo de a[i,j)}do j ≤ n→ if a[j] < a[minp] then minp:= j fi

j:= j+1od

end fun{Post: a[minp] es el mínimo de a[i,n]}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 26: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Comando for

Fragmentos de la siguiente forma aparecen con frecuencia:

k:= ndo k ≤ m→ C

k:= k+1od

Por simplicidad, lo reemplazaremos por

for k:= n to m do C od

siempre que k no se modifique en C.Además, asumiremos que el for declara la variable k, cuya vidadura sólo durante la ejecución del ciclo.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 27: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Comando forReemplazo en min_pos_from

fun min_pos_from (a: array[1..n] of T, i: nat) ret minp: natvar j: natminp:= ij:= i+1do j ≤ n→ if a[j] < a[minp] then minp:= j fi

j:= j+1od

end funfun min_pos_from (a: array[1..n] of T, i: nat) ret minp: nat

minp:= ifor j:= i+1 to n do if a[j] < a[minp] then minp:= j fiod

end funOrdenación elemental Algoritmos y Estructuras de Datos II

Page 28: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Comando forReemplazo en selection_sort

proc selection_sort (in/out a: array[1..n] of T)var i, minp: nati:= 1do i < n→ minp:= min_pos_from(a,i)

swap(a,i,minp)i:= i+1

odend proc

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 29: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Comando forEn selection_sort

proc selection_sort (in/out a: array[1..n] of T)var minp: natfor i:= 1 to n do

minp:= min_pos_from(a,i)swap(a,i,minp)

odend proc

fun min_pos_from (a: array[1..n] of T, i: nat) ret minp: natminp:= ifor j:= i+1 to n do if a[j] < a[minp] then minp:= j fiod

end fun

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 30: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Comando for . . . downto

Fragmentos de la siguiente forma también aparecen con ciertafrecuencia:

k:= mdo k ≥ n→ C

k:= k-1od

Por simplicidad, lo reemplazaremos por

for k:= m downto n do C od

siempre que k no se modifique en C.Ordenación elemental Algoritmos y Estructuras de Datos II

Page 31: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selección en lenguajes deprogramación

En python.En c.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 32: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selección en python

def min_pos_from(c,fr):min_pos = frfor j in range(fr+1,len(c)):

if c[j] < c[min_pos]:min_pos = j

return min_pos

def swap(b,x,y):b[x], b[y] = b[y], b[x]

for i in range(0,len(a)):minp = min_pos_from(a,i)swap(a,i,minp)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 33: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selección en c#define n 7

void swap(int * b, unsigned int x, unsigned int y) {int tmp = b[x];b[x] = b[y];b[y] = tmp;

}

int min_pos_from(int * c, unsigned int fr) {unsigned int min_pos = fr;for (unsigned int j = fr+1; j < n; j++) {

if (c[j] < c[min_pos]) min_pos = j;}return min_pos;}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 34: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Ordenación por selección en c

int a[n] = {9, 3, 1, 3, 5, 2, 7};

int main() {unsigned int minp = 0;for (unsigned int i = 0; i < n; i++) {

minp = min_pos_from(a,i);swap(a,i,minp);}}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 35: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Problema del profeCuando el algoritmo es la ordenación por selección

¿Cómo se respondería el problema del profe si elalgoritmo utilizado por él fuera el de ordenación porselección?¿Cuánto más trabajo resulta ordenar 200 exámenes que100 con este algoritmo?¿Cuánto trabajo es ordenar 200 exámenes (con estealgoritmo)?¿Cuánto trabajo es ordenar 100 exámenes (con estealgoritmo)?¿Cuánto trabajo es ordenar n exámenes (con estealgoritmo)?

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 36: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Problema del profeAnálisis

Para contestar estas preguntas habría que analizar elalgoritmo de ordenación por selección, es decir, contarcuántas operaciones elementales realiza.Cuántas sumas, asignaciones, llamadas a funciones,comparaciones, intercambios, etc.En vez de eso, se elige una operación representativa.¿Qué es una operación representativa?Una tal que se repite más que o tanto como cualquier otra.Hay que buscar la que más se repite.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 37: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Analizando el procedimiento selection_sort

selection_sort contiene un ciclo,allí debe estar la operación que más se repite,encontramos una llamada a la función min_pos_from yuna llamada al procedimiento swap,el procedimiento swap es constante (siempre realiza 3asignaciones elementales),la función min_pos_from, en cambio, tiene un ciclo,nuevamente allí debe estar la operación que más serepite,encontramos una comparación entre elementos de a, yuna asignación (condicionada al resultado de lacomparación).

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 38: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Analizando ordenación por selecciónConclusión

La operación que más se repite es la comparaciónentre elementos de a,toda otra operación se repite a lo sumo de maneraproporcional a esa,por lo tanto, la comparación entre elementos de a esrepresentativa del trabajo de la ordenación por selección.Esto es habitual: para medir la eficiencia de los algoritmosde ordenación es habitual considerar el número decomparaciones entre elementos del arreglo.Veremos luego que acceder (o modificar) una celda de unarreglo es constante: su costo no depende de cuál es lacelda, ni de la longitud del arreglo.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 39: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

¿Cuántas comparaciones realiza la ordenación porselección?

Al llamarse a min_pos_from(a,i) se realizan n-icomparaciones.selection_sort llama a min_pos_from(a,i) parai ∈ {1,2, . . . ,n− 1}.por lo tanto, en total son (n-1) + (n-2) + . . . + (n-(n-1))comparaciones.

es decir, (n-1) + (n-2) + . . . + 1 = n∗(n−1)2 comparaciones.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 40: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Resolviendo el problema del profeCon la fórmula obtenida

Para un arreglo de tamaño n, son n∗(n−1)2 comparaciones.

100 exámenes ←→ 4950 comparaciones ←→ 1/2 hora200 exámenes ←→ 19900 comparaciones ←→ 2 horas

Solución: 2 horas.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 41: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

IdeaEjemploAlgoritmoComando forAnálisis

Resolviendo el problema del profeCon una fórmula simplificada

Como n∗(n−1)2 = n2

2 −n2 , el número de comparaciones es

proporcional a n2.

100 exámenes ←→ 10000 comparaciones ←→ 1/2 hora200 exámenes ←→ 40000 comparaciones ←→ 2 horas

Solución: 2 horas.Conviene utilizar la expresión n2 para contestar la pregunta; esmás sencillo y da el mismo resultado.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 42: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programa

Una vez que uno sabe qué operación quiere contar, debeimaginar una ejecución arbitraria, genérica del programaintentando contar el número de veces que esa ejecuciónarbitraria realizará dicha operación.Ése es el verdadero método para contar.Es imprescindible comprender cómo se ejecuta elprograma.A modo de ayuda, en las filminas que siguen se da unmétodo imperfecto para ir aprendiendo.El método supone que ya sabemos cuál operaciónqueremos contar.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 43: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaSecuencia de comandos

Una secuencia de comandos se ejecuta de manerasecuencial, del primero al último.La secuencia se puede escribir horizontalmente:C1;C2;. . . ;Cn

o verticalmenteC1C2...Cn

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 44: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaSecuencia de comandos

Para contar cuántas veces se ejecuta la operación,entonces, se cuenta cuántas veces se ejecuta en elprimero, cuántas en el segundo, etc. y luego se suman losnúmeros obtenidos:ops(C1;C2;. . . ;Cn) = ops(C1) + ops(C2) + . . .+ ops(Cn)

ops

C1C2...Cn

= ops(C1) + ops(C2) + . . .+ ops(Cn)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 45: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaComando skip

El comando skip equivale a una secuencia vacía:ops(skip) = 0

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 46: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaComando for

El comando for k:= n to m do C(k) od “equivale” también auna secuencia:for k:= n to m do C(k) od “equivale” a

C(n)C(n+1)...C(m)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 47: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaComando for

De esta “equivalencia” resulta

ops(for k:= n to m do C(k) od) == ops(C(n)) + ops(C(n+1)) + . . .+ ops(C(m))

que también se puede escribir

ops(for k:= n to m do C(k) od) =m∑

k=nops(C(k))

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 48: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaComando for (una salvedad importante)

La ecuación

ops(for k:= n to m do C(k) od) =m∑

k=nops(C(k))

solamente vale cuando no hay interés en contar lasoperaciones que involucran el índice k implícitas en el for:inicialización, comparación con la cota m, incremento; ni elcómputo de los límites n y m. Por eso escribimos “equivale”entre comillas.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 49: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaComando condicional if

El comando if b then C else D fi se ejecuta evaluando lacondición b y luego, en función del valor de verdad que seobtenga, ejecutando C (caso verdadero) o D (caso falso).Para contar cuántas veces se ejecuta la operación,entonces, se cuenta cuántas veces se la ejecuta durante laevaluación de b y luego cuántas en la ejecución de C o D

ops(if b then C else D fi) ={

ops(b)+ops(C) caso b Vops(b)+ops(D) caso b F

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 50: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de un programaAsignación

El comando x:=e se ejecuta evaluando la expresión e ymodificando la posición de memoria donde se aloja lavariable x con el valor de e.

ops(x:=e) =

ops(e)+1 si se desea contar la asignación

o las modificaciones de memoria

ops(e) en caso contrario

Tener en cuenta que la evaluación de e puede implicar lallamada a funciones auxiliares cuyas operaciones debenser también contadas.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 51: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Número de operaciones de una expresión

Similares ecuaciones se pueden obtener para laevaluación de expresiones.Por ejemplo, para evaluar la expresión e<f, primero seevalúa la expresión e, luego se evalúa la expresión f yluego se comparan dichos valores.

ops(e<f) ={

ops(e)+ops(f)+1 si se cuentan comparacionesops(e)+ops(f) caso contrario

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 52: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo: número de comparaciones de la ordenaciónpor selección

proc selection_sort (in/out a: array[1..n] of T)var minp: natfor i:= 1 to n do

minp:= min_pos_from(a,i)swap(a,i,minp)

odend proc

fun min_pos_from (a: array[1..n] of T, i: nat) ret minp: natminp:= ifor j:= i+1 to n do if a[j] < a[minp] then minp:= j fiod

end funOrdenación elemental Algoritmos y Estructuras de Datos II

Page 53: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo: número de comparaciones de la ordenaciónpor selección

ops(selection_sort(a))= ops(for i:= 1 to n do minp:= min_pos_fr. . . ;swap. . . od)=

∑ni=1 ops(minp:= min_pos_from(a,i);swap(a,i,minp))

=∑n

i=1 (ops(minp:= min_pos_from(a,i)) + ops(swap(a,i,minp)))=

∑ni=1 ops(minp:= min_pos_from(a,i))

=∑n

i=1 ops(min_pos_from(a,i))=

∑ni=1 ops(minp:= i;for j:= i+1 to n do if . . . fi od)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 54: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo: número de comparaciones de la ordenaciónpor selección

ops(selection_sort(a))=

∑ni=1 ops(minp:= i;for j:= i+1 to n do if . . . fi od)

=∑n

i=1 (ops(minp:= i) + ops(for j:= i+1 to n do if . . . fi od))=

∑ni=1 ops(for j:= i+1 to n do if . . . fi od)

=∑n

i=1∑n

j=i+1 ops(if a[j] < a[minp] then minp:= j if)

=∑n

i=1∑n

j=i+1(ops(a[j] < a[minp]) + ops(minp:= j)) o ops(skip)

=∑n

i=1∑n

j=i+1 ops(a[j] < a[minp])

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 55: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo: número de comparaciones de la ordenaciónpor selección

ops(selection_sort(a)) =∑n

i=1∑n

j=i+1 ops(a[j] < a[minp])

=∑n

i=1∑n

j=i+1 1

=∑n

i=1 (n-i)

=∑n-1

i=0 i

=n*(n-1)

2= n2

2 −n2

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 56: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Ejemplo: número de intercambios de la ordenaciónpor selección

ops(selection_sort(a))= ops(for i:= 1 to n do minp:= min_pos_fr. . . ;swap. . . od)=

∑ni=1 ops(minp:= min_pos_from(a,i);swap(a,i,minp))

=∑n

i=1 (ops(minp:= min_pos_from(a,i)) + ops(swap(a,i,minp)))= . . . =

∑ni=1 (0 + ops(swap(a,i,minp)))

=∑n

i=1 ops(swap(a,i,minp))=

∑ni=1 1

= n

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 57: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Conclusión del ejemplo

Número de comparaciones de la ordenación por selección:n2

2 −n2

Número de intercambios de la ordenación por selección: nEsto significa que la operación de intercambio no esrepresentativa del comportamiento de la ordenación porselección, ya que el número de comparaciones crece másque proporcionalmente respecto a los intercambios.Por otro lado, pudimos contar las operaciones de maneraexacta.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 58: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserción

No siempre es posible contar el número exacto deoperaciones.Un ejemplo de ello lo brinda otro algoritmo de ordenación:la ordenación por inserción.Es un algoritmo que se utiliza por ejemplo en juegos decartas, cuando es necesario mantener un gran número decartas en las manos, en forma ordenada.Cada carta que se levanta de la mesa, se inserta en ellugar correspondiente entre las que ya están en lasmanos, manteniendolas ordenadas.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 59: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónEjemplo

9 3 1 3 5 2 7

9 3 1 3 5 2 7

3 9 1 3 5 2 7

3 1 9 3 5 2 7

1 3 9 3 5 2 7

1 3 3 9 5 2 7

1 3 3 5 9 2 7

1 3 3 5 2 9 7

1 3 3 2 5 9 7

1 3 2 3 5 9 7

1 2 3 3 5 9 7

1 2 3 3 5 7 9

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 60: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Demo (www.sorting-algorithms.com)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 61: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónEn Haskell

isort :: [Integer] -> [Integer]isort [] = []isort (n:ns) = insert n (isort ns)

insert :: Integer -> [Integer] -> [Integer]insert n [] = [n]insert n (m:ms) | n <= m = n : m : ms

| otherwise = m : insert n ms

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 62: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónEn un arreglo

a

� -� -a[1,i)

ordenado

a[i,n] = A[i,n]

aún no insertados

1 2 3 i -1 i n-1 n

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 63: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónInvariante

a

� -� -a[1,i)

ordenado

a[i,n] = A[i,n]

aún no insertados

1 2 3 i -1 i n-1 n

Invariante:el arreglo a es una permutación del original yun segmento inicial a[1,i) del arreglo está ordenado.(pero en general a[1,i) no contiene los mínimos del arreglo)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 64: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónPseudocódigo

{Pre: n ≥ 0 ∧ a = A}proc insertion_sort (in/out a: array[1..n] of T)

for i:= 2 to n do {Inv: Invariante de recién}insert(a,i)

odend proc{Post: a está ordenado y es permutación de A}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 65: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónInvariante del procedimiento de inserción

a

� -� -a[1,i] sin celda j

ordenado

a[i,n] = A[i,n]

aún no insertados

1 2 3 i -1 i n-1 nij1

� -a[j,i] ordenado

Invariante:el arreglo a es una permutación del originala[1,i] sin celda j está ordenado, ya[j,i] también está ordenado.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 66: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónProcedimiento de inserción

{Pre: 0 < i ≤ n ∧ a = A}proc insert (in/out a: array[1..n] of T, in i: nat)

var j: natj:= i {Inv: Invariante de recién}do j > 1 ∧ a[j] < a[j − 1]→ swap(a,j-1,j)

j:= j-1od

end proc{Post: a[1,i] está ordenado ∧ a es permutación de A}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 67: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserciónTodo junto

proc insertion_sort (in/out a: array[1..n] of T)for i:= 2 to n do

insert(a,i)od

end proc

proc insert (in/out a: array[1..n] of T, in i: nat)var j: natj:= ido j > 1 ∧ a[j] < a[j − 1]→ swap(a,j-1,j)

j:= j-1od

end proc

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 68: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserción en python

def swap(b,x,y):b[x], b[y] = b[y], b[x]

def insert(c,k):j = kwhile j > 0 and c[j] < c[j-1]:

swap(c,j,j-1)j = j - 1

for i in range(1,len(a)):insert(a,i)

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 69: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserción en c

void insert(int * c, unsigned int k) {unsigned int j = k;while (j > 0 && c[j] < c[j-1]) {

swap(a,j,j-1);j:= j-1;

}}

int main() {for (unsigned int i = 1; i < n; i++) {

insert(a,i);}}

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 70: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Número de Comparaciones e intercambiosProcedimiento insert(a,i)

comparaciones intercambiossi el valor de i es . . . mín máx mín máx

2 1 1 0 13 1 2 0 24 1 3 0 3...

......

......

n 1 n-1 0 n-1total insertion_sort n - 1 n2

2 −n2 0 n2

2 −n2

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 71: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Ordenación por inserción, casos

mejor caso: arreglo ordenado, n comparaciones y 0intercambios.peor caso: arreglo ordenado al revés, n2

2 −n2

comparaciones e intercambios, es decir, del orden de n2.caso promedio: del orden de n2.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 72: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Número de operaciones de un programaEl ciclo do

El ciclo do b→ C od (o equivalente while b do C od) seejecuta evaluando la condición b, y dependiendo de si suvalor es V o F se continúa de la siguiente manera:

si su valor fue F, la ejecución termina inmediatamentesi su valor fue V, la ejecución continúa con la ejecución delcuerpo C del ciclo, y luego de eso vuelve a ejecutarse todoel ciclo nuevamente.

Es decir que su ejecución es una secuencia deevaluaciones de la condición b y ejecuciones del cuerpo Cque finaliza con la primera evaluación de b que dé F.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 73: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Número de operaciones de un programaEl ciclo do

Es decir, la ejecución del ciclo do b→ C od “equivale” a laejecución de

if b then Cif b then C

if b then Cif b then C

. . . ¡¡ indefinidamente !!else skip

else skipelse skip

else skip

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 74: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

EjemploAlgoritmoAnálisis

Número de operaciones de un programaEl ciclo do

ops(do b→ C od) = ops(b) +n∑

k=1dk

donde

n es el número de veces que se ejecuta el cuerpo del dodk es el número de operaciones que realiza la k -ésimaejecución del cuerpo C del ciclo y la subsiguienteevaluación de la condición o guarda b

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 75: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Resumen

Hemos analizado dos algoritmos de ordenaciónordenación por selecciónordenación por inserción

la ordenación por selección hace siempre el mismonúmero de comparaciones, del orden de n2.la ordenación por inserción también es del orden de n2 enel peor caso (arreglo ordenado al revés) y en el casomedio,la ordenación por inserción es del orden de n en el mejorcaso (arreglo ordenado),la ordenación por inserción realiza del orden de n2 swaps(contra n de la ordenación por selección) en el peor caso.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 76: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Problema del profe de algoritmos 2

Con cualquiera de los dos algoritmos la respuesta es 2horas,salvo que se trate de un conjunto ya ordenado o casiordenado, en cuyo caso:

ordenación por inserción es del orden de n,y por ello la respuesta sería: 1 hora.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 77: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Repaso de la ordenación por selecciónproc selection_sort (in/out a: array[1..n] of T)

var minp: natfor i:= 1 to n do

minp:= min_pos_from(a,i)swap(a,i,minp)

odend proc

fun min_pos_from (a: array[1..n] of T, i: nat) ret minp: natminp:= ifor j:= i+1 to n do if a[j] < a[minp] then minp:= j fiod

end fun

Se lo puede abreviar omitiendo la función auxiliar.Ordenación elemental Algoritmos y Estructuras de Datos II

Page 78: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Forma abreviada de la ordenación por selección

proc selection_sort (in/out a: array[1..n] of T)var minp: natfor i:= 1 to n do

minp:= ifor j:= i+1 to n do

if a[j] < a[minp] then minp:= j fiodswap(a,i,minp)

odend proc

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 79: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Repaso de la ordenación por inserciónproc insertion_sort (in/out a: array[1..n] of T)

for i:= 2 to n doinsert(a,i)

odend proc

proc insert (in/out a: array[1..n] of T, in i: nat)j:= ido j > 1 ∧ a[j] < a[j − 1]→ swap(a,j-1,j)

j:= j-1od

end proc

También puede abreviarse omitiendo el procedimiento auxiliar.Ordenación elemental Algoritmos y Estructuras de Datos II

Page 80: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Forma abreviada de la ordenación por inserción

proc insertion_sort (in/out a: array[1..n] of T)for i:= 2 to n do

j:= ido j > 1 ∧ a[j] < a[j − 1]→ swap(a,j-1,j)

j:= j-1od

odend proc

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 81: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Demo (www.sorting-algorithms.com)

Ejecución de ordenación por selecciónentrada aleatoriacasi ordenadainvertidacon repeticiones

Ejecución de ordenación por inserciónentrada aleatoriacasi ordenadainvertidacon repeticiones

Comparación y conclusiones.

Ordenación elemental Algoritmos y Estructuras de Datos II

Page 82: Algoritmos y Estructuras de Datos II Ejemplo Algoritmo Comando for Análisis 4 Número de operaciones de un programa (función ops) 5 Ordenación por inserción Ejemplo Algoritmo Análisis

IntroducciónMotivación

Ordenación por selecciónNúmero de operaciones de un programa (función ops)

Ordenación por inserciónResumen

Reflexión sobre paralelismo

¿Qué provecho podríamos sacar a los algoritmos que hemosvisto si contáramos con varios o muchos procesadorescapaces de cooperar entre ellos?

Ordenación elemental Algoritmos y Estructuras de Datos II