Búsqueda y ordenación Programación II 7-8 de enero de 2009.

Slides:



Advertisements
Presentaciones similares
Diseño y análisis de algoritmos
Advertisements

Diseño y análisis de algoritmos
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
Estructuras de Repetición Algoritmos
Programación II de febrero de 2009
Lenguajes de programación
ALGORITMOS DE ORDENAMIENTO
Resolución de Problemas Algoritmos y Programación
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Técnico en programación de Software
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
MÉTODOS DE CLASIFICACION
PROGRAMACION DE ESTRUCTURAS DE DATOS
PROGRAMACION DE ESTRUCTURAS DE DATOS IV. MÉTODOS DE ORDENAMIENTO.
METODO DE ORDENAMIENTO POR SELECCIÓN.
2 Acciones y funciones 2.1 Concepto
Recurrencia Programación II 3-4 de febrero de 2009.
Ordenación, Clasificación
Fundamentos de Programación
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Ejercicios de funciones
Programación de Computadores
Proceso de información en la computadora
Complejidad Programación II de febrero de 2009.
Algoritmos numéricos. Método de “aproximación sucesiva”: se genera una hipótesis sobre la respuesta y en cada iteración se utiliza dicha hipóte- sis para.
7.  El TDA Diccionario.
Algoritmos para Ordenar datos
Tema 8b Búsqueda y ordenación en arreglos. Ordenación Es un proceso que altera el orden de los elementos de un conjunto. Tiene asociada una relación de.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Capítulo 1 “Elementos de Programación”
COMPUTACION 2009 Clase 6 Clase 7.
Algoritmos de búsqueda
Programación II 3-4 de marzo de 2009
M.S.C. Ivette Hernández Dávila
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
Definición: Reorganizar un conjunto dado de objetos en una secuencia especificada Objetivo: Facilitar la búsqueda de los elementos del conjunto ordenado.
Material de apoyo Unidad 4 Estructura de datos
Divide y vencerás 1. Método general.
Ordenación y Búsqueda.
Recurrencia Programación II de enero de 2009.
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Arreglos Programación I MC Beatriz Beltrán Martínez.
Recurrencia Programación II de enero de 2009.
Análisis y Diseño de Algoritmos
Algoritmos de Ordenamiento y Complejidad
Ordenación El ordenamiento por inserción (insertion sort en inglés) es una manera muy natural de ordenar para un ser humano, y puede usarse fácilmente.
Parte I. Estructuras de Datos.
TEMA1:Introducción 1 1. Programación 2. Lenguajes de Programación 3. Ordenador.
Ordenamiento en lenguaje c
Quick Sort Estructuras de Datos Universidad Autónoma de Tlaxcala Unidad Académica Multidisciplinaria 14 de Septiembre de 2012.
PRINCIPIOS DE PROGRAMACIÓN
Elaboración de algoritmos usando lógica de programación
METODOS DE BUSQUEDA EN C++ Oscar Michel Ruiz León
Diagrama de flujo y Pseudocódigo
Introducción a los TADs
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Conceptos Generales PROGRAMACIÓN I DOCENTE: ING. MARLENY SORIA M. 1.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Introducción a la Programación Orientada a Objetos Ordenamiento Ordenar una estructura de datos consiste en reacomodar sus elementos de manera tal que.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
ESTRUCTURAS SELECTIVAS Elaborado por; Ing. Alberto Pérez.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
ALGORITMOS Asignatura: Informática. Algoritmos Conjunto de instrucciones ordenadas de forma lógica y precisa, con un inicio y fin que permite resolver.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO FACULTAD DE INGENIERÍA COORDINACIÓN DE MATERIAS PROPEDÉUTICAS INGENIERÍA EN SISTEMAS ENERGÉTICOS SUSTENTABLES.
ALGORITMOS Y PROGRAMAS. OBJETIVOS  Resolver problemas mediante la especificación algorítmica.  Proporcionar los procedimientos y técnicas para el desarrollo.
Complejidad Programación II de febrero de 2009.
Transcripción de la presentación:

Búsqueda y ordenación Programación II 7-8 de enero de 2009

Funciones Un concepto fundamental en este curso es la función Una función no sólo resuelve un problema específico, sino una clase de problemas genéricos Ejemplo: –sumar los números enteros 5 y 6 (específico) –sumar los números enteros a y b (genérico)

Funciones Una función tiene una entrada y una salida La entrada es una lista de variables que especifica el tipo de cada variable La salida es un valor de un tipo determinado Ejemplo en C: int sumar(int a, int b)

Funciones Una función debe resolver correctamente el problema para cualquier valor de las variables de entrada Por lo tanto, tiene que detallar el proceso completo que lleva a la solución Una función que no produce ningún resultado se llama acción

Ejemplos int sumar(int a, int b) { int resultado = a + b; return resultado; } void mostrar(int x) { printf("El valor es %d\n", x); }

Llamar a funciones Para resolver un problema específico del tipo resuelto por una función, se llama Llamar a una función consiste en especificar los valores de entrada: int suma = sumar(5, 6); mostrar(3); Al llamar a una función se ejecuta su proceso con los valores especificados

Pseudocódigo El pseudocódigo es un lenguaje genérico para escribir funciones No corresponde a ningún lenguaje de programación (como C o Java) En cambio, está compuesto por palabras más cercanas al lenguaje natural Vamos a usar el pseudocódigo para escribir funciones

Ejemplos funcion Sumar(a:natural, b:natural) devuelve natural variable resultado:natural; resultado  a + b; devuelve resultado; ffuncion accion Mostrar(x:natural) // Mostrar el valor de x en la pantalla faccion

Interpretar programas La programación no sólo consiste en escribir programas También es necesario poder interpretar programas de otros programadores –utilizar el código en su programa –adaptar el código a problemas parecidos –ayudar en el proceso de depuración –verificar que la solución es correcta

Búsqueda lineal Búsqueda lineal con marcador Búsqueda binaria Búsqueda binaria simplificada Esquemas sencillos de ordenación Algoritmo de la Burbuja: Bubble Sort Algoritmo de Inserción: Insertion Sort Algoritmo de Selección: Selection Sort Métodos de Búsqueda y Ordenación

Los problemas más comunes en la informática son la búsqueda y la ordenación. Número de preguntas diarias en Google: 400 millones (2006) Por lo tanto, la eficiencia de la búsqueda es importante La ordenación consiste en ordenar los elementos de un conjunto con el fin de acelerar la búsqueda Métodos de Búsqueda y Ordenación

Encontrar un elemento determinado dentro de una colección dada. La búsqueda se realiza sobre una estructura de datos de tamaño fijo y conocido, por ejemplo, un vector. Los algoritmos sirven para hacer búsquedas sobre cualquier tipo de datos, siempre que sea posible realizar comparaciones (‘igualdad’, ‘menor que’) sobre este tipo. ¿Porqué se llama lineal? Búsqueda lineal

1 funcion BusquedaLineal (V: vector de natural ; 2 elem,n : natural ) devuelve entero 3variable i : natural ; 4i ← 1 ; 5mientras ( ( i  n ) y (V[i]  elem) ) hacer 6 i ← i +1; 7fmientras 8si ( i  n ) entonces 9devuelve i ; 10sino 11devuelve -1; 12fsi 13 ffuncion

Búsqueda lineal La instrucción mientras lleva una doble condición: mientras ( ( i  n ) y (V[i]  elem) ) hacer Comprobar que la doble condición se satisface para cada valor de la variable i es ineficiente Una manera de evitar la doble condición es introducir un marcador

Búsqueda lineal con marcador 1 funcion BusquedaLinealConMarcador (V: vector de natural ; 2 elem,n : natural ) devuelve entero 3variable i : natural ; 4i ← 1 ; 5V[n+1] ← elem ; 6mientras (V[i]  elem) hacer 7 i ← i +1; 8fmientras 9si ( i = n+1 ) entonces 10devuelve -1; 11sino 12devuelve i; 13fsi 14 ffuncion

La búsqueda lineal es la primera idea que ocurre para el problema de la búsqueda. Sin embargo, su eficiencia puede ser mejorado de forma considerable. Para hacerlo es necesario suponer que los elementos del vector estén ordenados. Suponemos que el vector esta ordenado de forma ascendente (de menor a mayor). Búsqueda binaria

Si el vector está ordenado (de manera ascendente o descendente), es posible aplicar búsqueda binaria. La idea es hacer servir la propiedad adicional del vector para acelerar el proceso de búsqueda: 1) Dividir el vector en dos partes iguales. 2) Si el elemento en el centro del vector es mayor que el elemento buscado, buscar en la primera mitad. 3) Si el elemento en el centro del vector es menor que el elemento buscado, buscar en la segunda mitad. Búsqueda binaria

1 funcion BusquedaBinaria (V: vector de natural ; elem,n : natural ) devuelve entero 2variable E,D,medio : natural ; 3 encontrado : booleano ; 4E ← 1 ; 5D ← n ; 6encontrado := falso ; 7mientras ( (E  D) y no(encontrado) ) hacer 8 medio ← (E+D) / 2; 9 si (V[medio] = elem) entonces 10 encontrado ← cierto; 11 sino 12 si (V[medio] < elem) entonces 13 E ← medio + 1; // derecha. 14 sino 15 D ← medio - 1; // izquierda. 16 fsi 17 fsi 18fmientras 19si ( encontrado ) entonces 20 devuelve medio; 21sino 22 devuelve -1; 23fsi 24ffuncion

De nuevo, la instrucción mientras lleva una doble condición mientras ( (E  D) y no(encontrado) ) hacer Es posible mejorar ligeramente la eficiencia eliminando la doble condición Una manera de hacerlo es dejar de comprobar si el elemento en el medio es igual al elemento buscado Con esta modificación, es posible que el algoritmo repita más veces el bucle mientras Sin embargo, cada iteración será más eficiente Búsqueda binaria simplificada

1 funcion BusquedaBinariaSimplificada (V: vector de natural ; 2 elem,n : natural ) devuelve entero 3variable E,D,medio : natural ; 4E ← 1 ; 5D ← n ; 6mientras (E  D) hacer 7 medio ← (E+D) / 2; 8 si (V[medio] < elem) entonces 9 E ← medio + 1; 10 sino 11 D ← medio; 12 fsi 13fmientras 14si ( (D = n + 1) o (V[D]  elem) ) entonces 15 devuelve -1; 16sino 17 devuelve D; 18fsi 19ffuncion

Eficiencia de la búsqueda ¿Cuál de las dos opciones de búsqueda (lineal, binaria) es más óptimo?

Hemos visto como la búsqueda se puede realizar con más eficiencia si los elementos están ordenados. Si necesita buscar muchos datos en un mismo conjunto, vale la pena ordenar los elementos primero. Igual que para la búsqueda, la ordenación se puede realizar sobre cualquier tipo de elementos, siempre que se puedan comparar (‘menor que’). Esquemas sencillos de ordenación

Como la ordenación es un problema importante, existen un gran número de algoritmos de ordenación. Los algoritmos existentes se pueden utilizar en diferentes estructuras de datos (p.ej., un vector). Imponen diferentes tipos de requerimientos sobre los datos a ordenar. También varía su eficiencia, tanto a nivel de memoria como a nivel de tiempo de ejecución. Esquemas sencillos de ordenación

En general, los algoritmos más eficientes son más complejos y menos intuitivos. Estudiaremos en total cinco de estos algoritmos. Los tres primeros (Burbuja, Inserción, y Selección) son muy sencillos, aunque no muy eficientes. MergeSortQuickSort Los otros dos (MergeSort y QuickSort) son tan eficientes como se puede esperar para un algoritmo de ordenación, pero menos intuitivos. 3.3 Esquemas sencillos de ordenación

El algoritmo de ordenación de la burbuja es uno de los más fáciles de recordar. Su nombre describe de manera intuitiva su funcionamiento. Imaginamos que los números menores ‘pesan menos’ y ‘suben a la superficie’ como una burbuja. Se basa en el intercambio entre pares de items Algoritmo de la Burbuja: Bubble Sort

1 funcion Burbuja (V : vector de natural ; n : natural ) devuelve vector de natural 2variable i,j : natural ; 3para i ← 1 hasta n-1 hacer 4 para j ← n hasta i+1 pasos –1 hacer 5 si (V[j] < V[j-1]) entonces 6 Intercambiar(V, j, j-1); 7 fsi 8 fpara 9fpara 10devuelve V; 11 ffuncion accion Intercambiar (V : vector de natural ; i,j : natural ) 14variable aux : natural ; 15aux ← V[i] ; 16V[i] ← V[j] ; 17V[j] ← aux ; 18 faccion

Algoritmo de la Burbuja: Animación

Algoritmo de Inserción: Insertion Sort Se basa en el método seguido por los jugadores de cartas:  Sec-destino (ordenada) Secuencia-Origen(por ordenar) V[1... i-1] V[i... n]  En cada paso tomamos el elemento V[i] y lo insertamos donde convenga de la secuencia destino i= i= i= i= i= i= i=  para i=2 hasta n hacer insertar V[i] en V[1..i-1] fpara  Para simplificar la inserción ampliamos el vector a V[0..n] para poner en v[0] el marcador o centinela que simplifique la búsqueda de la inserción.  Insertar v[i] en v[0..i]: si v[i-1]<v[i] hacer intercambiar V[i] por v[i-1] sino terminar fsi

Algoritmo de Inserción: Insertion Sort 1 funcion Insercion(V: vector de natural; n:natural) devuelve vector de natural 2variable i,j : natural ; 3V[0] ← MIN_INT; 4para i ← 2 hasta n hacer 5 j ← i; 6 mientras (V[j] < V[j-1]) hacer 7 Intercambiar(V, j, j-1); 8 j ← j-1; 9 fmientras 10fpara 11devuelve V; 12 ffuncion 13 accion Intercambiar (V : vector de natural ; i,j : natural ) 14variable aux : natural ; 15aux ← V[i] ; 16V[i] ← V[j] ; 17V[j] ← aux ; 18 faccion

Algoritmo de Inserción: Animación

Algoritmo de Selección: Selection Sort En cada paso seleccionamos el elemento de menor valor de los no ordenados y lo colocamos como primero de los no ordenados: seleccionamos-entre colocamos-en quedará-por-ordenar i=1 v[1..n] v[1] v[2..n] i=2 v[2..n] v[2] v[3..n] i=3 v[3..n] v[3] v[4..n] i=n-1 v[n-1..n] v[n-1] v[4..n] El último ya queda ordenado!  Para i=1 hasta n-1 hacer Asignar a k el menor valor de v[i..n] Intercambiar v[i] con v[k] fpara  Idea opuesta a la de Inserción: Inserción: trabaja sobre los ya ordenados Selección: trabaja sobre los ya ordenados

Algoritmo de Selección: Selection Sort 1 funcion Seleccion(V: vector de natural; n: natural) devuelve vector de natural 2variable i,j,menor : natural ; 3para i ← 1 hasta n - 1 hacer 4menor ← i; 5 para j ← i + 1 hasta n hacer 6 si (V[j] < V[menor]) entonces 7 menor ← j; 8 fsi 9fpara 10 Intercambiar(V, i, menor); 11fpara 12devuelve V; 13 ffuncion

Algoritmo de Selección: Animación

Eficiencia de la ordenación ¿Cuál es la eficiencia de los algoritmos sencillos de ordenación? Una idea: contar el número de instrucciones que cada algoritmo realiza Hay que tomar en cuenta que las instrucciones dentro de un bucle mientras se repiten varias veces