TEMA 9: Tecnología de la programación. Tipos abstractos de datos. Algoritmos de búsqueda y ordenación, recursividad, complejidad.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "TEMA 9: Tecnología de la programación. Tipos abstractos de datos. Algoritmos de búsqueda y ordenación, recursividad, complejidad."

Transcripción

1 TEMA 9: Tecnología de la programación. Tipos abstractos de datos. Algoritmos de búsqueda y ordenación, recursividad, complejidad. Índice Introducción...1 Materias tratadas por la tecnología de la programación...2 Diseño y análisis de algoritmos...2 Tipos de datos y estructuras de datos...2 Tipos abstractos de datos (TAD)...3 Algoritmos de búsqueda y ordenación...4 Algoritmos de búsqueda...4 Búsqueda interna...4 Búsqueda secuencial...4 Búsqueda binaria...4 Búsqueda hash...5 Búsqueda externa... 5 Algoritmos de ordenación...6 Mezcla directa (MergeSort)...6 Heapsort...6 Ordenación rápida. Quicksort...7 Algoritmos recursivos...8 Profundidad de recursión...8 Diseño de algoritmos recursivos...8 Ventajas e inconvenientes...9 Transformación de algoritmos recursivos a iterativos...9 Complejidad...11 Notación O grande...11 Introducción Como indica su nombre, la tecnología de la programación es la disciplina que estudia la tarea de hacer programas desde el punto de vista de los algoritmos. El esfuerzo de la tecnología de la programación se centra en tres áreas: Desarrollar técnicas de diseño de algoritmos. Que sirvan de base para desarrollar algoritmos eficaces y eficientes. Es decir, que resuelvan de forma correcta el problema (eficacia) y minimizen el consumo de recursos del ordenador (eficiencia). El estudio de las estructuras de datos que manejan los programas. Con objeto de crear las estructuras que faciliten el diseño de los algoritmos. Medir y comparar la eficiencia de los algoritmos. Se estudian técnicas que permiten evaluar la eficiencia de un algoritmo de forma independiente del ordenador que lo ejecute. Ejemplo: El cálculo de la complejidad. Página 1 de 13

2 Materias tratadas por la tecnología de la programación Al estudiar tecnología de la programación suelen verse las siguientes materias: Diseño y análisis de algoritmos Se puede definir algoritmo como una secuencia finita de instrucciones, cada una de las cuales tiene un significado preciso y puede ejecutarse con una cantidad finita de recursos en un tiempo finito. Las instrucciones de control y de llamada de función son las más relevantes a la hora de estudiar el diseño de un algoritmo. La tecnología de la programación ofrece un conjunto de técnicas para el desarrollo de algoritmos que resuelvan de los problemas típicos en la programación. Como por ejemplo, los algoritmos de ordenación, de marcha atrás, los voraces... Tipos de datos y estructuras de datos Los lenguajes de programación de alto nivel, permiten definir la estructura de los datos que manejan los programas. Ya que en muchos casos, los tipos de datos predefinidos en el lenguaje, como los tipos entero, real, carácter... no son adecuados para manejar los datos. Las abstracciones de datos utilizadas en programación son: Tipos de datos: Los ordenadores al nivel de lenguaje máquina, sólo manejan datos de tipo lógico o números enteros o reales. Los lenguajes de alto nivel proporcionan otros tipos de datos como pueden ser los caracteres o los string. Tipos abstractos de datos (TAD): Utilizados en la programación estructurada. Un TAD es un modelo matemático compuesto por un conjunto de datos y una colección de operaciones definidas sobre los datos. Cada vez que deseemos emplear el TAD sólo lo podemos usar las operaciones definidas. Objetos: Utilizado en la P.O.O. En el ámbito del diseño de algoritmos, los objetos son similares a los TADs, aunque más potentes. Como los TADs, establecen un conjunto de valores y unas operaciones sobre ellos, y, además, poseen propiedades como la herencia, el polimorfismo, el paso de mensajes... Existen una serie de estructuras de datos muy frecuentes como son las listas, las colas, las tablas, los árboles y los grafos, que su implementación y algoritmia asociada están muy estudiadas. Página 2 de 13

3 Tipos abstractos de datos (TAD) Como he indicado anteriormente, un TAD es un modelo matemático compuesto por un conjunto de datos y una colección de operaciones definidas sobre los datos. Un TDA representa una abstracción en la cual: Se destacan los detalles de la especificación (el qué). Esta parte se compone de la declaración de las funciones que implementan las operaciones del TAD. Se ocultan los detalles de la implementación (el cómo) de estas funciones y de la estructura de datos. Para usar un TDA no se necesita conocer como actúan sus operadores ni los detalles de la representación interna de los datos, que además, suele ser una implementación bastante dependiente de la máquina sobre la que se trabaje. La ocultación de los detalles de implementación se realiza por dos motivos: 1. Ocultar detalles poco relevantes que hacen más difícil el uso del TAD 2. Protección de los programas que usen el TAD de posibles cambios en la implementación del TAD Los datos almacenados es un TAD se organizan en una determinada estructura de datos. La estructura de datos depende de la naturaleza de los datos y del uso que se haga con ellos. Como estructuras de datos podemos encontrar: Listas, Pilas, Árboles, Grafos... La selección de la estructura de datos abstracta se realiza teniendo en cuenta las operaciones que permite realizar sobre los datos. Estas estructuras de datos definen la organización de los datos de forma abstracta. Cada estructura luego de forma interna puede ser implementada de formas diferentes. La selección de la implementación estructura de datos concreta se realiza teniendo en cuenta la eficiencia de la implementación de los algoritmos (complejidad computacional), el tamaño de los datos, su ubicación... Ejemplo: Una librería puede proveernos de un TAD pila, cuya interfaz sería: - Pila nuevapila() - Pila empila(pila, elemento) - Elemento desempila (pila) - Entero numelementos(pila) - VaciarPila(pila) El usuario de este TAD Pila sólo necesita conocer su interfaz para usarlo, la implementación no le interesa y está oculta. Página 3 de 13

4 Algoritmos de búsqueda y ordenación La búsqueda de un valor determinado dentro de un conjunto de valores o la ordenación de este conjunto de valores son problemas típicos de la programación. Además, cuando se trabaja con un conjunto de valores numeroso, el consumo de recursos - tiempo de cpu y/o memoria- es elevado. Es por ello, que se han realizados estudios para conseguir técnicas de programación para el desarrollo de algoritmos eficaces y eficientes que resuelvan estos problemas. Algoritmos de búsqueda El tipo de búsqueda se puede clasificar como interna o externa, según el lugar en el que esté almacenada la información (en memoria o en dispositivos externos). Los algoritmos de búsqueda tienen dos finalidades: - Determinar si el elemento buscado se encuentra en el conjunto en el que se busca. - Si el elemento está en el conjunto, hallar la posición en la que se encuentra. Búsqueda interna Se da en los casos en que el conjunto de datos a tratar está almacenado en memoria principal. Para explicar los diferentes tipos de algoritmos, los valores serán números enteros almacenados en un array. Búsqueda secuencial Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el o los elementos buscados, o hasta que se han mirado todos los elementos del array. for(i=j=0;i<n;i++) if(array[i]==elemento) { solucion[j]=i; j++; El número de comparaciones realizadas es N (el número de elementos del array). Mejoras en el algoritmo 1. Si se busca la primera ocurrencia del elemento buscado, el algoritmo puede ser mejorado saliendo del bucle al encontrar la ocurrencia. 2. Para evitar tener que controlar los límites del array se puede utilizar la técnica del centinela, se coloca al final del array el elemento buscado, así seguro que siempre aparece. En el caso de que los elementos del array estén ordenados, el algoritmo se puede optimizar modificando el predicado de control del bucle a for (i=j=0; array[i]<=elemento; i++). En este caso, el número medio de comparaciones necesarias para encontrar el elemento buscado es (N-1)/2. Búsqueda binaria La búsqueda binaria se aplica en el caso de arrays ordenados. Consiste en aplicar la técnica del Divide y venceras. Se realiza las siguientes acciones: 1. Dado el array ordenado, se toma el elemento central y se divide el array en dos. 2. Si el elemento central es el valor buscado, el algoritmo termina. 3. Si no, se compara el valor central con el elemento buscado. Si es mayor, se selecciona el arrays con valores inferiores al valor central, al contrario sino. 4. Si el array seleccionado no tiene elementos, es que no existe el elemento buscado en el array, 5. Si no, entonces se vuelve a aplicar el algoritmo a la porción de array seleccionada. Página 4 de 13

5 En general, este método realiza log 2(N+1) comparaciones antes de encontrar el elemento, o antes de descubrir que no está. Este número es muy inferior que el necesario para la búsqueda lineal para casos grandes. Función BusquedaBinaria (tabla: Array; CotaSup, CotaInf, elembusc: enteros) devuelve posición Inicio Si( CotaSup<CotaInf) Devolver 1; // Indica que no ha encontrado el elemento. Medio = (CotaSup + CotaInf) div 2; Si ( tabla[medio] > elembusc) Devolver (BusquedaBinaria(tabla, Medio+1, CotaSup, elembusc)); Si ( tabla[medio] < elembusc) Devolver (BusquedaBinaria(tabla, CotaInf, Medio-1, elembusc)); Sino Devolver Medio; Fin Búsqueda hash Consiste en asignar a cada elemento un índice mediante una transformación del elemento. Esta correspondencia se realiza mediante una función de conversión, llamada función hash. En el caso de los elementos dentro del array, la función hash obtendría la posición del elemento utilizando su valor. Como funciones hash encontramos el uso de aritmética modular ( indice = elemento mod X), el truncamiento del valor, restas sucesivas... Lo ideal para una función hash es que sea biyectiva. Es decir, que a cada elemento le toque un índice y a cada índice un solo elemento. De esta forma la búsqueda sólo necesitaría calcular el índice. Generalmente, encontrar un función hash biyectiva es muy difícil o imposible. Normalmente las funciones hash tienen colisiones, la función hash asigna el mismo índice a distintos elementos. Es por ello que hay que crear estructuras para almacenar varios valores en un solo índice. La estructura de datos más eficiente es utilizar un array de punteros a listas. La función hash indica la posición del array donde se almacena el puntero a la lista que le corresponde la puntero. Una función hash es más o menos óptima según el grado de colisiones que provoca. Cuantas menos colisiones más eficiente. Búsqueda externa La búsqueda externa se da cuando el volumen de la información a tratar impide su almacenamiento de forma completa en memoria principal y se tiene que trabajar a nivel de ficheros almacenados en dispositivos como cintas, disco duros... Las técnicas de búsqueda externa hay que tener en cuenta el alto coste de tiempo de cada acceso a ficheros. Los algoritmos se modifican para trabajar con bloques, la unidad de entrada y salida de los dispositivos de memoria secundaria. Cada bloque almacena varios registros con datos. En la búsqueda externa se utilizan técnicas como el uso de índices. Los registros poseen un campo índice que los identifica. Los índices se almacenan es estructuras de datos de búsqueda rápida, como por ejemplo árboles B, con punteros al bloque que almacena el registro. Se almacenan por separado el fichero de índices y el fichero de datos. El fichero de índices es de pequeño tamaño y permite su almacenamiento en memoria principal. Cuando se ha encontrado el índice del registro buscado, se utiliza el puntero para traer el bloque o bloques donde se almacena. Página 5 de 13

6 Algoritmos de ordenación La ordenación es una tarea fundamental y relevante en el proceso de datos. Es por ello que se han diseñado varias técnicas avanzadas para la ordenación de datos. Los algoritmos directos de ordenación son: - Selección: Se basa en seleccionar buscar el elemento más pequeño del array e intercambiarlo con el elemento de la primera posición. Esta acción se va realizando cada vez con la parte del array desordenada hasta que este completamente ordenado. - Burbuja: Consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que estén todos ordenados. - Inserción directa: En este método lo que se hace es tener una sub-lista ordenada de elementos del array e ir insertando el resto en el lugar adecuado para que la sub-lista no pierda el orden. La sublista ordenada se va haciendo cada vez mayor, de modo que al final la lista entera queda ordenada. Los algoritmos directos son fáciles de entender e implementar pero tienen el inconveniente de tener una complejidad O(n 2 ). Existen técnicas avanzadas de ordenación con complejidades del orden O(n*logn). Los algoritmos de ordenación avanzadas utilizan la técnica de divide y vencerás y backtracking. Los dos primeros, algoritmos de MergeSort y HeapSort, son utilizados en ordenaciones internas. El último, QuickSort se utiliza para ordenaciones externas. Mezcla directa (MergeSort) Se basa en combinar dos secuencias ordenadas en una sola secuencia ordenada. El método es el siguiente: 1. Se divide el array desordenado en dos mitades B y C. 2. Cada subarray se continúa dividiendo hasta tener arrays de un solo elemento (que por definición está ordenado). 3. Los subarrays ordenados B y C se combinan en solo array ordenado A aprovechando las ventajas de que los subarrays ya esté ordenado. Procedimiento MergeSort (tabla, LimSup, LimInf) { Si (LimSup>LimInf){ Media = (LimSup+LimInf)div 2; MergeSort( tabla, LimSup,Media+1); MergeSort (tabla, Media, LimInf); MezclarOrdenados( tabla; LimSup,Media,LimInf); // Compara uno a uno cada elemento de los arrayes y los guarda en un array aparte. Tiene el inconveniente de utilizar un array extra a la hora de combinar los arrays ordenados en uno solo. Es poco eficiente. Orden de complejidad O(n*logn). Heapsort El algoritmo de ordenación HeapSort tiene las siguientes características: 1. No necesita memoria extra, ordena dentro del mismo array donde están los datos. 2. Utiliza para ello una estructura de montículo ( heap ) binario dentro del array. Un heap binario puede ser visto como un arbol binario, donde se aprovecha la propiedad que el elemento padre siempre es mayor que sus hijos. El algoritmo se basa en dar estructura de heap al array, por ejemplo A[1..N]. De forma que en el elemento raíz (la posición 1) queda siempre el elemento mayor. El elemento raíz se intercambia con el último elemento del array A[n] y se vuelve a dar estructura de heap al array A[1..N-1]. Así sucesivamente hasta tener un array de un elemento. Al final el array queda ordenado de menor a mayor. Página 6 de 13

7 El algoritmo queda de la siguiente forma: Procedimiento HeapSort(A) { Construir_heap(A) Desde i = longitud(a) hasta 2 hacer{ Intercambiar(A[1],A[i]); Longitud_heap(A) = longitud_heap(a) 1; Restaurar_heap(A) // Vuelve a dar estructura de Heap al array A[1, i] Ordenación rápida. Quicksort El algoritmo de ordenación quicksort tiene un orden de complejidad en el peor de los casos, cuando el array ya está ordenado, de O(n 2 ). Aunque su tiempo medio de ejecución es de O(n*logn). Sus características son: 1. Las constantes asociadas al orden de complejidad son reducidas. Con arrayes de menos de 512 elementos es mucho más rápido que todos los demás. De hay viene su denominación. 2. No necesita espacio extra para ordenar. 3. Se comporta muy bien en entornos de memoria virtual. 4. Utiliza la técnica de divide y vencerás. Es utilizado para realizar ordenaciones externas. Se basa en dividir el array en dos particiones, de forma que todos los elementos de la primera partición sean más pequeños o iguales que cualquier elemento de la segunda partición. La función de partición reordena el array. Cada partición se reordena de forma recursiva por sucesivas llamadas al mismo procedimiento. Al final del proceso el array está ordenado. Procedimiento QuickSort(A: array, limsup, limpinf) { Si (LimSup > LimInf) entonces { q = Partición(A, limsup, limpinf); // El tiempo de ejecución de la partición depende de la organización del array. QuickSort(A, q, limpinf); QuickSort(A, limsup, q+1); Página 7 de 13

8 Algoritmos recursivos Hablamos de algoritmos recursivos, cuando definimos un algoritmo en función de si mismo. Para ello, se utilizan las instrucciones de llamada a funciones. La recursividad en programación es una herramienta sencilla, muy útil y potente. Ejemplo: - El factorial de un entero positivo suele definirse: 0! = 1 n! = n*(n-1)! si n>0 Ejemplo: el siguiente algoritmo implementa la función factorial definida anteriormente: FUNCTION factorial(n:integer): integer; IF n=0 THEN factorial:=1; ELSE factorial := n * factorial(n-1) Podemos distinguir dos tipos de recursividad: - Directa ( también llamada final): Cuando un algoritmo se llama a si mismo una o más veces de forma explicita. - Indirecta( también llamada no final): Cuando un algoritmo hace una llamada a otro algoritmo, el cual contiene una llamada directa o indirecta al primero. Los algoritmos recursivos directos son más eficientes que los indirectos pues necesitan menos memoria y provocan menos llamadas a funciones. Existe la técnica del plegado / desplegado que transforma los algoritmos directos en indirecto. Profundidad de recursión Cuando un procedimiento recursivo se invoca por primera vez su profundidad de recursión es 1 y el procedimiento se ejecuta a nivel 1. Si la profundidad de un procedimiento es N y se llama a sí mismo, entonces asciende el nivel de recursión y pasa al nivel N+1. Cuando el procedimiento regresa a la instrucción de donde fue llamado desciende un nivel de recursión. Diseño de algoritmos recursivos El uso de la recursividad se lleva a cabo cuando: - Aparezcan estructuras de datos definidas recursivamente. Ejemplo: Una pila. - Cuando no haya una solución iterativa clara y simple. - Cuando el algoritmo sea claramente recursivo. El diseño del algoritmo consta de 4 pasos: 1) La especificación formal: Se realiza igual que el resto de algoritmos. Se utiliza la técnica de definir la precondición y la postcondición. 2) El análisis por casos: Se trata de estudiar cómo se pueden descomponer recursivamente los datos del problema. De forma que la solución buscada se calcule a partir del mismo problema pero con datos más pequeños. El resultado del análisis nos dará una serie de condiciones triviales del problema, cuya solución es directa, y otras condiciones no triviales, cuya solución es recursiva pero con datos más pequeños. 3) La composición: Consiste en expresar en un algoritmo en pseudocódigo el resultado del análisis por casos. Es una actividad de mera traducción. Página 8 de 13

9 4) La verificación del algoritmo diseñado. La verificación se consigue demostrando que: a. La completitud de la solución, es decir, que el conjunto de los casos no triviales junto a los casos triviales cubre todos los casos de la precondición. b. La ejecución de cualquiera de los casos triviales aporta una solución correcta y finalizan la ejecución del algoritmo. Es decir, cualquiera de las postcondiciones de los estados triviales está contemplada dentro de la postcondición general del algoritmo. c. La ejecución del algoritmo es finita. Para ello, primero se demuestra que la solución a los casos no triviales se realiza siempre con problemas más pequeños, para ello se utiliza una función cota como en la demostración del algoritmo iterativo. Y, por último, se demuestra que cuando la función cota llega a cero, se llega siempre a un estado trivial. Ventajas e inconvenientes La principal ventaja es la simplicidad de comprensión y su gran potencia. Favorece la resolución de los problemas de manera natural, sencilla y elegante. Facilita verificar que la solución del problema es correcta. El principal inconveniente es la ineficiencia tanto en tiempo como en memoria, por el alto consumo de recursos de las llamadas de función. Transformación de algoritmos recursivos a iterativos Los algoritmos recursivos pueden transformarse en iterativos, que, generalmente, consumen menos recursos, aunque suelen ser más largos y complejos. Para ello se transforma la recursión usando pilas. La forma más sencilla de eliminar la recursión es cuando hay una sola llamada recursiva (recursión lineal) y se encuentra al final del algoritmo recursivo. Se sustituye la llamada por una instrucción iterativa. Por ejemplo, la función factorial: a partir de su definición recursiva, que hemos visto antes, podemos implementar la versión iterativa de la siguiente manera: FUNCTION factorial(n:integer): integer; VAR f: integer; f:=1; WHILE n >0 DO f:=n*f; n:=n-1; factorial:=f; Una forma más compleja de recursión lineal ocurre cuando la llamada recursiva no es la última acción del procedimiento. En general los procedimientos recursivos lineales son de la forma: PROCEDURE f(x); IF g(x) THEN h(x); ELSE a; f(k(x)); b; Página 9 de 13

10 Y pueden ser transformados a la siguiente forma: PROCEDURE f(x); WHILE NOT g(x) DO a; Push(x,pila); (* Guardamos x en la pila *) x:=k(x) h(x); WHILE Pila no vacia DO x = Pop(pila); /*Sacamos el siguiente valor de la pila*/ b; Página 10 de 13

11 Complejidad Un factor importante en el diseño de algoritmos es su eficiencia a la hora de consumir los recursos del ordenador al ejecutarse. El recurso más valioso en un ordenador es el tiempo de procesador, por ello, los estudios de eficiencia de los algoritmos se orientan a minimizar este consumo. La eficiencia de un algoritmo depende de la máquina y de otros factores como por ejemplo, el compilador utilizado. Para comparar dos algoritmos sin tener en cuenta estos factores externos se usa la técnica del cálculo de complejidad del algoritmo. Esta es una media informativa del tiempo de ejecución de un algoritmo y depende de dos factores: Las características de los datos de entrada del programa, especialmente su volumen. La propia complejidad del algoritmo del programa. La técnica del cálculo de la complejidad se basa en el estudio de la frecuencia de ejecución máxima de las instrucciones de los algoritmos, en función del tamaño de la entrada. Esta técnica supone que a mayor tasa de ejecución, mayor será el consumo de tiempo de procesador. Ejemplo: Dado el algoritmo siguiente: Instrucciones Tiempo de ejecución instrucción Frecuencia de ejecución C := 2; ta 1 For i:= 1 to n do ta + ts n EndFor For j := 1 to n do ta + ts n 2 EndFor; A:= j+c; ta + ts n 2 El tiempo de ejecución del algoritmo se establecería con la función T(n) = 2(ta + ts) n 2 + (ta + ts)n + ta. Donde ta, tiempo de asignación, y ts, tiempo de suma, dependen de la máquina. n es la variable que indica el tamaño de los datos de entrada. La técnica del cálculo de la complejidad no tiene en cuenta las características de la máquina, por lo que ta y ts no los tiene en cuenta, y sólo tiene en cuenta el termino con el factor de mayor grado, que en este caso es n 2. El resto de factores de menor grado los desprecia pues para n suficientemente grande tienen una influencia mínima en el tiempo de ejecución. Es por ello, que los algoritmos se clasifican por el factor de mayor grado, es lo que se denomina grado de complejidad. Así, se entendería que el grado de complejidad del algoritmo anterior es n 2. Notación O grande Existe una notación matemática para indicar el grado de complejidad de un algoritmo, la notación O grande y se define como: f(n) = O(g(n)) : f(n) es de grado de complejidad g(n) si: f(n) <= c g(n) para todo n >= n 0. Siendo n 0 y c números reales positivos c está determinado por las características externas al algoritmo: características de la máquina, compilador... n 0 indica el tamaño del problema (tamaño de la entrada) a partir del cual se cumple la relación. c g(n) es la función cota límite superior de la función f(n) a partir de un determinado tamaño del problema. Página 11 de 13

12 c g(n) Consumo CPU f(n) N 0 Tamaño del problema Propiedades de la notación O grande Si multiplicamos el orden de una función por una constante, el orden del algoritmo sigue siendo el mismo. O(c*f(n)) = O(f(n)) La suma del orden de dos funciones es igual al orden de la mayor. O(f(n)+g(n)) = O(máx(f(n),g(n)). Si multiplicamos el orden de dos funciones el resultado esta multiplicación de los ordenes. Orden de crecimiento de funciones conocidas O(a n ) con a<1 < O(1) < O(log(n)) < O(n) < O(log(n)n) < O(n 2 ) < O(a n ) con a>1 < O(n!) < O(n n ) Reglas de cálculo de complejidad de T(n) El tiempo de ejecución de cada sentencia simple, por lo común puede tomarse como O(1). El tiempo de ejecución de una secuencia de proposiciones se determina por la regla de la suma. Es el máximo tiempo de ejecución de una proposición de la sentencia. Para las sentencias de bifurcación (IF,CASE) el orden resultante será el de la bifurcación con mayor orden. Para los bucles es el orden del cuerpo del bucle sumado tantas veces como se ejecute el bucle. El orden de una llamada a un subprograma no recursivo es el orden del subprograma. Ventajas 1. Es una técnica a nivel conceptual, independiente del entorno de ejecución. 2. Se puede calcular a priori, sin necesidad de ejecutar el algoritmo 3. Permite comparar fácilmente la eficiencia de algoritmos diferentes 4. Es fácil de calcular Inconvenientes 1. Es sólo una estimación. No indica a partir de que tamaño del problema un algoritmo es mejor que otro. Por ejemplo: Si tenemos un algoritmo 1 con complejidad f1(n)=10 6 n y otro con complejidad f2(n) = n 2 para un problema con tamaño de datos n=10 3. Al calcular el orden de complejidad, f1 = O(n) y f2= O(n 2 ), luego f1 es más eficiente que f2. Pero si analizamos las funciones de complejidad, vemos que f1 es mejor a partir de n> La notación O grande nos llevaría a elegir el algoritmo incorrecto. Página 12 de 13

13 Ejemplos de cálculo de complejidad Calcular la complejidad de los siguientes programas: a/ Error:=a+n-1>B; IF NOT Error THEN for i:=1 TO n do c:=c+1; for i:=1 TO n do d:=d+1; END END La complejidad es O(n) b/ RESET(fich); WHILE NOT EOF(fich) DO READ (fich,ele); for i:=1 TO m do elem[i]:=6 ; END END O(1) O(n) O(n) O(1) O(1) O(m) La complejidad es O(m*n) ya que el bucle WHILE se ejecuta 1 vez por cada uno de los n elementos del fichero. c/ Ordenar las siguientes funciones por orden de crecimiento: a. n f. n/log n b. SQRT(n) g. SQRT(n)Χlog 2 n c. log n h. (1/3) n d. log (log n) i. (3/2) n e. log 2 n j. 17 h < j < d < c < e < b < g < f < a < i Página 13 de 13

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

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos

Más detalles

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación INDICE Prologo XI Capitulo 1. Algoritmos y programas 1.1. Configuraciones de una computadora 1 1.2. Lenguajes de programación 2 1.3. Resolución de problemas 1.3.1. Fase de resolución del problema 3 1.3.1.1.

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles

Complejidad de los Algoritmos

Complejidad 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 detalles

Algoritmos de Ordenación

Algoritmos de Ordenación Algoritmos de Ordenación Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Algoritmos comunes - Ordenación Ordenación o clasificación es

Más detalles

Tema 3. Análisis de costes

Tema 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 detalles

La eficiencia de los programas

La eficiencia de los programas La eficiencia de los programas Jordi Linares Pellicer EPSA-DSIC Índice General 1 Introducción... 2 2 El coste temporal y espacial de los programas... 2 2.1 El coste temporal medido en función de tiempos

Más detalles

Tema 2. Divide y vencerás.

Tema 2. Divide y vencerás. Programa de teoría Parte I. Estructuras de Datos. 1. Abstracciones especificaciones. 2. Conjuntos diccionarios. 3. Representación de conjuntos mediante árboles. 4. Grafos. Parte II. Algorítmica. 1. Análisis

Más detalles

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

Métodos de Ordenamiento. Unidad VI: Estructura de datos Métodos de Ordenamiento Unidad VI: Estructura de datos Concepto de ordenación La ordenación de los datos consiste en disponer o clasificar un conjunto de datos (o una estructura) en algún determinado orden

Más detalles

Complejidad computacional (Análisis de Algoritmos)

Complejidad 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 detalles

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus

Más detalles

Análisis de Algoritmos

Análisis de Algoritmos Análisis de Algoritmos Amalia Duch Barcelona, marzo de 2007 Índice 1. Costes en tiempo y en espacio 1 2. Coste en los casos mejor, promedio y peor 3 3. Notación asintótica 4 4. Coste de los algoritmos

Más detalles

Unidad I: Introducción a las estructuras de datos

Unidad I: Introducción a las estructuras de datos Unidad I: Introducción a las estructuras de datos 1.1 Tipos de datos abstractos (TDA) Los tipos de datos abstractos (TDA) encapsulan datos y funciones que trabajan con estos datos. Los datos no son visibles

Más detalles

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados

Más detalles

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Tema: Funciones, Procedimientos y Recursividad en C#.

Tema: Funciones, Procedimientos y Recursividad en C#. Tema: Funciones, Procedimientos y Recursividad en C#. Objetivos Programación I, Guía 6 1 Utilizar la sintaxis de las funciones definidas por el usuario (programador) para resolver problemas. Identificar

Más detalles

ASIGNATURA: ESTRUCTURA DE DATOS II

ASIGNATURA: ESTRUCTURA DE DATOS II ASIGNATURA: ESTRUCTURA DE DATOS II Cód: 31-206 Régimen cuatrimestral Horas reloj semanales: 4 Horas teóricas: 15 Horas prácticas: 45 Horas totales: 60 Carrera: Sistemas 2016 FUNDAMENTOS: Un tipo de dato

Más detalles

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute. Los problemas que se plantean en la vida diaria suelen ser resueltos mediante el uso de la capacidad intelectual y la habilidad manual del ser humano. La utilización de la computadora en la resolución

Más detalles

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para

Más detalles

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA I. DATOS DE IDENTIFICACION 1. Unidad Académica: Facultad de Ciencias 2. Programa (s) de estudio: Licenciatura

Más detalles

<tipo> Tipo de dato de los elementos del vector

<tipo> Tipo de dato de los elementos del vector Vectores y matrices Declaración Vector (array unidimiensional): []; Tipo de dato de los elementos del vector Identificador de la variable.

Más detalles

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

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas Tema 9 Algoritmos sobre listas Programación 2015-2016 Programación - Tema 9: Algoritmos sobre listas 1 Tema 9. Algoritmos sobre listas Algoritmos sobre Arrays. Búsqueda. Inserción. Ordenación. Programación

Más detalles

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE Análisis y costo de algoritmos Algoritmos Un algoritmo es un conjunto de pasos claramente definidos que a partir de un cierta entrada (input) produce una determinada salida (output) Algoritmos y programas

Más detalles

Universidad Autónoma del Estado de México Facultad de Medicina

Universidad Autónoma del Estado de México Facultad de Medicina Universidad Autónoma del Estado de México Facultad de Medicina Licenciatura en Bioingeniería Médica Unidad de Aprendizaje: Algoritmos y programación básica Unidad 3: Estructuras de control de flujo en

Más detalles

Estructuras de Control

Estructuras de Control Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas

Más detalles

Estructuras de control

Estructuras de control Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando

Más detalles

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL 1 TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL TECNOLOGÍA DE LA COMPUTADORA FACILITADOR: PARTICIPANTE: DAVID, CHIRIQUÍ 2015 2 Qué es un programa? Un programa informático es un conjunto

Más detalles

Curso de Programación 1

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

Más detalles

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

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN Y MEZCLA Grado en Ingeniería en Tecnologías Industriales Programación

Más detalles

Universidad de Managua

Universidad de Managua Universidad de Managua Introducción a la Programación Tema 7 Introducción a la programación en lenguaje C# Objetivos - Describir la estructura básica de un programa en Lenguaje C# - Explicar las estructuras

Más detalles

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

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Prof. Montserrat Serrano Montero ÍNDICE Tipos de datos El tipo abstracto

Más detalles

Estructura de datos. Carrera: SCC Participantes

Estructura de datos. Carrera: SCC Participantes 1.- DATOS DE LA ASIGNATURA Nombre de la asignatura: Carrera: Clave de la asignatura: Horas teoría-horas práctica-créditos Estructura de datos Ingeniería en Sistemas Computacionales SCC - 0408 4-2-10 2.-

Más detalles

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción. 2007/2008 Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS 1.-Introducción. -Comprender cómo funciona un lenguaje de programación 2. Características del lenguaje C -Entender las

Más detalles

Fundamentos de programación y Bases de Datos

Fundamentos de programación y Bases de Datos Fundamentos de programación y Bases de Datos Duración: 25.00 horas Descripción En la actualidad la mayoría de nuestra vida esta basada en el uso de programas informáticos. Para desarrollar un programa

Más detalles

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3 PROGRAMACION FUNCIONAL - Un lenguaje de programación funcional tiene gran flexibilidad, es conciso en su notación y su semántica es sencilla. El inconveniente principal de estos lenguajes ha sido la ineficiencia

Más detalles

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

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 Algoritmos de ordenación Análisis y Diseño de Algoritmos Algoritmos de ordenación Algoritmos básicos: Θ(n 2 ) Ordenación por inserción Ordenación por selección Ordenación por intercambio directo (burbuja)

Más detalles

C a l ses P P y y NP C a l se P C a l se N P N P [No N n o -De D te t rmin i i n s i ti t c i Polynomial-tim i e]

C a l ses P P y y NP C a l se P C a l se N P N P [No N n o -De D te t rmin i i n s i ti t c i Polynomial-tim i e] Análisis y Diseño de Algoritmos Introducción Análisis y Diseño de Algoritmos Concepto de algoritmo Resolución de problemas Clasificación de problemas Algorítmica Análisis de la eficiencia de los algoritmos

Más detalles

Análisis y Diseño de Algoritmos

Aná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 detalles

Tema 5.- Recursividad

Tema 5.- Recursividad Apuntes elaborados por: Raquel López, Eduardo Quevedo y Aaron Asencio Revado por: Javier Miranda el???? Tema 5.- Recursividad NOTA Todos los ejemplos que se exponen en este tema se pueden realizar utilizando

Más detalles

Parte I: El computador y el proceso de programación

Parte I: El computador y el proceso de programación Parte I: El computador y el proceso de programación 1.Introducción a los computadores y su programación 2. Introducción al análisis y diseño de algoritmos 3. Introducción al análisis y diseño de programas

Más detalles

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Programación MODULAR: Subalgoritmos - funciones y procedimientos Programación MODULAR: Subalgoritmos - funciones y procedimientos Uno de los métodos fundamentales para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. Estos problemas

Más detalles

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.

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. 86 Capítulo 7. ORDENAMIENTO. 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. Si los elementos a ordenar son compuestos

Más detalles

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

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 Índice INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 1.1 PROGRAMA Y LENGUAJESDE PROGRAMACIÓN...12 1.1.1 EL LENGUAJE JAVA...13 1.1.2 EL JDK...15 1.1.3 LOS PROGRAMAS EN JAVA...16

Más detalles

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación. ALGORITMOS SECUENCIALES: La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Diseño Estructurado de Algoritmos

Diseño Estructurado de Algoritmos Diseño Estructurado de Algoritmos 1 Sesión No. 11 Nombre: Estructuras algorítmicas. Tercera parte. Objetivo de la sesión: Al concluir la sesión el estudiante aplicará las estructuras algorítmicas repetitivas

Más detalles

Búsqueda en e.e. --> reglas para elegir entre las ramas que con más probabilidad lleven a la solución.

Búsqueda en e.e. --> reglas para elegir entre las ramas que con más probabilidad lleven a la solución. BÚSQUEDA HEURÍSTICA estudio de los métodos y reglas del descubrimiento y la invención. Búsqueda en e.e. --> reglas para elegir entre las ramas que con más probabilidad lleven a la solución. Situaciones

Más detalles

Analisis de algoritmos

Analisis de algoritmos Analisis de algoritmos Eficiencia Es la capacidad de disponer de un recurso. En el caso de los algoritmos, la eficiencia se logra haciendo el mejor uso posible de los recursos del sistema. Recursos Qué

Más detalles

Computadora y Sistema Operativo

Computadora y Sistema Operativo Computadora y Sistema Operativo Según la RAE (Real Academia de la lengua española), una computadora es una máquina electrónica, analógica o digital, dotada de una memoria de gran capacidad y de métodos

Más detalles

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

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera Lectura ORDENACIÓN DE ARREGLOS Con frecuencia se requiere clasificar u ordenar los elementos de un vector (arreglo unidimensional) en algún orden en particular. Por ejemplo, ordenar un conjunto de números

Más detalles

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6 Planificaciones 7504 - Algoritmos y Programación II Docente responsable: CALVO PATRICIA MABEL 1 de 6 OBJETIVOS Que el alumno maneje de modo correcto el diseño de un TDA de acuerdo a las exigencias de una

Más detalles

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

Algorítmica y Complejidad. Tema 3 Ordenación. Algorítmica y Complejidad Tema . Introducción.. Algoritmo de inserción.. Algoritmo de selección.. Algoritmo de la burbuja.. Algoritmo heapsort.. Algoritmo quicksort. 7. Algoritmo countingsort.. Algoritmo

Más detalles

ESTRUCTURAS DE CONTROL

ESTRUCTURAS DE CONTROL ESTRUCTURAS DE CONTROL En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede: De

Más detalles

TEMA 5: Subprogramas, programación modular

TEMA 5: Subprogramas, programación modular TEMA 5: Subprogramas, programación modular 5.1.-Definición de módulo. Programación modular La programación modular está basada en la técnica de diseño descendente, que como ya vimos consiste en dividir

Más detalles

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

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos Estructura de Datos y Algoritmos Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos 1. Algoritmos de ordenación recursivos 1.1. Mergesort, Ordenamiento por fusión Mergesort se ejecuta en un tiempo

Más detalles

BASES DE DATOS TEMA 2 MODELOS DE DATOS

BASES DE DATOS TEMA 2 MODELOS DE DATOS SES DE DTOS TEM 2 MODELOS DE DTOS Un modelo de datos es una serie de conceptos que puede utilizarse para describir un conjunto de datos y las operaciones para manipularlos. Hay dos tipos de modelos de

Más detalles

Grafos. Amalia Duch Brown Octubre de 2007

Grafos. Amalia Duch Brown Octubre de 2007 Grafos Amalia Duch Brown Octubre de 2007 Índice 1. Definiciones Básicas Intuitivamente un grafo es un conjunto de vértices unidos por un conjunto de líneas o flechas dependiendo de si el grafo es dirigido

Más detalles

Contenido PARTE I. ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIÓN Prefacio a la cuarta edición...

Contenido PARTE I. ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIÓN Prefacio a la cuarta edición... Prefacio a la cuarta edición... xvii PARTE I. ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIÓN... 1 Capítulo 1. Introducción a las computadoras y los lenguajes de programación... 3 INTRODUCCIÓN... 3 1.1. Qué

Más detalles

16 Análisis sintáctico I

16 Análisis sintáctico I 2 Contenido Recordando la estructura de un compilador Recordando el análisis léxico l análisis sintáctico Comparación con el análisis léxico l Rol del Parser Lenguajes de programación Gramáticas structura

Más detalles

Programación Modular. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Programación Modular. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Programación Modular Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Programación Modular Un software monolítico no puede ser entendido fácilmente por un solo lector. El

Más detalles

Retículos y Álgebras de Boole

Retículos y Álgebras de Boole Retículos y Álgebras de Boole Laboratorio de Matemática Discreta Jesús Martínez Mateo jmartinez@fi.upm.es Práctica 1. Ordenación topológica A. Herramientas necesarias Para la práctica que vamos a realizar

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

Estrategias de Diseño de Algoritmos

Estrategias de Diseño de Algoritmos Estrategias de Diseño de Algoritmos Introducción A través de los años, los científicos de la computación han identificado diversas técnicas generales que a menudo producen algorit mos eficientes para la

Más detalles

Ejemplo, generación de #s aleatorios

Ejemplo, generación de #s aleatorios Ejemplo, generación de #s aleatorios Supón que tienes un generador de números aleatorios enteros [0,2] con distribución uniforme, y tu necesitas generar números con distribución uniforme [0,4]. Alguien

Más detalles

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje. Modulo 1. Introducción a los lenguajes de programación La solución de problemas mediante en uso de un computador nos lleva a desarrollar programas o aplicaciones, la construcción de estos programas debe

Más detalles

Notación Asintótica 2

Notació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 detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 ALGORITMOS DIGITALES II Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 OBJETIVOS Conocer los principios básicos de los algoritmos. Establecer paralelos entre los algoritmos, los programas y las

Más detalles

III. Generación de Código orientado a objetos

III. Generación de Código orientado a objetos III. Generación de Código orientado a objetos UNIDAD III Aspectos fundamentales Del código orientado a objetos. MÓDULOS DE CÓDIGO 1 DE FORMULARIO Almacenan el código en VB 2 ESTÁNDAR 3 DE CLASE Contiene

Más detalles

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad Calculo proposicional 1 Argumentos y proposiciones lógicas 1 Algunos argumentos lógicos importantes 2 Proposiciones 4 Conexiones lógicas 5 Negación (tabla)

Más detalles

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA Diseño de compiladores Gestión de la memoria / Generación de código ORGANIZACIÓN DE MEMORIA Organización de memoria Depende del tipo de lenguaje (declarativos, imperativos), del compilador y del sistema

Más detalles

Contenido. Prólogo... Capítulo 1. Algoritmos y estructuras de datos... 1. Introducción... 24

Contenido. Prólogo... Capítulo 1. Algoritmos y estructuras de datos... 1. Introducción... 24 Contenido Prólogo... vii Capítulo 1. Algoritmos y estructuras de datos... 1 Introducción... 2 1.1. Tipos de datos... 2 1.1.1. Tipos primitivos de datos... 3 1.1.2. Tipos de datos compuestos y agregados...

Más detalles

Introducción a la programación

Introducción a la programación Introducción a la programación Conceptos Básicos El objetivo fundamental de éste curso es enseñar a resolver problemas mediante una computadora. El programador de computadoras es antes que nada una persona

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

Tema 7: Recursividad

Tema 7: Recursividad Tema 7: Recursividad Objetivos: en este tema estudiaremos funciones recursivas; esto es, funciones que se invocan a sí mismas. Estas funciones son equivalentes a estructuras tipo bucle pero permiten especificar

Más detalles

NOTACIÓ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. 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 detalles

Procesadores de lenguaje Tema 6 La tabla de símbolos

Procesadores de lenguaje Tema 6 La tabla de símbolos Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de

Más detalles

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación TUTORIAL PSEINT Ing. Ronald Rentería Ayquipa Fundamentos de Programación PSEINT Página Oficial: http://pseint.sourceforge.net/ Es un software que interpreta pseudocódigo. Permite la generación de diagramas

Más detalles

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS 1 ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS Corina Flores Villarroel ORDENAMIENTO EN ARREGLOS Y COLECCIONES Una de las tareas más comunes a la hora de procesar datos es la clasificación u ordenación de los datos.

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO Recursividad: La recursividad es una técnica de programación

Más detalles

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

Tiempo de Ejecución. Midiendo el Tiempo de Ejecución

Tiempo de Ejecución. Midiendo el Tiempo de Ejecución Tiempo de Ejecución Arturo Díaz Pérez Sección de Computación Departamento de Ingeniería Eléctrica CINVESTAV-IPN Av. Instituto Politécnico Nacional No. 2508 Col. San Pedro Zacatenco México, D. F. CP 07300

Más detalles

Algoritmos de Ordenamiento

Algoritmos de Ordenamiento Algoritmos de Ordenamiento mat-151 Alonso Ramírez Manzanares Computación y Algoritmos 12.04 Algoritmos de ordenamiento Entrada: secuencia de números. Salida: permutación

Más detalles

Recursión. Capítulo 4

Recursión. Capítulo 4 Recursión Capítulo 4 Introducción La recursión o recursividad es un concepto amplio, con muchas variantes, y difícil de precisar con pocas palabras.. Actividades Cotidianas; fotografía donde se observa

Más detalles

FUNCIONAMIENTO DEL ORDENADOR

FUNCIONAMIENTO DEL ORDENADOR FUNCIONAMIENTO DEL ORDENADOR COMPUTACIÓN E INFORMÁTICA Datos de entrada Dispositivos de Entrada ORDENADOR PROGRAMA Datos de salida Dispositivos de Salida LOS ORDENADORES FUNCIONAN CON PROGRAMAS Los ordenadores

Más detalles

ÍNDICE INTRODUCCIÓN...13

ÍNDICE INTRODUCCIÓN...13 ÍNDICE INTRODUCCIÓN...13 CAPÍTULO 1. LENGUAJE ALGORÍTMICO...15 1.1 DEFINICIÓN DE ALGORITMO...16 1.2 LA ROTACIÓN DE UNA LISTA DE NÚMEROS NATURALES...20 1.3 CUESTIONES...23 1.3.1 Dos comerciales en el restaurante...23

Más detalles

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

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 ) MEMORIA DEL PROYECTO TITULADO: DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 ) PRESENTADO POR: María Luisa Pérez Delgado María Luisa Pérez Delgado Dentro del marco del proyecto

Más detalles

Tema 6 Organización y gestión de la memoria

Tema 6 Organización y gestión de la memoria Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución

Más detalles

PROGRAMA JAVA SE (Standard Edition) MODALIDAD ONLINE

PROGRAMA JAVA SE (Standard Edition) MODALIDAD ONLINE PROGRAMA JAVA SE (Standard Edition) MODALIDAD ONLINE JAVA SE (Standard Edition): El curso proporciona la base que necesita cualquier programador de Java, tanto en cuanto a las peculiaridades de la tecnología

Más detalles

MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.6

MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.6 MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.6 NOMBRE DE LA PRÁCTICA. Estructuras secuénciales 6.1 OBJETIVO GENERAL El alumno desarrollará la habilidad para diseñar algoritmos secuenciales,

Más detalles

Es común al crear estructuras de datos y luego trabajar sobre las mismas, tener la necesidad de realizar búsquedas en forma más frecuente que la

Es común al crear estructuras de datos y luego trabajar sobre las mismas, tener la necesidad de realizar búsquedas en forma más frecuente que la Es común al crear estructuras de datos y luego trabajar sobre las mismas, tener la necesidad de realizar búsquedas en forma más frecuente que la necesidad de realizar inserciones. Por ejemplo si tenemos

Más detalles

Tema 2 Introducción a la Programación en C.

Tema 2 Introducción a la Programación en C. Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes

Más detalles

Programación con C Intermedio

Programación con C Intermedio Programa de Capacitación en Cómputo Semestre 2016-2 Programación con C Intermedio Instructor: P. I. Gutiérrez Chávez Cristóbal INFORMACIÓN GENERAL El lenguaje C es un lenguaje de programación estructurada

Más detalles

Nombre de la asignatura : Administración de Archivos. Carrera : Ingeniería en Sistemas Computacionales. Clave de la asignatura : SCB-9323

Nombre de la asignatura : Administración de Archivos. Carrera : Ingeniería en Sistemas Computacionales. Clave de la asignatura : SCB-9323 . D A T O S D E L A A S I G N A T U R A Nombre de la asignatura : Administración de Archivos Carrera : Ingeniería en Sistemas Computacionales Clave de la asignatura : SCB-9 Horas teoría-horas práctica-créditos

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada Código de materia 01 Prof Titular Ing Rafael Brizuela Facultad de tecnología informática UNIVERSIDAD ABIERTA INTERAMERICANA GUÍA DE REPASO CONCEPTUAL PREGUNTAS Unidad 1: Conceptos

Más detalles

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO FACULTAD DE CS. QUIMICAS, FISICAS Y MATEMATICAS I. DATOS GENERALES DEPARTAMENTO ACADEMICO DE INFORMATICA SILABO 1.1 Asignatura : LENGUAJE DE PROGRAMACION 1.2 Categoría : OE 1.3 Código : IF463AME 1.4 Créditos

Más detalles

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características

Más detalles

Análisis y Diseño de Algoritmos

Análisis y Diseño de Algoritmos Análisis y Diseño de Algoritmos Recurrencias DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción 2 Cuando un algoritmo se llama a sí mismo Su tiempo de ejecución se puede describir

Más detalles