Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRÁCTICA 3: Algoritmos de
ordenamiento III
RadixSort
1. Eficiencia (1p)
Con respecto a 5.1 de P3:
R: El número que obtuve se asemeja mucho más a un orden O(kn), ya que al multiplicar el
número de elementos (4000) multiplicado por valor posicional (4), se obtiene 16000, lo que
es casi igual al resultado obtenido. de ser O(n log n) el resultado aproximado sería 50000.
2. Funciones (3p)
Nota que las siguientes funciones están encadenadas: si una está mal, el resto también.
Queue* queues[radix];
for(int i=1;i<=numPos;i++){
for(int j=0;j<tam;j++){
int whichQ=subKey(list[j],i,radix);
Queue_Enqueue(queues[whichQ],list[j]);
}
++g_contador;
collect(list,queues,radix);
}
}
3. Ejecución (1p)
.
CountingSort
4. Eficiencia (1p)
Con respecto a 5.2 de P3:
Indica el valor teórico correspondiente a O( k+n ) cuando n=5000, y siendo k el tamaño del
arreglo auxiliar (tienes que determinarlo).
R: el valor teórico sería 5000+k, para conocer “k” es necesario saber el rango con el que
estamos trabajando, pues ese valor corresponde al tamaño del arreglo auxiliar que
utilicemos, para el caso anterior k=26, pues en el rango [0,25] existen 26 “lugares”.
Explica brevemente porqué este algoritmo tiene eficiencia en tiempo de O( k+n ) (utiliza las
líneas que sean necesarias):
for(int i=0;i<elems;i++){
int pos=list[i];
aux[pos]++;
++g_contador;
}
int j=0;
for(int value=0;value<capacity;value++){
for(int reps=aux[value];reps>=1;reps--){
list[j]=value;
++j;
}
++g_contador;
}
free(aux);
}
6. Ejecución (1p)