Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
EDA<br />
2004/2005<br />
Problema de la ordenación<br />
El problema de la ordenación de un vector a de Objetos<br />
Comparable (los elementos del array, de tipo Object,<br />
deben implementar el interfaz Comparable)<br />
Talla del problema: n==a.length<br />
Algoritmos:<br />
o Burbuja: t bur (n) ∈ Θ(n 2 )<br />
o Inserción Directa: t ins (n) ∈ Ω(n) t ins (n) ∈ Ο(n 2 )<br />
o Selección Directa: t sel (n) ∈ Θ(n 2 )<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
Problema de la ordenación<br />
public static void insercionDirecta (Object a[]) {<br />
for( int i = 1; i < a.length ; i++ ) {<br />
Comparable elemAInsertar = (Comparable)a[i];<br />
int posIns = i ;<br />
// Busqueda del lugar de insercion ordenada;<br />
// desplazar mientras NO se encuentre<br />
for( ; posIns > 0 && elemAInsertar.compareTo(a[posIns-<br />
1]) < 0 ; posIns--)<br />
}<br />
}<br />
a[posIns] = a[posIns - 1];<br />
a[posIns] = elemAInsertar; // Insercion en posIns<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
Problema de la ordenación<br />
public static void seleccionDirecta (Object a[]) {<br />
for (int i=0; i
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás<br />
Algoritmos:<br />
o MergeSort: t merSort (n) ∈ Θ(n*log 2 n)<br />
oQuickSort (Hoare, 1960): t quickSort (n) ∈ Ω (n*log 2 n)<br />
t quickSort (n) ∈ Ο(n 2 )<br />
coste medio t µ quickSort (n) ∈ Θ(n*log 2 n)<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: MergeSort<br />
1 2 2 3 4 5 6 6<br />
MERGE<br />
2 4 5 6 1 2 3 6<br />
MERGE<br />
2 5 4 6<br />
1 3 2 6<br />
MERGE MERGE MERGE<br />
5 2 4 6 1 3 2 6<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: MergeSort<br />
public static void mergeSort (Object a[]){<br />
Object tmpArray = new Object[a.length];<br />
mergeSort (a, tmpArray, 0, a.length-1);<br />
}<br />
private static void mergeSort (Object a[],<br />
Object [] tmpArray, int izq, int der){<br />
if (izq < der) {<br />
int medio = (izq+der) / 2;<br />
mergeSort(a, tmpArray, izq, medio);<br />
mergeSort(a, tmpArray, medio+1, der);<br />
merge(a, tmpArray, izq, medio+1, der);<br />
}<br />
}<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: MergeSort<br />
public static void merge(Object [] a, Object [] tmpArray,<br />
int posIzq, int posDer, int finDer) {<br />
int finIzq = posDer–1; int tmpPos = posIzq;<br />
int numEl = finDer – posIzq +1;<br />
while (posIzq
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: MergeSort<br />
Coste MergeSort<br />
• si se descompone el problema original en dos subproblemas balanceados:<br />
t merSort (n) ˛ Q(n*log 2 n)<br />
Coste Merge: t merge (n) ∈ Θ(n)<br />
Caso 4 Teorema (con a==c==2):<br />
f(n) = a*f(n/c) + b*n + d a < c ⇒ Θ(n)<br />
a = c ⇒ Θ(n log c n)<br />
a > c ⇒ Θ(n log c a )<br />
• sino, si por ejemplo se descompone el problema original en dos<br />
subproblemas de talla n-1 y 1 (problema de balanceo): t merSort (n) ∈ Θ(n 2 )<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: QuickSort<br />
65<br />
13 81 92 43 65<br />
31 57 26<br />
75 0<br />
Partición<br />
Selección<br />
pivote<br />
QuickSort<br />
13 0 26<br />
43 57 31<br />
65<br />
92 75<br />
81<br />
QuickSort<br />
0 13 26 31 43 57 65 75 81 92<br />
0 13 26 31 43 57 65 75 81 92<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: QuickSort<br />
public static void quickSort(Object a[], int izq, int der ){<br />
}<br />
}<br />
if( izq
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: QuickSort<br />
private static Comparable mediana3 (Object a[], int izq,<br />
int der ){<br />
int c=(izq+der)/2;<br />
if (((Comparable)a[c]).compareTo(a[izq])
EDA<br />
2004/2005<br />
<strong>Divide</strong> y Vencerás: QuickSort<br />
Coste QuickSort<br />
t quickSort (n) ∈ Ω (n*log 2 n)<br />
t quickSort (n) ∈ Ο(n 2 )<br />
coste medio t µ quickSort (n) ∈ Θ(n*log 2 n)<br />
Talla_subproblemas probabilidad<br />
1 n-1 1/n<br />
2 n-2 ...<br />
...<br />
n-1 1<br />
Paolo Rosso Grupos: 2B+ENG - ETSIA