ALGORITMO DE ORDENACIÓN

Documentos relacionados
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;

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

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Divide y vencerás

Estructuras de Datos y Algoritmos

Algoritmos sobre Listas

Capítulo 2 ORDENACIÓN

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

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

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

Estructuras de Datos y Algoritmos

Análisis de algoritmos

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

Introducción a la Computación (Matemática)

Algoritmos de Ordenación

PROGRAMA: COMPUTACION I

PROGRAMACIÓN ESTRUCTURADA

Análisis de algoritmos

Parte II: Estructuras de Datos y Algoritmos

Tema 9. Recursividad

UNIVERSIDAD CARLOSIII DE MADRID. BUSCADOR DE ESCRITORIO MULTIMEDIA: CIII Desktop Search

Algoritmos de Ordenamiento

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Buscador de escritorio multimedia CIII Desktop Search

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

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

Recursión. Recursión continuación

Algoritmos y Complejidad

Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos

GUIA EXAMEN FINAL/EXTRAORDINARIO

Parte II: Estructuras de Datos y Algoritmos

Teoría de Lenguajes Primer Laboratorio 2018

Introducción a la Computación

Capítulo 2 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.

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

Estructura de datos y de la información Boletín de problemas - Tema 9

Examen de Estructuras de Datos y Algoritmos. (Modelo 2)

Métodos de ordenamiento y búsqueda en vectores

Examen de Estructuras de Datos y Algoritmos. (Modelo 1)

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Arboles. Definiciones formales: 1) un árbol es un grafo acíclico finito T (P, E) tal que. P = E + 1 => todo arco es desconectante.

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos

Apunte de cátedra: Ordenación de Arreglos

dit UPM Tema 2: Algoritmos /ordenación /java Análisis y diseño de software José A. Mañas

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

Tema 3. Análisis de costes

Arreglos y Subrangos

Tema 2. Divide y vencerás.

INDICE. Prólogo de la Segunda Edición

Eduardo Andrés Medina Ramírez Angel Robles Pérez MÉTODO DE ORDENAMIENTO QUICKSORT

Evolución del software y su situación actual

Algorítmica y Lenguajes de Programación. Búsqueda

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

UNIVERSIDAD DEL VALLE DE MÉXICO PROGRAMA DE ESTUDIO DE LICENCIATURA PRAXIS MES XXI

Ordenamiento y Búsqueda

Complejidad computacional y asintótica

Informática II Fundamentos de Programación Escuela Superior de Ingenieros de San Sebastián - Tecnun

La eficiencia de los programas

INDICE Parte I Algoritmos y herramientas de programación Capitulo 1. Computadoras y lenguajes de programación Actividades de Programación Resueltas

Programación con C Intermedio

Capítulo 3 Ordenación(Clasificación) y Búsqueda

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

Manual de turbo pascal

Fundamentos de Programación Visual Basic

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

Ordenamiento (Sorting)

EXAMENES RESUELTOS DE PROGRAMACION I

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

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS

Demostrando cotas inferiores: Arboles de decisión

TÉCNICAS DE CAJA BLANCA

Programación II. Mario Aldea Rivas Programación II 13/04/11 1. Mario Aldea Rivas Programación II 13/04/11 2

Análisis de algoritmos

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

AREA A LA QUE PERTENECE: POST REQUISITO: CATEGORIA: Obligatorio SEMESTRE: 1er. Semestre 2015 AUXILIAR:

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

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

3. DISEÑO DE ALGORITMOS PARALELOS Y DISTRIBUIDOS

AREA A LA QUE PERTENECE: 103 Matemática Básica 2 34 créditos POST REQUISITO: CATEGORIA: Obligatorio SEMESTRE: Primer Semestre 2015

Programación II Práctica 03: Recursividad Versión del 10/08/2016

LENGUAJES DE PROGRAMACIÓN. Solución al Ejercicio de Autocomprobación 1

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

POST REQUISITO: CATEGORIA: Obligatorio SEMESTRE: Primer Semestre 2015 HORAS POR SEMANA DEL LABORATORIO: DIAS QUE SE IMPARTE EL LABORATORIO:

Fundamentos de programación C++

Algoritmos de ordenación básicos

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

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

Si L es recursivo, entonces es recursivamente numerable

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

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

Introducción al Análisis y Diseño de Algoritmos

Tarea 3 Búsqueda por Interpolación y Extrapolación

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Índice general 7. Presentación 15

Introducción al Lenguaje de Programación Ada

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

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

Transcripción:

Introducción ALGORITMO DE ORDENACIÓN Un algoritmo eficiente siempre tiene que ser mejor que otro que no lo es, aun en el caso de que el segundo se ejecute en un sistema claramente superior. Un análisis de coste puede efectuarse en cualquiera de los ámbitos de su uso. Los dos más frecuentes son: El análisis de coste computacional, que mide la eficiencia de coste temporal de los algoritmos. El análisis de consumo de memoria, que mide la cantidad de memoria consumida por un algoritmo. Un buen algoritmo no debe depender del sistema en el que se ejecuta. Cuando hablamos del sistema informático en el entorno de análisis del coste computacional (o de otros recursos), englobamos en la expresión cualquier característica peculiar: Sistema operativo Hardware Lenguaje de programación RAM Velocidad de CPU, etc. Métodos De Ordenación Los métodos de ordenación conocidos son: Inserción Directa: Para x=2 hasta n (+) Y x-1 Sw 0 Mientras (y<>0) y (sw=0) Si A[y-1]>A[y] AuxA[y-1] A[y-1]A[y] A[y]Aux De lo contrario Sw1 Yy-1 Selección directa: ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 1

Para x=1 hasta n-1 (+) Menorx Para y=x+1 hasta n (+) Si A[y] <A [menor] Menory Si menor<>x AuxA[x] A[x] A[menor] A[menor] Aux Método De La Burbuja: Para i=1 hasta n-1 Para j=i+1 hasta n Si A[i]>A[j] AuxA[i] A[i]A[j] A[j]Aux Método de la burbuja mejorado: Sw1 Mientras sw=1 Sw 0 Para i=1 hasta n-1 (+) Si A[i] >A[i+1] AuxA[i] A[i]A[i+1] A[i+1]Aux COMPARACION DE COMPLEJIDADES: ORDEN DE COMPLEJIDAD INSERCION DIRECTA SELECCION DIRECTA (MEJORADO) MEJOR CASO O(N) O(N2) O(N2) O(N) CASO PROMEDIO O(N2) O(N2) O(N2) O(N2) PEOR CASO O(N2) O(N2) O(N2) O(N log N) ORDEN EXACTO DE COMPLEJIDAD INSERCION DIRECTA SELECCIÓN DIRECTA MEJORADO O(N2) O (N2) O (N2) O (N2) TIEMPO EN COMPARACIONES Y ASIGNACIONES: INSERCION DIRECTA SELECCIÓN DIRECTA MEJORADO ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 2

COM n-1 n-1 MEJOR CASO ASIG 0 0 0 0 PROMEDIO COM DEPENDE ASIG PEOR CASO COM ASIG n-1 Cuál es el algoritmo de ordenación más óptimo en cuanto a tiempo y espacio? El algoritmo de ordenación QuickSort (se basa en la técnica divide y vencerás) para grandes conjuntos de datos es el más eficiente. Si hacemos una comparación con el algoritmo de ordenación por burbuja (BubbleSort), independientemente del sistema informático que se use para ejecutarlos. A pesar de ello suele ser el algoritmo más utilizado, y se demuestra que su tiempo promedio es menor, en una cantidad constante, al de todos los algoritmos de ordenación de complejidad O(n log n). En todo esto es importante hacer notar, como hemos indicado antes, la relevancia que toma una buena elección del pivote, pues de su elección depende considerablemente el tiempo de ejecución del algoritmo. La técnica divide y vencerás consiste en: Descomponer un problema en un conjunto de subproblemas más pequeños. Se resuelven estos subproblemas. Se combinan las soluciones para obtener la solución para el problema original. Algoritmo: PROCEDURE Quicksort(VAR a:vector;prim,ult:cardinal); VAR l:cardinal; BEGIN IF prim<ult THEN ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 3

l:=pivote(a,a[prim],prim,ult); Quicksort(a,prim,l-1); Quicksort(a,l+1,ult) END END Quicksort; ********************************************************************************** PROCEDURE Pivote(VAR a:vector;p:integer;prim,ult:cardinal) :CARDINAL; (* permuta los elementos de a[prim..ult] y devuelve una posicion l tal que prim<=l<=ult, a[i]<=p si prim<=i<l, a[l]=p, y a[i]>p si l<i<=ult, donde p es el valor inicial de a[prim] *) VAR i,l:cardinal; BEGIN i:=prim; l:=ult+1; REPEAT INC(i) UNTIL (a[i]>p) OR (i>=ult); REPEAT DEC(l) UNTIL (a[l]<=p); WHILE i<l DO Intercambia(a,i,l); REPEAT INC(i) UNTIL (a[i]>p); REPEAT DEC(l) UNTIL (a[l]<=p) END; Intercambia(a,prim,l); RETURN l END Pivote; El tiempo utilizado por los dos algoritmos para ordenar un vector de 1000000 de elementos es el siguiente: PC AMD Athlon XP2800+ 2.08 GHz 512 RAM usando el algoritmo de ordenación QuickSort: Tiempo de ejecución 8 segundos. IBM Star usando el algoritmo de ordenación de la burbuja: Tiempo de ejecución 6 minutos. Teniendo en cuenta que el IBM Star es 160 veces más rápido que el PC en cuestión se puede apreciar que la eficiencia del Quicksort frente a la burbuja, con un tamaño de datos considerable, no depende del sistema informático. ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 4

LUCENE Introducción Cualquier motor de búsqueda tiene dos elementos clave: la indexación y la búsqueda. Primero hay que definir sobre qué se quiere buscar y cómo, y luego buscar. La parte de indexación es mucho más compleja que la de búsqueda, y es en la que más tiempo nos pasaremos pensando. Lo bueno de Lucene, es que tanto la indexación como la búsqueda giran entorno a lo mismo: el Documento, que es sin duda uno de los elementos más importantes. Usaremos paralelismos con base de datos, con la premisa de que sólo sirven para hacernos a una idea: La "tabla" de la base de datos tiene su analogía en Lucene con el "index". Un "index" acaba siendo un directorio con varios archivos determinados, de los cuales no queremos saber nada. Sólo nos interesa saber su nombre y que todo el directorio debe tener permisos de lectura y escritura. La "estructura de la tabla" de la base de datos es el "Document". El Document no se define de forma fija desde un principio. Lo vamos a generar en código, "al vuelo". Los "campos de la tabla" son los "Fields" del Document. Igual que en una base de datos definiríamos el tipo de datos del "Field" o si es Nullable o no, los Fields de Lucene requieren una serie de definiciones que veremos en artículos posteriores. Qué es Lucene?, y que aplicaciones prácticas se le podría dar? Lucene es un api para la recuperación de información, Information Retrieval (IR), distribuido bajo la Apache Software License. Encaja perfectamente en el concepto de gestión documental (DMS) e incluso en la gestión de contenidos (CMS), puesto que un sistema de gestión documental requiere de la extracción del contenido de los documentos, la indexación de los mismos en un repositorio y la posibilidad de recuperarlos realizando búsquedas por su contenido textual. ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 5

Como ya especifique es útil para cualquier aplicación que requiera indexado y búsqueda a texto completo; tanto la indexación como la búsqueda gira entorno a lo mismo: el Document, que es sin duda uno de los elementos más importante. Expresándolo en pseudocódigo: Indexación Función Indexar(parámetros) { Indice = AbrirIndice(); Document doc = new Document(); doc.añadirfield(new Field(parametros1)); doc.añadirfield(new Field(parametros2)); Indice.AñadirDocument(doc); Búsqueda Función Buscar(parámetros) { Indice = AbrirIndice(); DocumentCollection docs = Indice.Buscar(parámetros); Indice.Cerrar(); } Indice.Cerrar(); } Toda la información con la que trabaja lucene, es de tipo string, por tanto, si queremos guardar números, y lo que es más importante, hacer busquedas sobre estos de tipo BETWEEN hemos de tener en cuenta la longitud de las cadenas a comparar. Lucene tiene versiones para otros lenguajes como Delphi, Perl, C#, C++, Python, Ruby y PHP y se encuentran en desarrollo versiones para lenguajes de programación como: Lucene4c - C CLucene - C++ MUTIS - Delphi NLucene -.NET Lucene.Net -.NET Plucene - Perl Pylucene - Python Ferret y RubyLucene - Ruby Zend Framework (búsquedas) - PHP Nutch - Java (Buscador web, tipo Google) Montezuma Lisp ANÁLISIS Y DISEÑO DE ALGORITMOS Patricia Calapi Página 6