Successfully reported this slideshow.

Algoritmos sobre arrays

10,537 views

Published on

  • Be the first to comment

  • Be the first to like this

Algoritmos sobre arrays

  1. 1. Capitulo III: Algoritmos sobre arrays
  2. 2. Algoritmos de búsqueda <ul><li>Los dos algoritmos más importantes son: la </li></ul><ul><li>búsqueda secuencial y la búsqueda binaria. </li></ul><ul><li>La búsqueda secuencial puede realizarse en </li></ul><ul><li>cualquier tipo de arrays (no necesita que estén </li></ul><ul><li>ordenados), y es muy sencilla, pero es un método </li></ul><ul><li>poco eficiente. La búsqueda binaria sólo puede </li></ul><ul><li>utilizarse sobre arrays ordenados, y es algo más </li></ul><ul><li>complicada, pero es altamente eficiente. </li></ul>
  3. 3. Búsqueda secuencial <ul><li>Consiste en ir comparando cada elemento </li></ul><ul><li>del array con el elemento a buscar, </li></ul><ul><li>comenzando por el principio. Finalizara la </li></ul><ul><li>búsqueda cuando se localice el elemento o </li></ul><ul><li>cuando se llegue al final del array. Si se </li></ul><ul><li>encuentra el elemento, se devolverá como </li></ul><ul><li>resultado su posición; si no, se devolverá un </li></ul><ul><li>código de error que indique que el elemento no se </li></ul><ul><li>encuentra en el array. </li></ul>
  4. 4. Búsqueda binaria <ul><li>El algoritmo consiste en examinar primero el </li></ul><ul><li>elemento que ocupa el centro de la lista, si es el </li></ul><ul><li>que se busca ya se ha logrado la solución y si no, </li></ul><ul><li>se determina si el elemento buscado está en la </li></ul><ul><li>primera mitad (porque es inferior al elemento </li></ul><ul><li>central), en cuyo caso se descarta la segunda mitad, o si </li></ul><ul><li>está en la segunda mitad (porque es superior), </li></ul><ul><li>descartando la primera mitad. Se repite el proceso con la </li></ul><ul><li>sublista correspondiente hasta que se encuentre el </li></ul><ul><li>elemento o bien hasta que se determine que no está </li></ul><ul><li>porque se ha llegado a una sublista de 0 elementos. </li></ul>
  5. 5. Algoritmos de inserción <ul><li>Estos métodos consisten en añadir un </li></ul><ul><li>nuevo elemento al array. Siempre debe </li></ul><ul><li>verificarse que hay espacio disponible para </li></ul><ul><li>el nuevo elemento. Si el array no esta </li></ul><ul><li>ordenado, habrá que especificar la posición </li></ul><ul><li>donde se quiere insertar el nuevo elemento. </li></ul><ul><li>Si está ordenado, el propio algoritmo determinará </li></ul><ul><li>la posición que le corresponde al nuevo elemento. </li></ul>
  6. 6. Inserción en un array no ordenado <ul><li>Es necesario indicar la posición que debe </li></ul><ul><li>ocupar el nuevo elemento. Para insertar un </li></ul><ul><li>elemento en una determinada posición de </li></ul><ul><li>un array, deberá abrirse un hueco en dicha </li></ul><ul><li>posición, moviendo los elementos </li></ul><ul><li>posteriores un lugar, empezando por el </li></ul><ul><li>ultimo. </li></ul>
  7. 7. Inserción de un elemento en un array ordenado <ul><li>No hay que indicar ninguna posición, sino que ocupará la </li></ul><ul><li>posición que le corresponda según su valor. Pueden </li></ul><ul><li>contemplarse dos situaciones. </li></ul><ul><li>Los elementos no pueden encontrarse repetidos en la lista. Si </li></ul><ul><li>el elemento que se desea insertar ya existe se lanza un </li></ul><ul><li>mensaje indicando que no se puede insertar el elemento, </li></ul><ul><li>caso contrario se averigua la posición que la corresponde y </li></ul><ul><li>se inserta en está. </li></ul><ul><li>Los elementos pueden repetirse. En este caso, nos da igual </li></ul><ul><li>que el elemento a insertar se encuentre ya en el array </li></ul>
  8. 8. Algoritmos de ordenación <ul><li>Existen los métodos directos y los </li></ul><ul><li>Avanzados. </li></ul><ul><li>Entre los directos hay el burbuja, inserción </li></ul><ul><li>directa y selección directa. </li></ul><ul><li>Entre los avanzados están el QuickSort y el </li></ul><ul><li>HeapSort. </li></ul>
  9. 9. Burbuja <ul><li>La característica principal de este método </li></ul><ul><li>es el intercambio de pares de elementos </li></ul><ul><li>adyacentes. Consiste básicamente en hacer </li></ul><ul><li>varias pasadas sobre el array comparando </li></ul><ul><li>en cada una de ellas todos los elementos </li></ul><ul><li>adyacentes de forma que si no están </li></ul><ul><li>ordenados se intercambian. </li></ul>
  10. 10. Método de inserción directa <ul><li>Este método consiste en insertar cada </li></ul><ul><li>elemento, comenzando por el segundo y </li></ul><ul><li>hasta el final, en el lugar que le corresponde </li></ul><ul><li>en la secuencia ordenada que se va </li></ul><ul><li>formando a su izquierda. </li></ul>
  11. 11. Método de selección directa <ul><li>Este método selecciona de la lista completa el </li></ul><ul><li>elemento con menor valor y se intercambia con el </li></ul><ul><li>primero, con lo que el primer elemento queda </li></ul><ul><li>definitivamente ordenado. A continuación, se </li></ul><ul><li>busca el elemento de menor valor de la sublista </li></ul><ul><li>comprendida entre el segundo y el último, y se </li></ul><ul><li>intercambia con el segundo elemento, y así </li></ul><ul><li>sucesivamente hasta que sólo quede un elemento, </li></ul><ul><li>que quedará definitivamente ordenado en el último </li></ul><ul><li>lugar. </li></ul>
  12. 12. Método de ordenación rápida (QuickSort) <ul><li>Consiste en particionar el array de forma que los </li></ul><ul><li>valores de la parte izquierda sean todos menores </li></ul><ul><li>o iguales que un determinado elemento del array </li></ul><ul><li>llamado pivote, y los de la parte derecha, mayores </li></ul><ul><li>o iguales que el pivote. Una vez hecho esto, se </li></ul><ul><li>particionan del mismo modo las partes izquierda y </li></ul><ul><li>derecha, haciendo lo mismo con las partes </li></ul><ul><li>resultantes , y así sucesivamente hasta que todas </li></ul><ul><li>las partes consten de un elemento, momento en el </li></ul><ul><li>cual se habrá conseguido ordenar el array. </li></ul>
  13. 13. Método del montículo (HeapSort) <ul><li>Este método es una variante del método de ordenación </li></ul><ul><li>por selección, donde la búsqueda del elemento mínimo de </li></ul><ul><li>un array se realiza mediante técnicas basadas en la </li></ul><ul><li>construcción de un montículo o heap. </li></ul><ul><li>Un montículo es un árbol binario que </li></ul><ul><li>cumple ciertas condiciones. Consideremos </li></ul><ul><li>dos tipos de montículos: </li></ul><ul><li>Montículo ascendente (también llamado </li></ul><ul><li>main heap): en ellos se cumple que cada </li></ul><ul><li>nodo es menor o igual que sus hijos. </li></ul><ul><li>Montículo descendente (o max heap): se cumple </li></ul><ul><li>que cada nodo es mayor o igual que sus hijos. </li></ul>

×