1 / 19

Ordenamientos y Busquedas

Ordenamientos y Busquedas . Ordenar significa reorganizar un conjunto de datos u objetos en una secuencia definida. Se clasifican en 2 categorias Ordenacion Interna.- o de arreglos se utiliza cuando los elementos del arreglo se encuentran en la memoria principal de la computadora

cutter
Télécharger la présentation

Ordenamientos y Busquedas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ordenamientos y Busquedas • Ordenar significa reorganizar un conjunto de datos u objetos en una secuencia definida. Se clasifican en 2 categorias • Ordenacion Interna.- o de arreglos se utiliza cuando los elementos del arreglo se encuentran en la memoria principal de la computadora • Ordenacion Externa.- o de archivos se utiliza cuando los elementos se encuentran en archivos que estan almacenados en dispositivos de almacenamiento secundario como discos , cintas etc… • Los metodos de ordenacion interna pueden ser clasificados en dos tipos Directos e indirectos

  2. Tipo de ordenacion interna • Metodos directos (n^2), como insercion, seleccion directa, y burbuja • Metodos logaritmicos (N*logN) como shell, quicksort, heapsort y monticulo, etc.. • Tiempos y espacio de complejidad se analizan con la notacion asintotica.

  3. Insercion(a,n)//a es un arreglo de n elementos 1.- Repetir con i=2 hasta n hacer aux=a[i ] y k=i-1 1.1 Repetir mientras (k>=1) y (aux<a[k]) hacer a[k+1]=a[k] k=k-1 1.2//fin ciclo del paso 1.1 Hacer a[k+1]=aux y i=i+1 2.-//fin del ciclo paso 1 Seleccion(a,n) 1.-repetir con i=1 hasta n-1 hacer menor=a[i] y k=i 1.1 Repetir con j desde I+1 hasta n 1.1.1 Si a[j]<menor entonces hacer menor=a[j] y k=j 1.1.2//fin del paso 1.1.1 1.2 //fin del ciclo del paso 1.1 Hacer a[k]=a[i] y a[i]=menor 2.- //fin del paso 1 Insercion y seleccion directa

  4. Metodo de Shell • Este metodo es una version mejorada del metodo insercion directa, se llama asi en honor a su autor, Donald L. Shell. • En este metodo Shell propone que las comparaciones entre elementos se efectuen, con saltos de mayor tamaño pero con incrementos decrecientes. • El tiempo de ejecucion de este metodo es del orden n(log n)^2

  5. Algoritmo • Shell(a,n) //arreglo a de n elementos 1.- Hacer inter=n+1 2.- Repetir mientras(inter>1) Hacer inter=parte_entera(inter entre 2) band=1 2.1 Repetir mientras (band=1) Hacer band=0 e i=1 2.1.1 Repetir mientras ((i+inter)<n) 2.1.1.1 Si a[i] > a[i+inter] entonces hacer aux=a[i],a[i]=a[i+inter] a[I+inter]=aux y band=1 2.1.1.2 //fin de 2.1.1.1 hacer i=i+1 2.1.2 //fin de 2.1.1 2.2 //fin de 2.1 3.//fin de 2

  6. Metodo Quicksort • Actualmente es el mas eficiente y veloz. • La idea central de este algoritmo es: • 1.- Se toma un elemento x de una posicion cualquiera del arreglo • 2.- Se trata de ubicar x en la posicion correcta del arreglo, de tal forma que todos los elementos que se encuentran a su derecha sean mayores o iguales a x y los de la izquierda sean menores o iguales. • 3.-Se repiten los pasos anteriores, pero ahora para los conjuntos de datos que se encuentran a la izquierda y la derecha derecha de x en el arreglo • 4.-El proceso termina cuando todos los elementos se encuentran es su posicion correcta en el arreglo.

  7. Algortimo de Quicksort • Para este método de ordenamiento utilizaremos dos algoritmos, el segundo algoritmo es recursivo. • Quicksort(A,N) //arreglo A de N elementos 1.- Llamar al algoritmo recursivo(1,N)

  8. Continuación… • recursivo(ini,fin) 1.- Hacer izq=ini,der=fin,pos=ini y band=v. 2.- Repetir mientras(band==v) Hacer band=F 2.1 Repetir mientras(A[pos]<=A[der] y pos<>der) hacer der=der-1 2.2 //fin de ciclo paso 2.1 2.3 Si pos<>der entonces Hacer aux=A[pos],A[pos]=A[der],A[der]=aux y pos=der 2.3.1 Repetir mientras(A[pos]>=A[izq] y pos<>izq) Hacer izq=izq+1 2.3.2 //fin del ciclo paso 2.3.1 2.3.3 Si pos<>izq entonces Hacer band=v,aux=A[pos],A[pos]=A[izq],A[izq]=aux y pos=izq 2.3.4 //fin de la condicion 2.3.3 2.4 //fin de condicion del paso 2.3 3. //fin del ciclo paso2

  9. Continuación… 4. Si (pos-1)>ini entonces recursivo(ini,pos-1) //llamada recursiva 5.- //fin del paso 4 6.- Si fin > (pos+1) entonces recursivo(pos+1,fin)

  10. Busqueda Binaria • Esta busqueda consiste en dividir el intervalo de busqueda en dos partes, comparando el elemento buscado con el central. En caso de no ser iguales se redefinene los extremos del intervalo. • Este metodo funciona solo para arreglos ordenados.

  11. Algoritmo • Binaria(v,n,x) //busca el elemento x en el vector v de n componentes 1.- Hacer izq=1,der=n y b=0 2.- repetir mientras(izq<=der) y (b=0) hacer cen=parte_entera(izq+der)/2 2.1 Si x=v[cen] entonces hacer b=1 sino //redefinir intervalo de busqueda 2.1.1 Si x>v[cen] entonces hacer izq=cen+1 sino der=cen-1 2.1.2 //fin de 2.1.1 2.2//fin de 2.1. 3.- //fin de ciclo 2 4.- Si b=1 entonces Escribir “El elemento esta en cen” sino Escribir “El elemento no esta en el arrglo” 5.-//fin de 4

  12. Busqueda por transformacion de claves o Hash • Permite tener acceso directamente a los datos • Se utilizan funciones Hash para calcular el indice en el cual vamos a almacernar el dato y posteriormente buscarlo • Se utiliza un metodo para solucionar colisiones, una colision es cuando se genera cuando se trata de insertar en un indice que se encuentra ocupado.

  13. Funciones Hash • Es importante seleccionar una buena funcion hash, a continuacion se presentan algunas • Funcion Modulo(por division) H(k)=(k mod N)+1 K=clave a transformar N=cantidad de elemento H(k)=indice que se genera. Ejemplo: N=100,k1=7256 y k2=9359 H(k1)=(7256 mod 100)+1 = 60 H(k2)=(9359 mod 100)+1=60

  14. Funcion Cuadrado H(k)=digitos_centrales(k^2)+1 Ejemplo: n=100,k=7259 K^2=52,693,081 H(k)=dig_centrales(52,693,081)+1=94 • Funcion Plegamiento H(k)=digmenosig((d1…di)+(di_+1…dj)…+(dl…dn))+1 Ejemplo: valores anteriores H(k)=digmenosig(72+59)+1=digmenosig(131)+1=32

  15. Funcion Truncamiento Tome algunos digitos de la clave y forme con ellos un indice H(k)=elegirdigitos(d1,d2,…dn)+1 Ejemplo: H(k)=elegirdigitos(7259)+1=76 Se eligio el primer y tercer digito, tambien se puede hacer lo mismo con claves alfabeticas o alfanumericas

  16. Solucion de Colisiones • Una colision ocurre cuando se generan dos indices iguales con diferentes claves • Los metodos para solucionar colisiones se clasifican en • Reasignacion • Arreglos Anidados • Encademaniento

  17. Reasignacion • Prueba lineal.- una vez detectada la colision recorre el arreglo en forma secuencial, a partir del punto de la colision, buscando el elemento, en caso que se este insertando, buscando la siguiente localidad vacia. • Prueba Cuadratica.- Es similar a la prueba lineal pero las direcciones se generan como D+1,D+4,D+9,…,D+I^2 • Doble Direccion Hash.-Una vez detectada la colision, se genera otra direccion hash pero ahora como clave la direccion anterior, el proceso termina cuando se halla el dato, o se encuentra una posicion vacia.

  18. Arreglos anidados • Consiste en que cada elemento del arreglo contenga otro arreglo, con las claves colisionadas. • Esto puede ser sencillo, pero definitivamente poco practico

  19. Encadenamiento • Consiste en que cada elemento del arreglo contenga un apuntador a una listra ligada, la lista ligada contendra los valores colisionados. • Una desventaja es que ocupa espacio adicional al del vector, e implica el manejo de listas ligadas, y si las listas crecen demasiado, se perdera la facilidad de acceso

More Related