1 / 27

Curso de Programación 1 Plan 97

Curso de Programación 1 Plan 97. Clase 10 (Búsqueda y Ordenación). Métodos de b úsqueda. Existen aplicaciones en las cuales es necesario consultar si un elemento se encuentra dentro de un array. A continuaci ón veremos dos métodos de búsqueda : búsqueda lineal b úsqueda binaria.

Download Presentation

Curso de Programación 1 Plan 97

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. Curso de Programación 1Plan 97 Clase 10 (Búsqueda y Ordenación)

  2. Métodos de búsqueda • Existen aplicaciones en las cuales es necesario consultar si un elemento se encuentra dentro de un array. • A continuación veremos dos métodos de búsqueda: • búsqueda lineal • búsqueda binaria Programación 1. Plan 97. InCo. Fac. de Ingeniería

  3. Búsqueda lineal • En la búsqueda lineal se recorre en forma secuencial el array hasta que • se encuentra el elemento deseado, • o se examinan sin éxito todos los elementos del array. A[1] A[2] A[3] ... A[n] v1 v2 v3 ... vn v3 Programación 1. Plan 97. InCo. Fac. de Ingeniería

  4. Ejemplo • Supongamos que una casa de venta de repuestos de automóvil ofrece 100 tipos de piezas diferentes. • Cada pieza tiene un código el cual viene dado por un entero. • La información de cuáles son los códigos de pieza a la venta se encuentra almacenada en una tabla no ordenada: • Type Tabla =array [1..100] of integer; • Var piezas : Tabla; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  5. Ejemplo • Para consultar si una determinada pieza es vendida o no por la casa de repuestos debemos entonces recorrer el array piezas comparando por código de pieza. • Por ejemplo, 100 1 2 3 4 ... 9981 4218 3245 1423 ... 2512 1423 Programación 1. Plan 97. InCo. Fac. de Ingeniería

  6. Ejemplo • Definiremos una función BLineal la cual devuelve un booleano que indica si la pieza esta o no a la venta. • Los parámetros de entrada son los siguientes: • piezas-- el array con las piezas a la venta • p -- código de pieza a consultar Programación 1. Plan 97. InCo. Fac. de Ingeniería

  7. Function BLineal(p: integer; • piezas: Tabla): boolean; • Var (* variables locales *) • esta, sinexito: boolean; • indice: 1..100; • begin • (* inicializacion de variables *) • esta := false; • sinexito := false; • indice := 1; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  8. repeat • if p = piezas[indice] • then esta := true • else if indice = 100 • then sinexito := true • else indice := indice + 1 • until esta or sinexito; • BLineal := esta; • end; (* fin BLineal *) Programación 1. Plan 97. InCo. Fac. de Ingeniería

  9. Búsqueda binaria • La búsqueda de un elemento en un array puede acelerarse en forma considerable si los elementos del mismo están ya ordenados. • En tal caso, una forma eficientede búsqueda es el de división sucesiva en partes iguales del intervalo donde debe buscarse el elemento. • Este método se conoce con el nombre de búsqueda binaria o bipartición. Programación 1. Plan 97. InCo. Fac. de Ingeniería

  10. Búsqueda binaria • Intuitivamente el algoritmo de búsqueda binaria procede de la siguiente forma: • 1. Mirar si el elemento que se busca está en el punto medio del intervalo. • 2. Si no está en esa posición, entonces repetir la búsqueda, pero concentrándose ahora en la primera o segunda mitad del intervalo, según sea el elemento menor o mayor que el valor en el punto medio. Programación 1. Plan 97. InCo. Fac. de Ingeniería

  11. 1 2 3 4 5 6 7 8 4 7 12 14 19 25 30 38 1 2 3 5 6 7 8 4 7 12 19 25 30 38 1 3 5 7 8 4 12 19 30 38 8 38 Programación 1. Plan 97. InCo. Fac. de Ingeniería

  12. Búsqueda binaria • Supongamos que estamos buscando un valor x en un intervalo inf..sup. • Si x está en la posición • medio = (inf + sup) DIV 2 • entonces la búsqueda fue exitosa. • Caso contrario, • si x < valor en medio, entonces buscar en el intervalo inf..medio -1. • sino buscar en el intervalo medio+1..sup. Programación 1. Plan 97. InCo. Fac. de Ingeniería

  13. Búsqueda binaria • Existe otra condición de detención del algoritmo que corresponde al caso en que el valor x buscado no está en el array. • Dicha condición es verificable en cada iteración del algoritmo. • Determina si el intervalo donde vamos a realizar la próxima búsqueda es vacío o no. Esto se verifica fácilmente: • inf..supvacío ?  inf  sup Programación 1. Plan 97. InCo. Fac. de Ingeniería

  14. Ejemplo • Function BBinaria(p: integer; • partes:Tabla):boolean; • Var (* variables locales *) • esta: boolean; • inf, sup, medio: integer; • begin • (* inicializacion de variables *) • esta := false; • inf := 1; • sup := 100; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  15. Ejemplo • repeat • medio := (inf + sup) DIV 2; • if p = piezas[medio] • then esta := true • else if p < piezas[medio] • then sup := medio - 1 • else inf := medio + 1 • until esta or (inf > sup); • BBinaria := esta; • end; (* fin BBinaria *) Programación 1. Plan 97. InCo. Fac. de Ingeniería

  16. Versión Recursiva Function RecBBin(inf, sup, p: integer; piezas: Tabla): boolean; var medio: integer; begin if inf > sup then RecBBin := false else ... Programación 1. Plan 97. InCo. Fac. de Ingeniería

  17. else begin medio := (inf + sup) div 2; if p = piezas[medio] then RecBBin := true else if x < piezas[medio] then RecBBin := RecBBin(inf,medio-1, p,piezas) else RecBBin := RecBBin(medio+1,sup, p,piezas) end end; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  18. Ordenación • Porordenar se entiende el proceso de reorganizar un conjunto de objetos en una cierta secuencia de acuerdo a un criterio especificado. • En general, el objetivo de este proceso es facilitar la posterior búsqueda de elementos en el conjunto ordenado. • Por ejemplo, el método de búsqueda binaria necesita que el array esté ordenado para poder ser aplicado. Programación 1. Plan 97. InCo. Fac. de Ingeniería

  19. Ordenación • Existen múltiples ejemplos reales de conjuntos ordenados: la guía telefónica, índices de libros, ficheros de bibliotecas, diccionarios, ficheros de diverso tipo en oficinas, actas de exámenes, etc. • En la literatura existe una gran variedad de métodos para ordenar arrays. Veremos uno de esos métodos, llamado ordenación por inserción. Programación 1. Plan 97. InCo. Fac. de Ingeniería

  20. Ordenación • Ordenar un conjunto de objetos a1,a2,...,an consiste en encontrar una permutación ak1,ak2,...,akn tal que dada una función de ordenaciónƒse verifique: • ƒ(ak1) ƒ(ak2) ... ƒ(akn) • Normalmente, aplicar la función ƒ a un objeto aicorresponde a seleccionar el valor de alguno de sus componentes (por ej., un campo en el caso de registos). A ese valor se le denomina la clave del objeto. En otros casos ƒ es simplemente la identidad (por ej., cuando los aison escalares). Programación 1. Plan 97. InCo. Fac. de Ingeniería

  21. Ordenación por Inserción • El método de ordenación por inserción debe su nombre al hecho que en la i-ésima pasada se ``inserta´´ el i-ésimo elemento del array en el lugar adecuado entre los i-1elementos que lo preceden, los cuales ya fueron ordenados previamente. • Como resultado de esta inserción los i primeros elementos del array quedan ordenados. j i-1 i 1 n Programación 1. Plan 97. InCo. Fac. de Ingeniería

  22. Ordenación por Inserción • Supongamos que el array a ordenar es • Var A : array [1..n] of T • entonces el método procede de esta forma: • for i := 2 to n do • moverA[i]hasta la posiciónj  i • tal que • ƒ(A[i]) ƒ(A[k]) paraj  k  i, y • ƒ(A[i]) ƒ(A[j-1]) j = 1 Programación 1. Plan 97. InCo. Fac. de Ingeniería

  23. Var i,j: 1..n; • parar: boolean; • for i := 2 to n do • begin • j := i; • parar := false; • repeat • if ƒ(A[j]) ƒ(A[j-1]) • then begin • intercambio(A[j], A[j-1]); • if j  2 then j := j - 1 • else parar := true • end • else parar := true • until parar • end; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  24. Ordenación por Selección • Se localiza el elemento de mayor clave del array y se lo intercambia con el elemento que se encuentra en la última posición. • Se repite este procedimiento en la porción del array que no incluye la última posición. mayor Programación 1. Plan 97. InCo. Fac. de Ingeniería

  25. Ordenación por Selección • Supongamos nuevamente que el array a ordenar es • Type arreglo = array [1..n] of T; • Var A : arreglo; • El método procede entonces de esta forma: • for i := n downto 2 do • encontrar el máximo entre1ei • intercambiar el máximo con el elemento A[i] Programación 1. Plan 97. InCo. Fac. de Ingeniería

  26. Encontrar el índice del máximo • Function maximo(ultimo : integer; • A : arreglo) : integer; • var j, max : integer; • begin • max := 1; • for j := 2 to ultimo • do • if ƒ(A[j]) > ƒ(A[max]) then max := j; • maximo := max • end; Programación 1. Plan 97. InCo. Fac. de Ingeniería

  27. Procedure Seleccion(var A : arreglo); • var i, mayor : integer; • temp : T; • begin • for i := n downto 2 do • begin • mayor := maximo(i,A); • temp := A[mayor]; • A[mayor] := A[i]; • A[i] := temp • end • end; Programación 1. Plan 97. InCo. Fac. de Ingeniería

More Related