Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande
|
|
- Juan José José Francisco Soto Fidalgo
- hace 5 años
- Vistas:
Transcripción
1 Complejidad computacional Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2015 Departamento de Computación - FCEyN - UBA Algoritmos - clase 10 Introducción a la complejidad computacional y algoritmo de búsqueda binaria Definición. La función de complejidad de un algoritmo es una función f : N N tal que f (n) es la cantidad de operaciones que realiza el algoritmo en el peor caso cuando toma una entrada de tamaño n. Algunas observaciones: 1. Medimos la cantidad de operaciones en lugar del tiempo total. 2. Nos interesa el peor caso del algoritmo. 3. La complejidad se mide en función del tamaño de la entrada y no de la entrada particular. 1 2 Notación O grande Complejidad computacional Definición. Si f y g son dos funciones, decimos que f O(g) si existen α R y n 0 N tales que f (n) α g(n) para todo n n 0. Intuitivamente, f O(g) si g(n) le gana a f (n) para valores grandes de n. Ejemplos: Si f (n) = n y g(n) = n 2, entonces f O(g). Si f (n) = n 2 y g(n) = n, entonces f O(g). Si f (n) = 100n y g(n) = n 2, entonces f O(g). Si f (n) = 4n 2 y g(n) = 2n 2, entonces f O(g) (y a la inversa). Utilizamos la notación O grande para especificar la función de complejidad f de los algoritmos. Si f O(n), decimos que el algoritmo es lineal. Si f O(n 2 ), decimos que el algoritmo es cuadrático. Si f O(n 3 ), decimos que el algoritmo es cúbico. En general, si f O(n k ), decimos que el algoritmo es polinomial. Si f O(2 n ) o similar, decimos que el algoritmo es exponencial. El algoritmo de búsqueda lineal tiene complejidad O(n). Decimos también el algoritmo es O(n). Se puede dar un algoritmos de búesuqeda más eficiente? 3 4
2 Búsqueda binaria Especificación del ciclo Problema: Determinar si un arreglo contiene un elemento dado. 1. Conocemos el algoritmo de búsqueda lineal, que tiene una complejidad de... O(n). 2. Se puede hacer mejor? Suponemos que el arreglo está ordenado, y que el elemento a buscar está dentro del rango dado por el primer y el último elemento. problema buscarbin (a : [Int], x : Int, n : Int) = res : Bool{ requiere a == n n > 1; requiere ( j [0..n 1)) a[j] a[j + 1]; requiere a[0] x a[n 1]; asegura res == (x a); Pc : low == 0 high == n 1 Qc : x a (a[low] == x a[high] == x) I : (0 low < high < n) (a[low] x a[high]) B : low + 1 < high v : high low 1, cota Código del programa Código del programa y especificación del ciclo bool buscarbin(int a[], int x, int n) { int low = 0, high = n - 1; bool buscarbin(int a[], int x, int n) { int low = 0, high = n - 1; while ( low+1 < high ) { int mid = (low + high) / 2; if ( a[mid] <= x ) low = mid; else high = mid; return (a[low] == x a[high] == x); // vale Pc : low == 0 high == n 1 while ( low+1 < high ) { // invariante I : 0 low < high < n a[low] x a[high] // variante v : high low 1 int mid = (low + high) / 2; if ( a[mid] <= x ) low = mid; else high = mid; // vale Qc : x a (a[low] == x a[high] == x) return (a[low] == x a[high] == x); 7 8
3 Teorema del Invariante 1. La precondición del ciclo implica el invariante Si 1. La precondición implica el invariante 2. El cuerpo del ciclo preserva el invariante 3. La postcondición vale al final 4. La función variante decrece 5. Si la función variante pasa la cota, el ciclo termina Entonces el ciclo es correcto y termina. Pc : low == 0 high == n 1 a[0] x a[n 1] n > 1 implica I : 0 low < high < n a[low] x a[high] El cuerpo del ciclo preserva el invariante // estado E (invariante + guarda del ciclo) // vale 0 low low + 1 < high < n a[low] x a[high] mid = (low + high) / 2; // estado F // vale mid = (low + high)@e div 2 low = low@e high = high@e // implica 0 low < mid < high < n if ( a[mid] <= x ) low = mid; else high = mid; // vale mid == mid@f // vale (x < a[mid@f ] high == mid@f low == low@f ) (x a[m@f ] low == mid@f high == high@f ) Falta ver que esto último implica el invariante 0 low < high < n: sale del estado F a[low] x a[high]: caso x < a[mid]: tenemos a[low] x < a[mid] == a[high] caso x a[mid]: tenemos a[low] == a[mid] x a[high] La poscondición vale al final Sabiendo que el arreglo está ordenado queremos probar que 1 {{ 0 low < high < n I B implica Qc 2 {{ a[low] x a[high] implica 4 5 {{{{ x a (a[low] == x a[high] == x) Por 1 y 3, resulta (low == high 1 low == high) 3 {{ high low + 1 Supongamos 4. Usando 2 y (low == high 1 low == high), implica 5. Supongamos 5. Directamente implica 4. Entonces la postcondición vale al terminar la ejecución del ciclo. 12
4 4. La función variante decrece 5. Si la función variante pasa la cota, el ciclo termina // estado E (invariante junto con guarda del ciclo) // vale 0 low low + 1 < high < n a[low] x a[high] // implica high low 1 > 0 mid = (low + high) / 2; // estado F // vale mid == (low + high) div 2 low == low@e high == high@e // implica 0 low < mid < high < n if ( a[mid] <= x ) low = mid; else high = mid; // vale mid == mid@f // vale (x < a[mid@f ] high == mid@f low == low@f ) (x a[mid@f ] low == mid@f high == high@f ) high low 1 0 implica high low + 1 Cuánto vale v = high low 1? caso x < a[mid]: high decrece pero low queda igual caso x a[mid]: low crece pero high queda igual Complejidad del algoritmo de búsqueda binaria Búsqueda binaria Cuántas comparaciones hacemos como máximo? En cada iteración nos quedamos con la mitad del espacio de búsqueda. Paramos cuando el segmento de búsqueda tiene longitud 1 o 2 número de iteración longitud del espacio de búsqueda 1 n 2 n/2 3 (n/2)/2 = n/2 2 4 (n/2 2 )/2 = n/2 3. t. n/2 t 1 Para llegar al espacio de búsqueda de longitud 1 hacemos t iteraciones 1 = n/2 t 1 entonces 2 t 1 = n entonces t = 1 + log 2 n. Luego, la complejidad de la bú squeda binaria es O(log 2 n). Es bueno un algoritmo con complejidad logarítmica? Búsqueda Búsqueda n Lineal Binaria , 000, , , 000, , 000, 000, Sí! Un algoritmo con este orden es muy eficiente
5 Búsqueda lineal versus búsqueda binaria Búsqueda lineal versus búsqueda binaria Vimos dos algoritmos de búsqueda para problemas relacionados problema buscar (a : [Int], x : Int, n : Int) = res : Bool requiere a == n > 0; asegura res == (x a); problema buscarbin (a : [Int], x : Int, n : Int) = res : Bool requiere a == n > 1; requiere ( j [0..n 1)) a[j] a[j + 1]; requiere a[0] x a[n 1]; asegura res == (x a); La búsqueda binaria es mejor que la búsqueda lineal porque la complejidad tiempo para el peor caso O(log 2 n) es menor que O(n). En general, más propiedades en los datos de entrada permiten dar algoritmos más eficientes. Consideremos la variante del problema de búsqueda que retorna la posición en la secuencia donde se encuentra el elemento x, y retorna un valor negativo en caso de que x no esté en la secuencia. Búsqueda lineal retorna la primera posición donde está el elemento x buscado. En general la busqueda binaria retorna alguna de las posiciones donde está x, pero no necesariamente la primera. La versión del algoritmo de búsqueda binaria que dimos encuentra la primera posición del elemento buscado (si es que existe). Simplemente hay que adaptar el algoritmo para que retorne un número entero. Y demostrar que el algoritmo encuentra la menor posición, si es que existe Nearly All Binary Searches are Broken! En 2006 comenzaron a reportarse acceso a un arreglo fuera de rango en el binarysearch implementado en las liberías de Java. En la implementación en Java, los enteros tienen precisión finita ([2 31..(2 31 1)]). Si low y high son valores muy grandes, al calcular mid se produce overflow. Por ejemplo: 1. Sean high=2 31 y low=1 2. Entonces mid=(low+high)/2= ! (negativo) 3. Al leer a[mid] esto produce un error en Java La falla estuvo dormida muchos años y se manifestó sólo cuando el tamaño de los arreglos creció a la par de la capacidad de memoria de las computadoras. Bugfix: Computar mid evitando el overflow: int mid = low + (high-low)/2; 19 20
6 Moraleja Búsqueda binaria retornando la menor posición El binarysearch implementado en Java estaba formalmente demostrado Pero la demostración suponía enteros de precisión infinita (en Java son de precisión finita) En AED1 no nos preocupan los problemas de aritmética de precisión finita (+Info: Orga1) En la vida real, hay que validar las hipótesis sobre las que se realizó la demostración valgan en la implementación (aritmética finita, existencia de acceso concurrente, multi-threading, etc.) problema buscarbinmp (a : [Int], x : Int, n : Int) = pos : Int requiere a == n > 1; requiere ( j [0..n 1)) a[j] a[j + 1]; requiere a[0] x a[n 1]; asegura ( x a (pos == cabeza([j j [0.. a ), a[j] == x]) ) ( x a (pos == 1) ) ; Búsqueda binaria retornando la menor posición Búsqueda binaria retornando la menor posición int buscarbinmp(int a[], int n, int x) { int low = 0, high = n - 1; while (low+1 < high) { int mid = low + (high -low) / 2; if (x <= a[m]) high=mid; else low=mid; if (x == a[low]) return low; else if (x == a[high]) return high; else return -1; P : a == n ( j [0..n 1)) a[j] a[j + 1] ( ) Q : ( x a pos == cabeza([j j ) [0.. a ), a[j] == x] x a pos == 1 Especificación del ciclo P c : low == 0 high == n 1 a[low] x a[high] I : (0 low < high < n) (a[low] x a[high]) (low > 0 a[low 1] x) Q c : (x a low == cabeza([j j [0.. a ), a[j] == x]) (x a high == cabeza([j j [0.. a ), a[j] == x]) (x a) v = high low 1, cota
7 Búsqueda ternaria Búsqueda ternaria Resuelve exactamente el mismo problema que la búsqueda binaria problema buscart (a : [Int], x : Int, n : Int) = res : Bool requiere a == n > 1; requiere ( j [0..n 1)) a[j] a[j + 1]; requiere a[0] x a[n 1]; asegura res == (x a); bool buscartern(int a[], int n, int x) { int low = 0, high = n - 1; while (low+2 < high) { int m1 = low + (high - low) / 3; int m2 = low + (high - low) * 2 / 3; if(x <= a[m1]) { high = m1; else if (x>=a[m2]) { low = m2; else { low = m1; high = m2; bool res = (a[low]==x) (a[high]==x) (a[low+(high-low)/2]==x); return res; Búsqueda ternaria La búsqueda binaria es óptima El invariante del ciclo es: // invariante I: (0 low < high < n) (a[low] x a[high]) // variante high low 2 cota 0. La complejidad del algoritmo de búsqueda ternaria es O(log 3 a ). Es el mismo orden de complejidad que la búsqueda binaria, ya que log 3 n = (log 2 n)/log 2 (3), y log 2 (3) es una constante (no depende de n). De mismo modo que extendimos la búsqueda binaria a ternaria s puede extender para cualquier número de segmentos. Así obtenemos la búsqueda n-aria. Cosideremos los algoritmos de búsqueda sobre arreglos ordenados, que operan evaluando condiciones booleanas exclusivamente. Teorema: cualquier algoritmo de búsqueda (inventado o por inventarse) sobre una secuencia ordenada de longitud n toma para el peor caso al menos log n pasos
8 La búsqueda binaria es óptima Demostración. La entrada es una secuencia a ordenada de n elementos, y un elemento x a ser buscado. Hay (n + 1) posibilidades para x: que sea menor al a[0] o que x esté entre a[i] y a[i + 1] para i = 0, 1.., n 2 o que x sea mayor al a[n 1]. Visualicemos todas las ejecuciones como un árbol de ejecuciones. Cada nodo es la evaluación de una expresión booleana, donde el árbol se ramifica en dos. Cada camino desde la raíz hasta una hoja es una ejecución del programa. La altura del árbol da el peor caso de cantidad de instrucciones ejecutadas por el programa. Para cada una de las (n + 1) posibilidades que tiene x respecto de la secuencia a, la ejecución bebe alcanzar una hoja diferente. El árbol debe tener al menos n + 1 hojas. Sabemos que un árbol binario con L hojas tiene altura al menos log 2 L. Por lo tanto nuestro árbol tiene altura mayor o igual que log 2 (n + 1). Concluímos que la búsqueda, en el peor caso, requiere al menos log 2 (n + 1) pasos. 29
Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande
Complejidad computacional Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 10 Introducción a la complejidad computacional y
Más detallesArreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas
Arreglos Algoritmos y Estructuras de Datos I Primer cuatrimestre 2007 Teórica de imperativo 3 Algoritmos de búsqueda secuencias de una cantidad fija de variables del mismo tipo se declaran con un nombre,,
Más detallesOrdenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Demostración. Cota inferior de complejidad tiempo para sorting
Ordenamiento de un arreglo Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 12 Algoritmos de ordenamiento, segunda parte Tenemos
Más detallesAlgoritmos de Búsqueda
Introducción a la Computación Algoritmos de Búsqueda Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 11/10/2017 E. Mocskos (UBA CONICET) Algoritmos de Búsqueda
Más detallesProgramación imperativa. Algoritmos y Estructuras de Datos I. Ciclos
Programación imperativa Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 6 Ciclos y arreglos Entidad fundamental:
Más detallesEspecificación de programas. Algoritmos y Estructuras de Datos I. Correctitud de ciclos
Especificación de programas Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Simulacro Coloquio Final - clase 1 Sean dos programas, cada uno recibe
Más detallesEsquema. Condicionales. Ejemplo de condicional. Demostración. P { if (B) uno else dos } Q. P { while (B) cuerpo } Q
Esquema Teórica Imperativo 2 Estructuras de control Instrucción de asignación P{v=e Q // estado 1; vale P: true v:=e; // vale Q: v == e@1 && para toda vi: vi == vi@1 Instrucciones de Control de Flujo P
Más detallesDemostrando cotas inferiores: Arboles de decisión
Demostrando cotas inferiores: Arboles de decisión De la misma forma que la técnica basada en la mejor estrategia del adversario, vamos a utilizar los árboles de decisión para establecer una cota inferior
Más detallesOrdenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Algoritmo downsort. Upsort vs downsort
Ordenamiento de un arreglo Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 8 Algoritmos de ordenamiento II Tenemos
Más detallesAlgoritmos en teoría de números
Algoritmos en teoría de números IIC2283 IIC2283 Algoritmos en teoría de números 1 / 92 Para recordar: aritmética modular Dados dos números a, b Z, si b > 0 entonces existen α, β Z tales que 0 β < b y a
Más detallesMultiplicación de matrices simétricas
Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =
Más detallesBúsqueda Binaria. Universidad de Buenos Aires. Universidad Nacional del Comahue. Training Camp 2017
Búsqueda Binaria Leopoldo Taravilse 1 Juan Cruz Piñero 2 1 Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 2 Facultad de Informática Universidad Nacional del Comahue Training Camp
Más detallesAnálisis de Algoritmos
Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36 Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación?
Más detallesAnálisis de Algoritmos
Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36 Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación?
Más detallesAnálisis de algoritmos
Tema 05: no recursivos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido no recursivos La notación de Landau O La notación O Principio
Más detallesIntroducción al Análisis del Coste de Algoritmos
1/11 Introducción al Análisis del Coste de Algoritmos Josefina Sierra Santibáñez 7 de noviembre de 2017 2/11 Eficiencia de un Algoritmo Analizar un algoritmo significa, en el contexto de este curso, predecir
Más detallesNotación Asintótica 2
Notación Asintótica 2 mat-151 1 Éxamen Rápido (6 minutos) Cada operación fundamental usa c milisegundos, cuánto tiempo toma contar hasta 1,000,000? Cuál es el valor de N? Cuál es el órden de complejidad
Más detallesVerificación de programas. Algoritmos y Estructuras de Datos I. Semánticas formales: Primer cuatrimestre de 2016
Verificación de programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2016 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 14 Verificación automática de programas
Más detallesEstructuras de Datos y Algoritmos
Ejercicio 1: Estructuras de Datos y Algoritmos Año 2018 Práctico 2: Evaluación de Algoritmos (Finalización: 27/08) Ingeniería en Computación - Ingeniería en Informática - Profesorado en Computación Dados
Más detallesOrdenamiento (Sorting)
Ordenamiento (Sorting) El problema del ordenamiento Ordenar: arreglo[α] arreglo[α], donde α es un tipo tal que está definida la relación < α Uno de los problemas más clásicos, útiles y estudiados de la
Más detallesAnálisis y Diseño de Algoritmos. Complejidad Computacional
Análisis y Diseño de Algoritmos Complejidad Computacional Multiplicación Método Tradicional Método Russé Método Particiones Complejidad Computacional Tan pronto como una máquina análitica exista, será
Más detallesAlgoritmo de Euclides
Algoritmo de Euclides Melanie Sclar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires AED III Melanie Sclar (UBA) Algoritmo de Euclides AED III 1 / 21 Ejercicio 2.8 de la práctica Ejercicio
Más detallesEstructuras de Datos y Algoritmos
Estructuras de Datos y Algoritmos Práctico 2: Evaluación de Algoritmos (Finalización: 03/09) Ingeniería en Computación - Ingeniería en Informática Año 2015 Ejercicio 1: Dados los siguientes vectores, correspondientes
Más detallesComplejidad de los Algoritmos
Que es un Algoritmo? Complejidad de los Algoritmos Webster: cualquier método especial para resolver cierta clase de problemas. Horowitz: método preciso utilizable en una computadora para la solución de
Más detallesProgramación Análisis de Algoritmos: Tiempo de Ejecución (Introducción)
Programación 2 5 - Análisis de Algoritmos: Tiempo de Ejecución (Introducción) 1 Análisis de Algoritmos: Introducción Qué algoritmos elegir para resolver un problema? Que sean fáciles de entender, codificar
Más detallesAlgoritmos para determinar Caminos Mínimos en Grafos
Problemas de camino mínimo Algoritmos para determinar Caminos Mínimos en Grafos Algoritmos y Estructuras de Datos III DC, FCEN, UBA, C 202 Problemas de camino mínimo Dado un grafo orientado G = (V, E)
Más detallesELO320 Estructuras de Datos y Algoritmos. Complejidad. Tomás Arredondo Vidal
ELO320 Estructuras de Datos y Algoritmos Complejidad Tomás Arredondo Vidal Este material está basado en: Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, 2001 Thomas Cormen et al,
Más detallesTema 01: Fundamentos del Análisis Asintótico de Algoritmos
Tema 01: Fundamentos del Análisis Asintótico de Algoritmos Noviembre, 2003 CS0218: Algoritmos y Programación II Introducción En Ciencias de la Computación se presenta con frecuencia la situación de analizar
Más detallesAlgoritmos Iterativos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos 1. Algorimos de ordenación Discutiremos el problema de ordenar un array de elementos. A los efectos de simplificar
Más detallesIntroducción a la Computación
Introducción a la Computación Primer Cuatrimestre de 2012 Corrección de Algoritmos 1 Especificación, algoritmo y programa Especificación de un problema: Qué problema tenemos? Lenguaje formal (ej. lógica
Más detallesUn tercer ejemplo: verificación de primalidad
Un tercer ejemplo: verificación de primalidad Vamos a ver un algoritmo aleatorizado para verificar si un número es primo. I Este algoritmo es más eficiente que los algoritmos sin componentes aleatorias
Más detallesCarlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Complejidad / 1
Complejidad Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid cdk@it.uc3m.es Java: Complejidad / 1 Comparación long fib (int n) {if (n
Más detalles1/16. Coste de Algoritmos. 8 de abril de 2018
1/16 Coste de Algoritmos Josefina Sierra Santibáñez 8 de abril de 2018 2/16 Coste de un Algoritmo Analizar un algoritmo significa, en el contexto de este curso, estimar los recursos que requiere. Aunque
Más detallesdit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas
Análisis y diseño de software dit UPM Tema 1: Algoritmos /complejidad /java José A. Mañas http://jungla.dit.upm.es/~pepe/doc/adsw/index.html 21.2.2018 referencias http://www.dit.upm.es/~pepe/doc/adsw/
Más detallesAlgoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos
Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de
Más detallesNOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.
NOTACIÓN O GRANDE El análisis de algoritmos estima el consumo de recursos de un algoritmo. Esto nos permite comparar los costos relativos de dos o más algoritmos para resolver el mismo problema. El análisis
Más detallesLenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados
Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras
Más detallesComplejidad computacional y asintótica
Complejidad computacional y asintótica Complejidad computacional Indica el esfuerzo que hay que realizar para aplicar un algoritmo y lo costoso que éste resulta. La eficiencia suele medirse en términos
Más detallesIntroducción a la computación. Carlos Lopez Pombo
Introducción a la computación Carlos Lopez Pombo Estado Se denomina estado en un modelo de cómputo a un punto en la ejecución de un programa en dicho modelo. En el modelo de Von Neumann esto responde al
Más detallesPasaje de argumentos en lenguajes de programación. Algoritmos y Estructuras de Datos I
Pasaje de argumentos en lenguajes de programación Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 5 Pasaje de
Más detallesProgramación 2. Lección 8. Caracterización asintótica de la eficiencia de un algoritmo
Programación 2 Lección 8. Caracterización asintótica de la eficiencia de un algoritmo 1 1. Funciones de coste de un algoritmo 2. Caracterización asintótica del coste Notación O Consecuencias prácticas
Más detallesIntroducción al análisis de algoritmos
Estructura de Datos y Algoritmos Introducción al análisis de algoritmos 1. Eficiencia en tiempo de Ejecución Cuando resolvemos un problema nos vemos frecuentemente enfrentando una elección de programas,
Más detallesProgramación II Arboles Binarios(AB)
Programación II Arboles Binarios(AB) Definición Un árbol consta de un conjunto finito de elementos, denominados nodos, y un conjunto finito de líneas dirigidas, denominadas enlaces, que conectan los nodos.
Más detallesAnálisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos Notación Asintótica DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción Por qué el análisis de algoritmos? Determinar tiempos de respuesta (runtime)
Más detallesAlgoritmos y Complejidad
Algoritmos y Complejidad Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre 2017 Introducción Algoritmos y Algoritmia Problemas
Más detallesTema 10: Árbol binario de búsqueda
Tema 10: Árbol binario de búsqueda M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Árbol binario de
Más detallesAnálisis de algoritmos
Tema 03: Análisis temporal M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Caso de entrada Ejemplo 1 (Búsqueda lineal) Operación
Más detallesIntroducción a la computación. Charlie
Introducción a la computación Charlie Estado Se denomina estado en un modelo de cómputo a un punto en la ejecución de un programa en dicho modelo. En el modelo de Von Neumann esto responde al valor de
Más detallesDiseño y Análisis de Algoritmos
1. Recursividad 2. "Dividir para Reinar" 3. Recursividad y Tabulación (Programación Dinámica) 4. Métodos Matemáticos Funciones discretas Notación O Ecuaciones de recurrencia 5. Casos de Estudio Breve descripción
Más detallesÁrboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)
Práctico 4 Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap) Clasificación de ejercicios: (I) Imprescindibles (R) Recomendados (C) Complementarios Árboles balanceados (AVL)
Más detallesAlgoritmos Geométricos. Héctor Navarro. UCV
Algoritmos Geométricos Héctor Navarro. UCV Estructuras de Datos Puntos struct Punto2D{ float x, y; }; struct Punto3D{ float x,y,z; }; Estructuras de Datos Polígonos Punto2D Poly[N]; Rectas struct Recta{
Más detallesProgramación II. Mario Aldea Rivas Programación II 04/04/11 1. Mario Aldea Rivas Programación II 04/04/11 2
Programación II Bloque temático 1. Lenguajes de programación Bloque temático 2. Metodología de programación Bloque temático 3. Esquemas algorítmicos Tema 5. Algoritmos voraces, heurísticos y aproximados
Más detallesIntroducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani
Introducción Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Algoritmos y Algoritmia Problemas e instancias Primer Cuatrimestre 2014 Algoritmos
Más detallesAlgoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos
Algoritmos y structuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. omplejidad de los
Más detallesSemana 14 [1/19] Polinomios. 8 de junio de Polinomios
Semana 14 [1/19] 8 de junio de 2007 División Semana 14 [2/19] Teorema de la División Al ser (K[x], +, ) un anillo, ocurre un fenómeno similar al de : Las divisiones deben considerar un posible resto. Teorema
Más detallesDepartamento de Informática Primer semestre de 2009 Ejercicios resueltos de temas del Certamen n o 3
Universidad Técnica Federico Santa María Fundamentos de Informática I Departamento de Informática Primer semestre de 2009 Ejercicios resueltos de temas del Certamen n o 3 1 Combinatoria 1. Se lanzan cuatro
Más detallesEDA. Tema 8 Colas de Prioridad: Heaps
EDA. Tema 8 Colas de Prioridad: Heaps Natividad Prieto Sáez. DSIC EDA, T-8. Curso 02/03. N.Prieto p.1/55 Objetivos Estudio de las definiciones asociadas a las Colas de Prioridad: Especificación: operaciones
Más detallesEstructura de Datos. Complejidad de Algoritmos. Algoritmo. Algoritmo. Mauricio Solar Lorna Figueroa
Estructura de Datos Complejidad de Algoritmos Mauricio Solar Lorna Figueroa 2010 1 Algoritmo Definición: Un algoritmo es un conjunto finito de instrucciones que sirven para resolver un problema si fueron
Más detallesNotación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos
Notación Asintótica Análisis de Algoritmos Temas Introducción Notación O Notación Omega Notación Theta 1 Introducción Por qué el análisis de algoritmos? Determinar tiempos de respuesta (runtime) Determinar
Más detallesTipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Más detallesRecurrencias y cómo resolverlas
Recurrencias y cómo resolverlas Algoritmos y Estructuras de Datos II Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 8 de septiembre de 2017 Algo2 (DC-FCEyN-UBA)
Más detallesProgramación Lógica. Programación Lógica
Programación Lógica Programación imperativa programa es secuencia de instrucciones que una computadora ejecuta para resolver un problema Programación Lógica programa especifica conocimiento (declarativa)
Más detallesSolución de Problemas Mediante Búsqueda (2) Carlos Hurtado Depto de Ciencias de la Computación, Universidad de Chile
Solución de Problemas Mediante Búsqueda (2) Carlos Hurtado Depto de Ciencias de la Computación, Universidad de Chile Manhattan Bike Curier (Acíclico) Ref. Curso IA U. of Toronto Algoritmo Genérico de Búsqueda
Más detallesTema 3. Análisis de costes
Tema 3. Análisis de costes http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información
Más detallesProgramación 2. Lección 11. Análisis de la corrección de un algoritmo: primera parte
Programación 2 Lección 11. Análisis de la corrección de un algoritmo: primera parte 1 1. Precondición más débil y corrección de un algoritmo. Ejemplos 2. Análisis de la corrección de una secuencia de instrucciones.
Más detallesIN34A - Optimización
IN34A - Optimización Complejidad Leonardo López H. lelopez@ing.uchile.cl Primavera 2008 1 / 33 Contenidos Problemas y Procedimientos de solución Problemas de optimización v/s problemas de decisión Métodos,
Más detallesProgramación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario
Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Objetivos Trabajar con los tipos abstractos de datos Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Desarrollar y analizar
Más detallesOrdenamiento en Tiempo Lineal - Medianas y Ordenes sticas
Ordenamiento en Tiempo Lineal - Medianas y Ordenes Estadísticas sticas CLASIFICACIÓN EN TIEMPO LINEAL. 1.- Cota Inferior para Ordenamiento por comparaciones. -árbol de decisión. - limite inferior para
Más detallesComplejidad Computacional
Complejidad Computacional MLG521 Cristobal Rojas Pamela Alvarez Departamento de Ciencias de de la Ingeniería Departamento de Ingeniería Matemática Universidad Andrés Bello MLG521 Cómo medir la dificultad
Más detallesTema 5- Diseño Recursivo y Eficiente. Tema 5- Diseño Recursivo y. Descomposición recursiva ascendente de un vector. Etapas del diseño recursivo
Tema 5- Diseño Recursivo y Eficiente Tema 5- Diseño Recursivo y Eficiente Germán Moltó Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Índice general: 1. Introducción
Más detallesTema: Métodos de Ordenamiento. Parte 3.
Programación IV. Guía 4 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Métodos de Ordenamiento. Parte 3. Objetivos Específicos Identificar la estructura de algunos algoritmos
Más detallesEspecificación Clase 2
Especificación Clase 2 Lenguaje de especificación Departamento de Computación, FCEyN, Universidad de Buenos Aires. 27 de marzo del 2015 Menú del día Especificación Repaso del lenguaje de especificación
Más detallesMuchas 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.
El Teorema Maestro 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 c)+f (n) n 1 donde a, b y c son constantes, y f (n) es una
Más detallesGeometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012
Geometría Leopoldo Taravilse Francisco Roslán Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse, Francisco Roslán (UBA) Geometría TC 2012 1 / 30
Más detallesEjercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.
Ejercicios Resueltos del Práctico 4 Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. 1 2 struct NodoLista { 3 int elem ; 4 NodoLista * sig ;
Más detallesProgramación. Curso 2005/2006. Tema 3: Complejidad computacional
Programación Facultad de Informática Universidad Politécnica de Valencia Curso 2005/2006 Tema 3: FI UPV: 29 de noviembre de 2005 Índice 1 Introducción 2 2 Consumo de recursos: costes espaciales y temporales
Más detallesGrafos. Leopoldo Taravilse. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012
Grafos Leopoldo Taravilse Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse (UBA) Grafos TC 2012 1 / 78 Contenidos 1 Definiciones básicas Algoritmos
Más detallesProgramación II Árboles binarios de búsqueda (ABB)
Programación II Árboles binarios de búsqueda (ABB) Definición Un árbol binario de búsqueda(abb) a es una estructura de datos de tipo árbol binario en el que para todos sus nodos, el hijo izquierdo, si
Más detallesDecrementa y vencerás II
Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 1 / 22 1 Decrementa y vencerás II Dr. Eduardo
Más detallesSolución - práctico 10
Solución - práctico 10 Complejidad Ejercicio 1 a) Una implementación del algoritmo es la siguiente: /* Procedimiento que se encarga de realizar la unión de los dos conjuntos * ordenados der1 e izq1 son
Más detallesAnálisis de algoritmos
Tema 02: Complejidad de los algoritmos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Algoritmo Algoritmo vs. Proceso Computacional
Más detalles1. Recuerdo del algoritmo de KRUSKAL
MA3705. Algoritmos Combinatoriales. 014. Profesor: José Soto Escriba(s): Manuel Cáceres, Camilo Gómez y Sebastián Muñoz. Fecha: 11 de Agosto 014. Cátedra 5 1. Recuerdo del algoritmo de KRUSKAL La clase
Más detallesPROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA
PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA UNIDAD DE APRENDIZAJE ADMINISTRACION DE BASES DE DATOS Unidad de competencia III Manejar las estructuras dinámicas en memoria secundaria Arboles ELABORACION
Más detallesPruebas de Validez (Correctness) de Algorithmos.
Pruebas de Validez (Correctness) de Algorithmos. Jonatan Gómez 11th September 2004 1 Introducción Uno de los aspectos mas importantes en el desarrollo de programas para computador es determinar cuando
Más detallesTema 06: Recursividad
Tema 06: Recursividad M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Recursión Recursividad Programación
Más detalles2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).
Capítulo 7 Heap 7.1 Introducción Una cola de prioridad es una estructura de datos apropiada cuando la tarea más importante es localizar y/o eliminar el elemento con valor menor de una colección. Ejemplo
Más detallesESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:
Nombre y apellidos: Nota: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración:
Más detallesTipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S
Tipos de datos en S Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Computabilidad - clase 5 Codificación de programas, Halting problem, diagonalización, tesis de Church,
Más detallesAlgoritmos y problemas
Análisis de Algoritmos Algoritmos y problemas Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Algoritmos y problemas p. 1 Problema = un conjunto (posiblemente infinita) de instancias
Más detallesÁrboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda
Árboles Árboles Mario Medina C. mariomedina@udec.cl Árboles Estructura recursiva Árbol vacío 0 o más árboles hijos Altura ilimitada Árbol binario A lo más dos hijos: izquierdo y derecho Árboles Árboles
Más detallesIntroducción y Comportamiento Asintótico
Introducción y Comportamiento Asintótico M. Andrea Rodríguez-Tastets Ayudante: Erick Elejalde Universidad de Concepción,Chile www.inf.udec.cl\ andrea andrea@udec.cl I Semestre - 2014 1/64 Problemas and
Más detallesComplejidad computacional (Análisis de Algoritmos)
Definición. Complejidad computacional (Análisis de Algoritmos) Es la rama de las ciencias de la computación que estudia, de manera teórica, la optimización de los recursos requeridos durante la ejecución
Más detallesSucesiones. Una sucesión de números reales es una tira, o una lista, de nḿeros reales que generalmente denotamos como
Universidad de la República Facultad de Ingeniería IMERL Sucesiones Curso Cálculo 1 2008 Una sucesión de números reales es una tira, o una lista, de nḿeros reales que generalmente denotamos como a 1, a
Más detallesAlgoritmos y Estructuras de Datos III
Árboles Algoritmos y Estructuras de Datos III Árboles Definición: Un árbol es un grafo conexo sin circuitos simples. Árboles Teorema: Dado un grafo G = (V, X ) son equivalentes: 1. G es un árbol. 2. G
Más detallesProblemas fáciles, difíciles e imposibles
Problemas fáciles, difíciles e imposibles La computadora lo resuelve todo? Santiago Figueira Departamento de Computación FCEyN, UBA Semana de la Computación 2015 1 Qué son los métodos efectivos? Intuitivamente
Más detallesConceptos básicos de paralelismo
Capítulo 2 Conceptos básicos de paralelismo 2.1. Introducción En este capítulo introduciremos algunos conceptos del paralelismo que se requeriran en la posterior discusión. Particularmente relevantes para
Más detallesEstructuras de datos y algoritmos
Estructuras de datos y algoritmos 1. Introducción 2. Estructuras de datos lineales 3. Estructuras de datos jerárquicas 4. Grafos y caminos 5. Implementación de listas, colas, y pilas 6. Implementación
Más detallesAlgoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Más detallesMáquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45
Máquinas de Turing IIC3242 IIC3242 Máquinas de Turing 1 / 45 Complejidad Computacional Objetivo: Medir la complejidad computacional de un problema. Vale decir: Medir la cantidad de recursos computacionales
Más detallesAlgoritmos y Complejidad
IN47B, Ingeniería de Operaciones Contenidos 1 Introducción 2 Analizando Algoritmos 3 Complejidad 4 N P-completitud Qué es un Algoritmo? Qué es un Algoritmo? Definición Un algoritmo es un conjunto de pasos
Más detalles