Algoritmos y Estructura de Datos I

Anuncio
Algoritmos y Estructura de Datos I
Taller de Sorting
Facultad de Ciencias Exactas y Naturales
Lunes 27 de octubre de 2014
Algoritmos y Estructura de Datos I
Menú del dı́a
• Presentación de algunos algoritmos de ordenamiento
Algoritmos y Estructura de Datos I
Menú del dı́a
• Presentación de algunos algoritmos de ordenamiento
• Programar
Algoritmos y Estructura de Datos I
Menú del dı́a
• Presentación de algunos algoritmos de ordenamiento
• Programar
• Programar
Algoritmos y Estructura de Datos I
Menú del dı́a
• Presentación de algunos algoritmos de ordenamiento
• Programar
• Programar
• Programar
Algoritmos y Estructura de Datos I
Menú del dı́a
• Presentación de algunos algoritmos de ordenamiento
• Programar
• Programar
• Programar
• Pensar invariantes
Algoritmos y Estructura de Datos I
¿Por qué ordenar?
Algoritmos y Estructura de Datos I
¿Por qué ordenar?
Ejemplos de problemas:
• Búsqueda (Searching)
• Unicidad de elementos
• Par más cercano
• Selección (máximo, mı́nimo, k -ésimo)
Mucho más...
Algoritmos y Estructuras de Datos II
Algoritmos y Estructura de Datos I
Bogosort
Primer algoritmo de sorting
También conocido como:
• Slowsort
• Monkey Sort ¿?¿???
• Shotgun Sort
• Random Sort
Algoritmos y Estructura de Datos I
Bogosort
Primer algoritmo de sorting
También conocido como:
• Slowsort
• Monkey Sort ¿?¿???
• Shotgun Sort
• Random Sort
RandomSort( aList ):
while not inOrder( aList ):
shuffle( aList )
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 7 4 9 5 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 7 4 9 5 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 7 4 9 5 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 4 7 9 5 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 4 7 9 5 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
3 4 5 7 9 2 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
2 3 4 5 7 9 6 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
2 3 4 5 6 7 9 1
Algoritmos y Estructura de Datos I
Insertion Sort
• Inserta en el lugar correcto y mueve al resto.
• Similar a lo que una persona harı́a si quiere ordenar (por
ejemplo un mazo de cartas).
• Idea:
Dada una lista xs, leo un elemento por vez.
Para cada elemento de xs que leo, busco la posición donde
debe estar entre los elementos leı́dos, y lo inserto en ese
lugar.
• Ejemplo:
1 2 3 4 5 6 7 9
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
3 7 4 9 5 2 6 1
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 7 4 9 5 2 6 3
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 4 9 5 7 6 3
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 3 9 5 7 6 4
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 3 4 5 7 6 9
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 3 4 5 7 6 9
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 3 4 5 6 7 9
Algoritmos y Estructura de Datos I
Selection Sort
• Idea:
Dada una lista xs, la pienso en dos partes: lo que ya
ordené, y lo que está pendiente.
En cada paso, busco el mı́nimo (máximo) de los elementos
pendientes, y lo ubico al final de la parte ya ordenada.
• Ejemplo:
1 2 3 4 5 6 7 9
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
5 3 1 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
5 3 1 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 5 1 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 5 1 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 1 5 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 1 5 4
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 1 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
3 1 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
Bubble Sort
• Procesa varias veces cada elemento.
• Basado fuertemente en Swap.
• Idea:
Dada una lista xs, toma de a pares de elementos
adyacentes en cada iteración y los compara. De acuerdo al
resultado los deja como está o intercambia sus posiciones.
Termina cuando no hay más intercambios que hacer.
• Ejemplo:
1 3 4 5
Algoritmos y Estructura de Datos I
¡A trabajar!
• Primero pasemos al enunciado...
Algoritmos y Estructura de Datos I
Selection Sort
void selectionSort(vector<int>& xs){
int i= 0, n= xs.size();
while ( i < n ){
int imin= indexOfMinFrom(i,xs);
swap(xs[i],xs[imin]);
i= i+1;
}
}
int indexOfMinFrom(int pos, vector<int>& xs){
int i= pos, n= xs.size();
while ( i < n ){
if(xs[i] < xs[pos]) pos= i;
i= i+1;
}
return pos;
}
Algoritmos y Estructura de Datos I
Selection Sort
void selectionSort(vector<int>& xs){
int i= 0, n= xs.size();
while ( i < n ){
int imin= indexOfMinFrom(i,xs);
swap(xs[i],xs[imin]);
i= i+1;
}
}
int indexOfMinFrom(int pos, vector<int>& xs){
int i= pos, n= xs.size();
while ( i < n ){
if(xs[i] < xs[pos]) pos= i;
i= i+1;
}
return pos;
}
n−1
n
i=0
i=1
Costo: ∑ n − i = ∑ i =
n(n−1)
2
∈ O(n2 )
Algoritmos y Estructura de Datos I
Insertion Sort
void insertionSort(vector<int>& xs){
int i= 0;
int n= xs.size();
while(i<n){
int j= i;
while (j>0 && xs[j-1] > xs[j]){
int aux= xs[j-1];
xs[j-1]= xs[j];
xs[j]= aux;
j--;
}
i++;
}
}
Algoritmos y Estructura de Datos I
Insertion Sort
void insertionSort(vector<int>& xs){
int i= 0;
int n= xs.size();
while(i<n){
int j= i;
while (j>0 && xs[j-1] > xs[j]){
int aux= xs[j-1];
xs[j-1]= xs[j];
xs[j]= aux;
j--;
}
i++;
}
}
Complejidad: O(n2 )
• ¿Y si la lista está parcialmente ordenada? ¿Y si está al
revés?
• Estabilidad
Algoritmos y Estructura de Datos I
Bubble Sort
void bubbleSort(vector<int>& xs){
int i= 0, n= xs.size();
while(i < n){
int j= 0;
while(j < n-1){
if(xs[j] > xs[j+1]) swap(xs[j],xs[j+1]);
j=j+1;
}
i=i+1;
}
}
Complejidad: O(n2 )
Algoritmos y Estructura de Datos I
Otros algoritmos:
•
•
•
•
•
Quicksort
Merge Sort (in-place)
Heapsort
Introsort (STL)
Binary Tree Sort
• Counting Sort
• Radix Sort
• Bucket Sort
Algoritmos y Estructura de Datos I
Otros algoritmos:
•
•
•
•
•
Quicksort
Merge Sort (in-place)
Heapsort
Introsort (STL)
Binary Tree Sort
• Counting Sort
• Radix Sort
• Bucket Sort
¿Y si no entra en memoria?
Algoritmos y Estructura de Datos I
• Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
2009. Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press.
• Donald E. Knuth. 1998. The Art of Computer Programming, Volume 3: (2nd Ed.)
Sorting and Searching. Addison Wesley Longman Publishing Co., Inc., Redwood
City, CA, USA.
• http://www.sorting-algorithms.com
• http://sorting.at
• http://gkoberger.github.io/stacksort/
• http://www.youtube.com/user/AlgoRythmics
Algoritmos y Estructura de Datos I
Algoritmos y Estructura de Datos I
Algoritmos y Estructura de Datos I
Figure : http://gkoberger.github.io/stacksort
Algoritmos y Estructura de Datos I
Figure : http://www.youtube.com/user/AlgoRythmics
Algoritmos y Estructura de Datos I
Descargar