Issuu on Google+

Equipo 8

Ordenamiento SHELL ¿Qué es un ordenamiento? Es la operación de arreglar los registros de una tabla en algún orden secuencial de acuerdo a un criterio de ordenamiento. El ordenamiento se efectúa con base en el valor de algún campo en un registro. El propósito principal de un ordenamiento es el de facilitar las búsquedas de los miembros del conjunto ordenado

Tipos de ordenamientos: Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos. 1) Los internos: Son aquellos en los que los valores a ordenar están en memoria principal, por lo que se asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1], a[500], etc). 2) Los externos: Son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta, cilindro magnético, etc), por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la última posición accesada (posición 1, posición 500, etc).

Eficiencia en tiempo de ejecucion: Una medida de eficiencia es: Contar el # de comparaciones (C) Contar el # de movimientos de items (M) Estos están en función de el #(n) de items a ser ordenados. Un "buen algoritmo" de ordenamiento requiere de un orden nlogn comparaciones. La eficiencia de los algoritmos se mide por el número de comparaciones e intercambios que tienen que hacer, es decir, se toma n como el número de elementos que tiene el arreglo o vector a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara n veces los n elementos, n x n = n2

Que es el metodo de ordenamiento Shell? El método de Shell es una versión mejorada del método de inserción directa recibe ese nombre en honor a su autor Donald L. Shell quien lo propuso en 1959. Este método también se conoce con el nombre de inserción con incrementos decrecientes. En el método de ordenación Shell propone que las comparaciones entre elementos se efectúen con saltos de mayor tamaño pero con incrementos se efectúen con saltos de mayor tamaño pero con incrementos decrecientes, así los elementos quedarán ordenados en el archivo.


Equipo 8 En 1969 Pratt descrubrió que el tiempo de ejecución del algoritmo del orden de n*(log n)2. Unas pruebas exhaustivas realizadas para obtener la mejor secuencia de intervalos cuando el número de elementos del arreglo es igual a 8 arrojaron como resultado que la mejor secuencia corresponde a un intervalo de 1, que no es más que el método de inserción directa estudiado previamente.

CARACTERiSTICAS 

 

 

  

Se trata de un algoritmo de ordenación interna. Al igual que cualquier otro de ordenación interna (los datos están en memoria principal) podría utilizarse para ordenación externa (en memoria secundaria) siempre y cuando se disponga de acceso aleatorio, pero el algoritmo no fue ideado para eso. Se basa en comparaciones e intercambios. Necesita que el tiempo de acceso a cualquier dato sea constante (es decir, fue ideado para trabajar con arrays, arrays de referencias o punteros, etc...). Ojo a otras estructuras, como listas enlazadas, etc... ya que en ese caso, el tiempo de acceso a un elemento no es constante, depende de la posición del elemento. No es estable: dados dos elementos que al compararlos sean "iguales" no mantienen necesariamente el orden relativo inicial entre ellos El estudio de su complejidad no es trivial, sino todo lo contrario. La implementación original de Shell tiene una complejidad en el peor caso de O(n2), aunque en un caso promedio o en casos típicos comprobados empíricamente, los resultados son mucho mejores que con la burbuja, selección directa o inserción directa, cuya complejidad en el peor caso también es del orden de O(n2). Sin embargo, optimizaciones posteriores han logrado reducir esa cota... Por ejemplo, con la optimización de Robert Sedgewick se llega a O(n4/3), y con la propuesta por Vaughan Pratt se llega al orden de O(n log2n). En 1992, Greg Plaxton, Bjorn Poonen y Torsten Suel prueban que es posible incluso rebajar aún más esas cotas. En cierto modo, puede considerarse una ampliación del algortimo de inserción directa, con lo cual, conviene tenerlo claro antes de meterse con el de Shell. No es un algoritmo en-línea.

Analisis de eficiencia del metodo de ordenamiento. El análisis de eficiencia de este método en un problema muy complicado y aun no resuelto. Nadie ha capaz de establecer la mejor secuencia de incrementos cuando N es muy grande. Cabe recordar que cada vez que se propone una secuencia de intervalos es necesario "correr" el algoritmo para analizar el tiempo de ejecución del mismo.

Pseudocodigo o Algoritmo:

(INT, I y AUX son variables de tipo entero. BAND es una variable de tipo booleano) 1.- Hacer INT  N +1. 2.- Mientras (INT > 1) Repetir Hacer INT  parte entera (INT /2) y BAND VERDADERO.


Equipo 8 2.1.- Mientras (BAND == VERDADERO) Repetir. Hacer BAND  FALSO e I  1. 2.1.1.- Mientras ((I + INT) <= N) Repetir. 2.1.1.1.- Si A [I] > A[I + INT] Entonces. Hacer AUX  A[I], A[I]  A[I + INT], A[I + INT]  AUX y BAND  VERDADERO. 2.1.1.2.- {Fin del condicional del paso 2.1.1.1} Hacer I  I + 1. 2.1.2.- {Fin del ciclo del paso 2.1.1} 2.2.- { Fin del ciclo del paso 2.1} 3.- { Fin del ciclo del paso 2}

Ejemplo: Se desean ordenarse los siguientes números: A: 15, 67, 08, 16, 44, 27, 12, 35, 56, 21, 13, 28, 60, 36, 07, 10 Primera Pasada Los elementos se dividen en 8 grupos: A: 15, 67, 08, 16, 44, 27, 12, 35 | 56, 21, 13, 28, 60, 36, 07, 10 La ordenación produce: A: 15, 21, 08, 16, 44, 27, 07, 10, 56, 67, 13, 28, 60, 36, 12, 35 Segunda Pasada Se dividen los elementos en 4 grupos: A: 15, 21, 08, 16 | 44, 27, 07, 10 | 56, 67, 13, 28 | 60, 36, 12, 35 La ordenación produce: A: 15, 21, 07, 10, 44, 27, 08, 16, 56, 36, 12, 28, 60, 67, 13, 35 Tercera Pasada Se divide los elementos 2 grupos A: 15, 21 | 07, 10 | 44, 27 | 08, 16 | 56, 36 | 12, 28 | 60, 67 | 13, 35 La ordenación produce: A = 07, 10, 08, 16, 12, 21, 13, 27, 15, 28, 44, 35, 56, 36, 60, 67 Cuarta Pasada Divida los elementos en un solo grupo. La ordenación produce: A: 07, 08, 10, 12, 13, 15, 16, 21, 27, 28, 35, 36, 44, 56, 60, 67


Equipo 8

Bibliografia Ordenaci贸n por el m茅todo de Shell (ShellSort) - La tecla de ESCAPE. (17 de Septiembre de 2010). Recuperado el 10 de Marzo de 2011, de La tecla de ESCAPE: http://latecladeescape.com/con-nombre-propio/ordenacion-por-elmetodo-de-shell-shellsort.html

METODO DE ORDENACION SHELL. (s.f.). Recuperado el 11 de Marzo de 2011, de http://www.angelfire.com/wy2/est_info/shell.html Ramos, B. I. (2 de Septiembre de 2004). METODO SHELL. Recuperado el 11 de Marzo de 2011, de boards4.melodysoft.com/200402EDII0201/metodo-shell-13.html


Ordenamiento shell