Tema 3. Algoritmos Divide y Vencerás

August 5, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Tema 3. Algoritmos Divide y Vencerás...

Description

 

Tema 3 Algoritmos divide y vencerás

 

Tema 3 Algoritmos divide y vencer vencerás ás 4.1 Características del método divide y vencerás. 4.2 Búsqueda binaria. 4.3 Multiplicación de grandes enteros. 4.4 Elaboración de un calendario deportivo. 4.5 Ordenación por mezcla (mergesort). 4.6 Ordenación rápida (quicksort). 4.7 Otros problemas.

 

3.1 Características del método divide y vencerás. La técnica divide y vencerás consiste en: 

Descomponer el ejemplar a resolver en un cierto número de subejemplares subejemplares más pequeños (independientes) del mismo problema.



Resolverlos independientemente volviendo a aplicar la técnica si es necesario (recursividad).



Combinar los resultados obtenidos para construir la solución del problema.

base.. Para que el proceso recursivo termine, es necesario establecer el caso base

 

3.1 Características del método divide y vencerás. algoritmo divide y venceras (ENT x:problema; SAL z:resultado) variables

y : problema i, k : entero principio {divide y vencerás} si x pequeño entonces z ←solución simple (x) si no

descomponer (x,x (x,x1,x2,…,xn) para i = 1 a k hacer divide y vencerás (xi,yi) fin para

z ← combinar ((y y1,y2,…,yn) fin si fin {divide y vencerás}

 

3.1 Características del método divide y vencerás. •





Solución simple es el subalgoritmo usado para resolver ejemplares pequeños del problema a los que llamaremos casos base base.. El número k de subejemplares debe ser pequeño e independiente del pr problema oblema concreto a resolver (es frecuente que sea una potencia de 2). Si k = 1 a la técnica se le llama reducción o simplificación. simplificación. Para que la técnica sea rentable rentable::  Los problemas deben ser independientes.  La descomposición de x en subejemplares y la combinación de sus resultados ha de ser eficiente.  El tamaño de los subejemplares debe ser tan parecido como sea posible.  Si es posible utilizar algoritmos iterativos en lugar de recursivos, se obtiene una mejora drástica en el espacio de memoria.

 

3.1 Características del método divide y vencerás.

 si1 n≤≥

Como ya estudiamos, el tiempo de ejecución de los algoritmos divide y vencerás vencerás es: c1nk si n 1. Entonces:

(nk) 

t(n) =



loggbba

(nklog) n) n)

(n

 k b número númeross natnaturalales,s, y a > 0, c > 0,k0, k ≥ k  a b

si < ssii = >

polilogarítmica , pero nunca exponencial. La complejidad es polinómica o polilogarítmica,

 

3.2 Búsqueda binaria. Dado un vector ordenado de números enteros no repetidos, queremos conocer si un elemento x está en él y queremos conocer su posición.

3

5

8

10



Si x=9, la respuesta es que no está



Si x=10, está en la posición 4

13

14

29

34

 

3.2 Búsqueda binaria. Dado un vector ordenado de números enteros no repetidos, queremos conocer si un elemento x está en él y queremos conocer su posición.

3



5

8

10

13

14

29

34

Primera solución: Recorr Primera Recorrer er el vector hasta localiz localizar ar el elemento o hasta el final O(n)  Búsqueda binaria.

 

3.2 Búsqueda binaria. Dado un vector ordenado de números enteros, queremos conocer si un elemento x está en él y queremos conocer su posición.

Encontrar un i tal que 0 ≤ i ≤ n que cumpla T[i] T[i] ≤ x < T[i+1], con el convenio implícito de que T[0] = −∞ y T[n+1] =+ =+∞. ∞. 3



5

8

10

13

14

29

34

Búsqueda binaria •

Dividir el problema en subproblemas subproblemas:: 2 en este caso.



Quedarnos con una de las mitades: Si el elemento a buscar es menor que el



central, buscar en la primera mitad y, si no, en la segunda (reducción). Caso base: Tabla con un elemento.

 

3.2 Búsqueda binaria. x=13 3

5

8

10

13

14

29

34

3

5

8

10

13

14

29

34

3

5

8

10

13

14

29

34

3

5

8

10

13

14

29

34

 

3.2 Búsqueda binaria. algoritmo búsqueda binaria (ENT T:tabla[1..n] de elementos, x:elemento; SAL i:entero) variables j: entero entero principio {búsqueda binaria} i 1; j n mientras i 2  = ቊ , si n = 2

t(n)

2t(n/ (n/2) + bn2 si a

Y, por tanto, O(n2) debido al algoritmo completar.

 

3.5 Ordenación por mez mezcla cla (merges ( mergesort). ort). Ordenar un vector v de n elementos.

7 

5

7

2

14

3

4

8

10

2

3

4

14

Se utiliza un algoritmo de mezcla para obtener una única tabla a partir de las dos ordenadas. 2



10

Se divide el vector en dos subvectores de aproximadamente el mismo tamaño y se ordenan llamando recursivamente a la función. 5



8

3

4

Caso Cas ob base ase:: un ele eleme ment nto o

5

7

8

10

1 14 4

 

3.5 Ordenación por mez mezcla cla (merges ( mergesort). ort). algoritmo mergesort (ENT (ENT i, j:1..n; ENT-SAL v:tabla[1..n]) variables medio : 1..n principio{mergesort } si i < j entonces medio  (i + j) div 2 mergesort(i,medio, v)

mergesort(medio mezclar(i,medio, j,+v)1, j, v) fin si fin{mergesort }

 

3.5 Ordenación por mez mezcla cla (mergesort). algoritmo mezclar(ENT inf,med, inf,med, sup:1..n; ENT-SAL v:tabla[1..n]) {El algoritmo mezclar mezclar ordenará los elementos de las subtablas v[inf..med] v[inf..med] y v[med + 1..sup] ya ordenadas} variables vaux :tabla[1..n] i1, j1, j, indice : 1..n principio{mezclar } i1  inf  i2  medio + 1  j  inf  mientras i1 ≤ medio y i2 ≤ sup hacer si v[i1] ≤ v[i2] entonces

vaux[j]  v[i1] i1  i1 + 1 si no

vaux[j]  v[i2] i2  i2 + 1 fin si  j  j + 1 fin mientras

 

3.5 Ordenación por mez mezcla cla (mergesort). si i2>sup; para ind indice ice = i1 i1 a medio hacer vaux[j]  v[indice]  j  j + 1 fin para Si no:

indice ice = i2 i2 a sup hacer para ind vaux[j]  v[indice]  j  j + 1 fin fin par para para ind indice ice = inf  inf a sup hacer v[indice]  vaux[indice] fin fin par para fin{mezclar }

Mezclar necesita una gran capacidad de almacenamiento La ecuaci ecuación ón en recur recurre renci ncia a es: t(n)

2t(n/ t(n/2 2) + bn si

Complejidad: O(logn)

 = ቊ , si n,=  1n > 1 a

 

3.6 Ordenació n rápida rápida de Hoare Hoare (quick (quicksort). sort). Ordenación Ordenar un vector v de n elementos.

7 

5

8

10

2

14

3

4

Se elige como pivote un elemento cualquiera de la tabla y se permutan el resto de elementos de forma que los mayores que el pivote queden a su derecha y los restantes a su izquierda.

Supongamos que el pivote es el primer elemento: 7 2

5

4

3

7

14

1 10 0

8



Utilizando recursividad, se ordenan la parte izquierda y la derecha siguiendo el mismo proceso.



Si el pivote es la mediana las dos partes en las que dividimos el vector son de igual

tamaño.  

3.6 Ordenació Ordenación n rápida rápida de Hoare Hoare (quick (quicksort) sort).. Ordenar un vector v de n elementos.

7

5

8

10

2

14

se mueve hacia derecha buscando los mayores que pivote

3

4

se mueve hacia la izquierda buscando los menores o iguales que pivote

7

5

8

10

2

14

3

4

7

5

4

10

2

14

3

8

 

Ordenación 3.6 Ordenació n rápida rápida de Hoare Hoare (quick (quicksort) sort).. 7

5

4

3

2

14

10

8

7

5

4

3

2

14

1 10 0

8

2

5

4

3

7

14

1 10 0

8

Repetir el proceso con cada subproblema

 

3.6 Ordenac ión rápida rápida de Hoare Hoare (quick (quicksort). sort). Ordenación algoritmo pivote (ENT i, j:1..n; ENT-SAL v:tabla[1..n]; SAL l:1..n) {El algoritmo pivote permuta los elementos de la tabla v[i..j] y proporciona un valor l tal que, al final, i ≤ l ≤ j, v[k] ≤ p para todo i ≤ k < l, v[l   ] = p, y v[k] v[k] > p para todo l < k ≤ j, con p el valor inicial de v[i]} variables p, k, l : 1..n principio {pivote} p  v[i]; k  i; l  j + 1 repetir k  k + 1 hasta que v[k] > p o k ≥ j repetir l  l − 1 hasta que v[l] ≤ p mientras k < l hacer intercambiar v[k] y v[l] repetir k  k + 1 hasta que v[k] > p o k ≥ j repetir l  l − 1 hasta que v[l] ≤ p fin mientras intercambiar inter cambiar v[i] y v[l]

fin {pivote}  

Ordenación rápida 3.6 Ordenación rápida de Hoare Hoare (quick (quicksort) sort).. algoritmo quicksort (ENT i, j:1..n; ENT-SAL v:tabla[1..n]) {El algoritmo quicksort quicksort ordena no decrecientemen decrecientemente te los element elementos os de la tabla v que están entre las posiciones i y j} variables l : 1..n principio {quicksort} si j > i entonces pivote(i, j, v, l) si i < l − 1 entonces quicksort(i, l-1, v) fin si fin si fin {quicksort}

si l + 1 < j entonces quicksort(l+1 quicksort(l+1,, j, v) fin si

Es poco eficiente cuando los subcasos están fuertem fuertemente ente desequilibrados. desequilibrados. (n2)  En el caso medi medio: o: O(nlog O(nlog n)



 

3.7 Otros problemas. •

Multiplicación de matrices.

Mejorar la complejidad del algoritmo que multiplica dos matrices utilizando el esquema divide y vencerás. •

Trasposición de una matriz cuadrada. Construir la traspuesta de una matriz cuadrada M de tamaño potencia de dos. •

Mediana de dos vectores.

Dados X e Y dos vectores ordenados de tamaño n, implementar un algoritmo para calcular la mediana de los 2n elementos que contienen X e Y. •

Buscar el elemento en su posición .

Dado A un vector ordenado, ordenado, diseñar un algoritmo de comple complejidad jidad O(log n) en el caso peor, capaz de encontrar un índice i tal que A[i] = i, si tal índice existe.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF