cap1.2 tutor recursividad vectores

72
Programación II Recursión con Vectores Ing. Mary López Universidad Autónoma Gabriel Rene Moreno FICCT Semestre II/2015

Upload: mary-dunnia-lopez-n

Post on 11-Jan-2017

733 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Cap1.2 tutor recursividad   vectores

Programación II

Recursión con Vectores

Ing. Mary López

Universidad Autónoma Gabriel Rene MorenoFICCT

Semestre II/2015

Page 2: Cap1.2 tutor recursividad   vectores

Ejercicio 1Búsqueda Binaria

bool BusBin(int *vec,int inicio,int final,int clave) { bool flag,res; if(inicio > final) flag=false; else {

int m = (inicio + final)/2;int x=vec[m];if(clave < x) flag = BusBin(vec, inicio, m-1, clave);else if(clave > x) flag = BusBin(vec, m+1, final, clave); else flag = true;

} return flag;

}

Page 3: Cap1.2 tutor recursividad   vectores

AlgoritmosDe

Ordenación

Page 4: Cap1.2 tutor recursividad   vectores

Algoritmos de Ordenación

La ordenación de elementos según un orden ascendente o descendente influye en la velocidad y simplicidad de los algoritmos que los manipulan.

En general, un conjunto de elementos se almacenan en forma ordenada con el fin de simplificar la recuperación de información manualmente, o facilitar el acceso mecanizado a los datos de una manera más eficiente.

Cada algoritmo ordenación estará compuesto de las siguientes operaciones básicas: COMPARACIONES que prueban si A i< A j ó A i < B

(donde B es una variable auxiliar) INTERCAMBIOS: permutar los contenidos de A i y A j

ASIGNACIONES de la forma B = Ai Ai = Aj Aj= B

Page 5: Cap1.2 tutor recursividad   vectores

Ejercicio 2: MergeSort (Ver 2)

Prerrequisito : Comprender la Recursión

El MERGESORT consiste en : Dividir los elementos en dos grupos de la misma

longitud aproximadamente. Ordenar de forma independiente cada sub-grupo. Mezclar los dos subgrupos ordenados para producir

la secuencia final ordenada.

Algoritmo de fácil división y difícil unión

Page 6: Cap1.2 tutor recursividad   vectores

Ejercicio 2: MergeSort

Una ejecución de merge-sort esta representado por un árbol binario :

La raíz es la primera llamada Cada nodo representa una llamada recursiva de merge-sort

• La secuencia esta sin ordenar antes de la ejecución y después de su partición

• La Secuencia se ordenada al final de la ejecución. Cada hoja es llamada hasta obtener secuencia de longitud

cero o un solo elemento.

6 2 9 4 3 8 6 1

Page 7: Cap1.2 tutor recursividad   vectores

Particion del conjunto en 2 partes

7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6

7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Ejercicio 2: MergeSort

Page 8: Cap1.2 tutor recursividad   vectores

Llamada recursiva partición

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6

7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 9: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6

7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva Particion

mergeSort

Ejercicio 2: MergeSort

Page 10: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva Caso Base

mergeSort

Ejercicio 2: MergeSort

Page 11: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva Caso Base

mergeSort

Ejercicio 2: MergeSort

Page 12: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Mezcla Merge

merge

Ejercicio 2: MergeSort

Page 13: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 6 9 4 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva partición

mergeSort

Ejercicio 2: MergeSort

Page 14: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 6 9 4 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva Caso Base

mergeSort

Ejercicio 2: MergeSort

Page 15: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 6 9 4 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

Llamada recursiva Caso Base

mergeSort

Ejercicio 2: MergeSort

Page 16: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

9 9 4 4

Mezcla Merge

merge

Ejercicio 2: MergeSort

Page 17: Cap1.2 tutor recursividad   vectores

Mezcla Merge

6 2 9 4 2 4 6 9

6 2 2 6 9 4 4 9 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

merge

Ejercicio 2: MergeSort

Page 18: Cap1.2 tutor recursividad   vectores

Llamada recursiva Particion

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 19: Cap1.2 tutor recursividad   vectores

Llamada recursiva Particion

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 20: Cap1.2 tutor recursividad   vectores

Llamada recursiva Caso Base

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 21: Cap1.2 tutor recursividad   vectores

Llamada recursiva Caso Base

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 22: Cap1.2 tutor recursividad   vectores

Mezcla Merge

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

merge

Ejercicio 2: MergeSort

Page 23: Cap1.2 tutor recursividad   vectores

Llamada recursiva partición

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 24: Cap1.2 tutor recursividad   vectores

Llamada recursiva Caso Base

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 25: Cap1.2 tutor recursividad   vectores

Llamada recursiva Caso Base

6 2 9 4 2 4 6 9 3 8 6 1

6 2 2 6 9 4 4 9 3 8 3 8 6 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

mergeSort

Ejercicio 2: MergeSort

Page 26: Cap1.2 tutor recursividad   vectores

Mezcla Merge

6 2 9 4 2 4 6 9 3 8 6 1 |

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

merge

Ejercicio 2: MergeSort

Page 27: Cap1.2 tutor recursividad   vectores

Mezcla Merge

6 2 9 4 2 4 6 9 3 8 6 1 1 3 6 8

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9

merge

Ejercicio 2: MergeSort

Page 28: Cap1.2 tutor recursividad   vectores

6 2 9 4 2 4 6 9 3 8 6 1 1 3 6 8

6 2 2 6 9 4 4 9 3 8 3 8 6 1 1 6

6 6 2 2 9 9 4 4 3 3 8 8 6 6 1 1

6 2 9 4 3 8 6 1 1 2 3 4 6 6 8 9

Mezcla Merge

merge

Ejercicio 2: MergeSort

Page 29: Cap1.2 tutor recursividad   vectores

Ejercicio 2: MergeSort

void mergeSort (int *A, unsigned int bajo, unsigned int alto, unsigned int n) {

if (bajo < alto) { //Si hay más de un elemento

int medio = (alto + bajo)/2;

mergeSort (A, bajo, medio,n);

mergeSort (A, medio+1, alto,n); //Proceso que mezcla el resultado de las dos llamadas anteriores

merge (A, bajo, medio+1, alto,n);

}

}

Page 30: Cap1.2 tutor recursividad   vectores

Ejercicio 2: MergeSort

void merge (int *A, unsigned int bajo, unsigned int medio, unsigned int alto,unsigned int n){unsigned int ini_1 = bajo; //Variable de primer elemento de la primera subsecunsigned int fin_1 = medio -1; //Variable del último elemento de la primera subsecunsigned int ini_2 = medio; //Variable del primer elemento de la segunda subsecunsigned int i = bajo; //Variable para controlar posiciones del vector resultanteint *Temp=new int[n];/* Temp es un array ya definido*/while (( ini_1 <= fin_1) && (ini_2<= alto)) { if (A[ini_1] <= A[ini_2]) Temp[i++] = A[ini_1++]; else Temp[i++] = A[ini_2++]; }

Page 31: Cap1.2 tutor recursividad   vectores

Ejercicio 2: MergeSort

while (ini_1 <= fin_1) //Si se agotaron los elementos de la segunda subsecuencia Temp[i++] = A[ini_1++];while (ini_2 <= alto) //Si se agotaron los de la primera subsecuencia Temp[i++] = A[ini_2++];//Paso todos los elementos del Temporal al arrayfor (i = bajo; i <= alto; i++) A[i] = Temp[i];}

Page 32: Cap1.2 tutor recursividad   vectores

Ejercicio 3QuickSort

En la ordenación rápida, la secuencia inicial de elementos se divide en dos sub-secuencias de diferente tamaño.

La obtención de las dos sub-secuenciases el proceso que acarrea más tiempo mientras que la combinación de las sub-secuencias ordenadas para obtener la secuencia final consume muy poco tiempo.

Para dividir en dos la secuencia de elementos, se selecciona un elemento sobre el cual efectuar la división, el PIVOTE.

Se dividen los elementos en dos grupos, los elementos menores que el pivote y aquellos mayores o igual al pivote.

Algoritmo de difícil división y fácil unión,

Page 33: Cap1.2 tutor recursividad   vectores

Ejercicio 3QuickSort

La elección del elemento Pivote se puede seleccionar de diferentes formas: El mayor de los dos primeros elementos distintos encontrados. Otros criterios (1ro, Ultimo, el del centro, etc).

Para ordenar los elementos comprendidos entre Ai y Aj

1. Si desde Ai hasta Aj hay al menos dos elementos distintos

entonces comenzar la aplicación del algoritmo.2. Seleccionar el PIVOTE como el elemento mayor de los dos

primeros elementos distintos encontrados.3. Insertar PIVOTE en la última posición.

Page 34: Cap1.2 tutor recursividad   vectores

Ejercicio 3QuickSort

4. Permutar los elementos desde Ai hasta Aj de modo que, para algún i <= k <= j :

Ai, ..., Ak-1< PIVOTE

Ak, ..., Aj>= PIVOTE

Es decir, en las (k-1) primeras posiciones queden los elementos menores que pivote, mientras que en la posición k hacia delante queden los elementos mayores o iguales que el pivote.

5. Invocar a:

QUICKSORT desde i hasta (k –1)QUICKSORT desde k hasta j

Page 35: Cap1.2 tutor recursividad   vectores

Ejercicio 3QuickSort

35

1) Elegir Pivote: Tomar un elemento

2) Dividir: Reordenar los elementos tal que x va a su posición final E

3) Recursión y Vencer: Ordenar recursivamente

Page 36: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSortInicia

Page 37: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSortÍndicePivotei ini Fin

0 1 2 3 4 5 6 77 6 2 10 4 5 9 8 Pivote

Como 10 es mayor que 8 este no esta en una posición correcta. Luego debemos continuar avanzando con i hasta encontrar uno menor que el pivote 8.

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 10 4 5 9 8 Pivote

Como 10 es mayor que 8 este no esta en una posición correcta. Luego debemos continuar avanzando con i hasta encontrar uno menor que el pivote 8.

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 10 4 5 9 8 Pivote

Encontramos el 4. Luego este lo intercambiamos por el 10

Partir (1)

Page 38: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 4 10 5 9 8 Pivote

Como 10 es mayor que 8 este no esta en una posición correcta. Luego debemos continuar avanzando con i hasta encontrar uno menor que el pivote 8.

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 4 10 5 9 8 Pivote

Encontramos el 4. Luego este lo intercambiamos por el 10

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 4 5 10 9 8 Pivote

Encontramos el 5. Luego este lo intercambiamos por el 10

Page 39: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

ÍndicePivoteini i Fin

0 1 2 3 4 5 6 77 6 2 4 5 10 9 8 Pivote

Como 10 es mayor que 8 este no esta en una posición correcta. Luego debemos continuar avanzando con i hasta encontrar uno menor que el pivote 8.

El apuntador i llego a su posición máxima. Finalmente hay que mover el pivote 8 a la posición donde quedo el apuntador indicepivote ya que este es mayor y debe ir a la derecha.

ÍndicePivoteini   Fin

0 1 2 3 4 5 6 77 6 2 4 5 10 9 8 Pivote

ÍndicePivoteini   Fin

0 1 2 3 4 5 6 77 6 2 4 5 8 9 10

PivoteEl algoritmo termina poniendo el Pivote en su posición de ordenación correcta y al mismo tiempo divide al conjunto en 2 para continuar ordenando

Page 40: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

partición

Page 41: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

quickSort (I)

Page 42: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

0 1 2 3 47 6 2 4 5 ip piv ini fin i

0 5 0 4 01 1

0 1 2 3 4 2 22 6 7 4 5 3

4

0 1 2 3 42 4 7 6 5

0 1 2 3 42 4 5 6 7

Partir (2)

Page 43: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 44: Cap1.2 tutor recursividad   vectores

0 12 4 ip piv ini fin i

0 4 0 1 01 1

0 12 4

0 12 4

Partir (3)

Ejercicio 3 - QuickSort

Page 45: Cap1.2 tutor recursividad   vectores

quickSort (I)

Ejercicio 3 - QuickSort

Page 46: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 47: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 48: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 49: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 50: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 51: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 52: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 53: Cap1.2 tutor recursividad   vectores

quickSort (D)

Ejercicio 3 - QuickSort

Page 54: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 55: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 56: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 57: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 58: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 59: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 60: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 61: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 62: Cap1.2 tutor recursividad   vectores

quickSort (D)

Ejercicio 3 - QuickSort

Page 63: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 64: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 65: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 66: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 67: Cap1.2 tutor recursividad   vectores

partición

Ejercicio 3 - QuickSort

Page 68: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 69: Cap1.2 tutor recursividad   vectores

Ejercicio 3 - QuickSort

Page 70: Cap1.2 tutor recursividad   vectores

Ejercicio 3: QuickSort

void quickSort( int *A, int ini, int fin ){

if (ini < fin){

int indicepivote = particion(A,ini, fin); //El pivote ya esta en su posición correcta //Por eso no se lo toma encuenta en la union

quickSort(A, ini, indicepivote – 1 );quickSort(A, indicepivote+1, fin);

}

}

Page 71: Cap1.2 tutor recursividad   vectores

Ejercicio 3: QuickSort

int particion(int *A,int ini, int fin){int pivote = A[fin];int indicepivote = ini;for ( int i=indicepivote; i< fin ; i++) { if (A[i] < pivote) { //Intercambiar solo si i es distinto de indicepivote

intercambiar(A, i ,indicepivote); indicepivote=indicepivote+1; } } intercambiar(A, indicepivote,fin); return indicepivote;}

Page 72: Cap1.2 tutor recursividad   vectores

Ejercicio 3: QuickSort

void intercambiar( int *A, int ptr1, int ptr2 ){ int temp; temp = A[ptr1]; A[ptr1] = A[ptr2]; A[ptr2] = temp;}