11.07.2015 Views

Práctica 9. Algoritmos de Ordenación y Divide y Vencerás - CTR

Práctica 9. Algoritmos de Ordenación y Divide y Vencerás - CTR

Práctica 9. Algoritmos de Ordenación y Divide y Vencerás - CTR

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Práctica</strong> <strong>9.</strong> <strong>Algoritmos</strong> <strong>de</strong> Or<strong>de</strong>nación yDivi<strong>de</strong> y <strong>Vencerás</strong>Objetivos- Practicar el diseño e implementación <strong>de</strong> algoritmos <strong>de</strong> or<strong>de</strong>nación.- Realizar un estudio comparativo <strong>de</strong> algoritmos <strong>de</strong> or<strong>de</strong>nación.- Practicar el diseño e implementación <strong>de</strong> algoritmos bajo el esquema <strong>de</strong> Divi<strong>de</strong> y <strong>Vencerás</strong>.DesarrolloSe parte <strong>de</strong> una lista <strong>de</strong> i<strong>de</strong>ntificadores <strong>de</strong> productos, los cuales vienen representados porcódigos numéricos positivos. Se pi<strong>de</strong>:1. Diseñar e Implementar un Algoritmo <strong>de</strong> Or<strong>de</strong>naciónImplementar un algoritmo <strong>de</strong> or<strong>de</strong>nación por base (radix sort) que or<strong>de</strong>ne la lista <strong>de</strong> códigos <strong>de</strong>producto. El número <strong>de</strong> dígitos que forman el código <strong>de</strong>l producto <strong>de</strong>bería ser un valorparametrizable. Por ejemplo, estableciendo tres dígitos tendríamos códigos <strong>de</strong> 000 a 999, concuatro <strong>de</strong> 0000 a 9999, etc.2. Realizar un Estudio ComparativoUna vez implementado el algoritmo anterior, se preten<strong>de</strong> realizar un estudio comparativo <strong>de</strong>nuestro radix sort respecto a la or<strong>de</strong>nación por quicksort proporcionada por java con el métodoArrays.Sort(int[] a).Para ello habrá que ejecutar ambos algoritmos en distintas situaciones, variando dos parámetros:el tamaño <strong>de</strong>l array y el número <strong>de</strong> dígitos <strong>de</strong> los códigos <strong>de</strong> productos. Para facilitar esteproceso, se proporciona un pequeño fragmento <strong>de</strong> código con las instrucciones para medirtiempos y una función que permite generar arrays aleatorios <strong>de</strong> códigos <strong>de</strong> productos, dado elrango y tamaño <strong>de</strong>l array.3. Diseñar e Implementar un Algoritmo con el Esquema Divi<strong>de</strong> y <strong>Vencerás</strong>Partiendo <strong>de</strong>l array <strong>de</strong> códigos <strong>de</strong> producto ya or<strong>de</strong>nado, se preten<strong>de</strong> implementar un algoritmoque siga el esquema Divi<strong>de</strong> y <strong>Vencerás</strong> y que encuentre la coinci<strong>de</strong>ncia índice-valor.La coinci<strong>de</strong>ncia índice-valor es aquel elemento cuyo valor numérico es igual al índice queocupa <strong>de</strong>ntro <strong>de</strong>l array. Por ejemplo, en el siguiente caso la coinci<strong>de</strong>ncia índice-valor latendríamos en el elemento 5:0 1 2 3 4 5 6 7 8 9-10 -8 -3 -1 3 5 13 23 43 123En caso <strong>de</strong> no encontrar la coinci<strong>de</strong>ncia índice-valor exacta, <strong>de</strong>volveremos el primer valor quesupere el valor <strong>de</strong>l índice.


Sin embargo, en nuestros vectores <strong>de</strong> códigos <strong>de</strong> productos no tenemos valores negativos y encaso <strong>de</strong> aplicar este algoritmo, la coinci<strong>de</strong>ncia índice-valor la tendríamos en el primer elemento.Para solventar esto introduciremos un <strong>de</strong>splazamiento, que será introducido como parámetro yse le sumará a los índices.Por ejemplo, en el siguiente caso la coinci<strong>de</strong>ncia índice-valor sin consi<strong>de</strong>rar <strong>de</strong>splazamiento latendríamos en el elemento 0, que aunque no coinci<strong>de</strong> su valor con el índice, sí que lo supera.0 1 2 3 4 5 6 7 8 910 20 30 40 55 86 99 120 143 237Los siguientes ejemplos consi<strong>de</strong>ran <strong>de</strong>splazamiento. Consi<strong>de</strong>rando un <strong>de</strong>splazamiento 20, lacoinci<strong>de</strong>ncia exacta no la tendríamos, pero el algoritmo <strong>de</strong>volvería el elemento 2, ya que suvalor (30) es superior al <strong>de</strong>l índice más el <strong>de</strong>splazamiento (2+20). Con <strong>de</strong>splazamiento 60, elalgoritmo <strong>de</strong>volvería el elemento 5...

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!