Curso de Programación 1

Documentos relacionados
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Algorítmica y Complejidad. Tema 3 Ordenación.

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

Algoritmos de Ordenación

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Métodos de ordenamiento y búsqueda en vectores

Algoritmos y Programación Clase 8

TAD. TAD Conjunto Análisis del TAD Conjunto Posibles implemantaciones A.E.D.

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN

Métodos de ordenamiento y búsqueda para datos en memoria principal

23. Ordenación de vectores (tablas) Diego Gutiérrez

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

ALGORITMOS Y ESTRUCTURAS DE DATOS EJERCICIOS RESUELTOS SEGUNDA PARTE

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

Algorítmica y Complejidad. Tema 5 Divide y Vencerás.

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Avance rápido

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Ingeniería del software I 9 - Diseño detallado

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

<tipo> Tipo de dato de los elementos del vector

Estructuras de Datos y Algoritmos

Analisis de algoritmos

Unidad 4. Arreglos y Cadenas

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

3.2. Programación estructurada. Principal. Modulo 1 Modulo 2 Modulo 3 Modulo 4. Modulo Modulo Modulo 3 1 Modulo 4 1 Modulo 4 2. Pág.

Generación de números aleatorios con distribución uniforme

Repetición Condicional

Ordenamiento (Sorting)

Métodos de Ordenamiento. Unidad VI: Estructura de datos

Registros. Programación 1. InCo - FING. Programación 1 Registros InCo - FING 1 / 20

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

Primer Parcial. Programación 1 Instituto de Computación Año 2017

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Análisis y Diseño de Algoritmos Tablas de Hash

Algorítmica y Lenguajes de Programación. Ordenación (ii) En la lección anterior se vieron dos métodos de ordenación:

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

UTN FRLP Ing. en Sistemas de Información Algoritmos y Estructura de Datos Trabajos Prácticos Curso 2010

Tema: Métodos de Ordenamiento. Parte 1.

1.2.4 Listas enlazadas

Manual de turbo pascal

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles.

Primer Parcial. Programación 1 Instituto de Computación Año 2011

Introducción a la Programación Ingenieria en Informática Junio 2008

LISTAS DOBLES y multiples

PROGRAMACIÓN ESTRUCTURADA

PROGRAMACIÓN ESTRUCTURADA

Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

Program Orden; Uses crt; Const n=100; Type vector= array[1..n] of integer; Var a,b : vector; prim, ulti,i, ne : integer; metodo : char;

Tema 6. Ordenación, búsqueda e intercalación interna

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos

ARBOLES B. Lo que si es cierto es que la letra B no significa "binario", ya que:

Análisis de algoritmos

BÚSQUEDA SECUENCIAL / LINEAL

FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información. Ejercicios de recursividad

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

3.2. Matrices Introducción Qué ocurre cuando el tipo base de un array es otro array? Mat =vector[ vector[1....4] de (vector[1..5] de enteros);

Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 )

Esquema de Dividir y Vencer

Porque usar Arreglos?

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Estructura de datos (arreglos) Vectores y Matrices

B) Contestar Verdadero o Falso a las siguientes preguntas, justificando la respuesta:

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

Estructuras de Control

Tema 3. Estructuras de Datos

Tablas de Dispersión (Hashing Tables)

Estrategias de pivoteo

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Programación de Sistemas

Estructura de datos Tema 6: Tablas de dispersión (hashing)

Estudiemos el siguiente problema, propuesto por Wirth y desarrollado por Dijkstra: Una lista de las primeras secuencias que cumplen es:

Tema 2. Divide y vencerás.

Análisis de Algoritmos

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

Estructura de datos Tema 3: El TAD Lista lineal. Universidad de Valladolid. Departamento de informática. Campus de Segovia

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 3: ESTRUCTURAS DINÁMICAS LINEALES. LISTAS ENLAZADAS, PILAS Y COLAS

Ordinales, Enumerados y Conjuntos

5. ESTRUCTURAS DE REPETICIÓN

Generación de variables aleatorias discretas Método de la Transformada Inversa

Transcripción:

Curso de Programación 1 Plan 97 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 2

Búsqueda lineal En la búsqueda lineal se recorre en forma secuencial el array hasta que se encuentra el elemento deseado, A[1] A[2] A[3]... A[n] v 1 v 2 v 3... v n v 3 o se examinan sin éxito todos los elementos del array. 3

type arreglo = array[1..n] of integer; Function BLineal(x: integer; A: arreglo): boolean; var i: 1..n+1; begin i := 1; while (i <= n) and (A[i] <> x) do i := i + 1; BLineal := i <= n end; 4

Búsqueda binaria La búsqueda de un elemento en un array puede acelerarse en forma considerable si los elementos del mismo están ordenados. En tal caso, una forma eficiente de 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. 5

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. 6

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 7

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. 8

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 facilmente: inf..sup vacío? inf > sup 9

Function BBinaria(x: integer; A: arreglo): boolean; { precond: A ordenado} var inf, sup, medio: 0..n+1; begin inf := 1; sup := n; medio := (inf + sup) DIV 2; while (inf <= sup) and (A[medio] <> x) do begin if x < A[medio] then sup := medio 1 else inf := medio + 1; medio := (inf + sup) DIV 2 end; BBinaria := inf <= sup end; 10

Function RBBin(inf,sup: 0..n+1; x:integer; A: arreglo): boolean; var medio: 0..n+1; Versión Recursiva begin medio := (inf + sup) div 2; if (inf <= sup) and (A[medio] <> x) then if x < A[medio] then RBBin := RBBin(inf,medio-1,x,A) else RBBin := RBBin(medio+1,sup,x,A) else RBBin := inf <= sup end; 11

Ordenación Por ordenar 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. 12

Ordenación Existen múltiples ejemplos reales de conjuntos ordenados: la guía telefónica, índices de libros, ficheros de bibliotecas, diccionarios, actas de exámenes, etc. Existe una gran variedad de métodos de ordenación para arrays. Veremos uno de esos métodos, llamado ordenación por inserción. 13

Ordenación Ordenar un conjunto de objetos a 1,a 2,...,a n consiste en encontrar una permutación a k1,a k2,...,a kn tal que dada una función de ordenación ƒ se verifique: ƒ(a k1 ) ƒ(a k2 )... ƒ(a kn ) Normalmente, aplicar la función ƒ a un objeto a i corresponde 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 (puede ser el mismo objeto, por ej., cuando los a i son de un tipo simple). 14

Ordenación por Inserción Este método debe su nombre al hecho de que en la i- ésima pasada se inserta el i-ésimo elemento del array en el lugar adecuado entre los i-1 elementos que lo preceden, los cuales ya fueron ordenados previamente. Como resultado de dicha inserción los i primeros elementos del array quedan ordenados. 1 j i-1 i n 15

Procedure OrdIns (var A: array[1..n] of T); var i,j: 1..n; begin for i := 2 to n do begin end end; j := i; while (j >= 2) and (ƒ(a[j]) < ƒ(a[j-1])) do begin end intercambio(a[j], A[j-1]); j := j - 1 16

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 17

Ordenación por Selección Supongamos nuevamente que el array a ordenar es type arreglo = array [1..n] of T; El método procede entonces de esta forma: for i := n downto 2 do encontrar el máximo entre 1 e i intercambiar el máximo con el elemento A[i] 18

Encontrar el máximo Function maximo(ultimo: 2..n; var j, max : 2..n; begin max := 1; A: arreglo): 2..n; for j := 2 to ultimo do if ƒ(a[j]) > ƒ(a[max]) then max := j; maximo := max end; 19

Procedure OrdSel(var A: arreglo); var i, mayor: 1..n; 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; 20