Ejemplo, generación de #s aleatorios

Documentos relacionados
Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Programación de Ordenadores. Dept. Ciencias de la Computación e I.A. Universidad de Granada

IN34A - Optimización

Programación de Ordenadores

Análisis y Diseño de Algoritmos

Teoría Matemática de la Computación Primer Problemario Prof. Miguel A. Pizaña 16 de febrero de 2017

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

Algoritmos y Complejidad

La eficiencia de los programas

Curso: Teoría de la Computación. Unidad 2, Sesión 7: Complejidad computacional

Tema: Introducción a la Programación Estructurada

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Programación Introducción al curso

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

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

Complejidad Computacional

Teoría Matemática de la Computación Primer Problemario Prof. Miguel A. Pizaña 7 de junio de 2016

PRÁCTICA FUNDAMENTOS DE ALGORITMOS (Estructuras de Repetición II) Objetivos

Esp. Alexis Olvany Torres ch. Datos de salida. Datos de salida. Datos de salida

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

Evolución del software y su situación actual

INFORME MEMORIA CACHE Y MEMORIA VIRTUAL.

Computación I (CI-2125) Clase 3. Prof. Mireya Morales Primera

INSTITUTO SUPERIOR DE EDUCACION RURAL ISER FUNDAMENTOS DE PROGRAMACION

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

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

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

CIF 2452 Fundamentos de Programación

Análisis de algoritmos y Notación Asintótica

Partes de una computadora. Conceptos Generales. Elementos de Computación (CU) Computación (TIG) El Hardware de una computadora

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

Otro componente fundamental del ordenador es su memoria principal

SISTEMAS OPERATIVOS Arquitectura de computadores

Análisis y Diseño de Algoritmos

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

como les va con las practicas?

Maquina de Turing. 5. Fundamentos de algoritmos. Turing TURING TURING 10/08/2010. MI Elizabeth Fonseca Chávez

Computación I (CI-2125) Clase 1. Prof. Mireya Morales Primera

Unidad 9. Daniel Rojas UTN. Thursday, July 31, 14

Objetivo: Contenido

Programación de Sistemas. Unidad 4. Cargador

Funcionamiento de las computadoras

Complejidad computacional (Análisis de Algoritmos)

Prof. María Alejandra Quintero. Informática Año

Algoritmos de Ordenamiento

Algoritmos. Libro en línea 3/8/18. Ing. Roberto Martínez Román - 1 RESOLVIENDO PROBLEMAS. Cuál es el objetivo del libro?

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Programación Análisis de Algoritmos: Tiempo de Ejecución (Introducción)

Análisis de algoritmos

Análisis de algoritmos

Unidad I: Organización del Computador. Ing. Marglorie Colina

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN CONTENIDO DE CURSO

Fundamentos de los Sistemas Operativos

PRÁCTICA FUNDAMENTOS DE ALGORITMOS I. Objetivos

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

Convivencia Introducción

Velocidades Típicas de transferencia en Dispositivos I/O

Tema 9. Recursividad

Tema 3. Análisis de costes

UNIVERSIDAD MAYOR DE SAN SIMON FACULTAD DE CIENCIAS Y TECNOLOGÍA PLAN GLOBAL COMPUTACION I

Sistemas Operativos. Daniel Rúa Madrid

TEMA 4: ALGORITMOS Y PROGRAMAS

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

Introducción a la programación: Contenido. Introducción

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (repite - mientras) Juan Pablo Cobá Juárez Pegueros

Capítulo 3. Introducción a la programación. Continuar

Prefijo Símbolo Valor Sistema de unidades kibi kilo mebi mega gibi giga tebi tera 2^10 10^3 2^20 10^6 2^30 10^9 2^40 10^12

Tema 2. Algoritmos y programas. Informática Grado en Física Universitat de València.

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

Análisis de Algoritmos

Fundamentos de Computadores. Tema 5. Circuitos Aritméticos

Elementos constituyentes de la ejecución de un programa

FUNCIONAMIENTO DEL ORDENADOR

Microprocesador. Introducción. Instituto Sagrado Corazón de Jesús

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 6

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

Variables, expresiones y sentencias

Organización de computadoras. Clase 11. Universidad Nacional de Quilmes. Lic. Martínez Federico

Circuitos electrónicos digitales. Unidades Aritméticas Lógicas. Departamento de Tecnología Electrónica Universidad de Sevilla

Introduccion a la Programacion. Pablo Sevilla Jarquin

Sistemas Operativos. MODULO I. ANTECEDENTES 1.2 introducción a los ordenadores

ESCUELA NACIONAL AUXILIARES DE ENFERMERÍA Manizales TECNOLOGÍA E INFORMÁTICA


TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Organización de Computadoras

ESCUELA DE INGENIERIA Informática Y Sistemas

Conceptos de Programación

Programa educativo: Ingeniería Mecánica Eléctrica Experiencia educativa: PROGRAMACIÓN segundo periodo del plan de estudios

PROGRAMA: COMPUTACION I

FUNCIONAMIENTO DE LA UNIDAD DE CONTROL DEL PROCESADOR

La secuencia de referencias a páginas para el proceso B es:

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

Rendimiento y sus factores

Relación de Ejercicios. Programación Paralela 4º de Grado en Ingeniería Informática.

Unidad I: Introducción a las estructuras de datos

Transcripción:

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 propone generar 2 números A,B y sumarlos C = A + B para generar los números que necesitas. Muestra por qué esta solución está mal, pues no genera números con distribución uniforme. Computación y Algoritmos 17.02.2009

Examen rápido (5 min) En una hoja hacer el siguiente código en C i) Dado un vector de tamaño N que fué prellenado con valores, hacer una función que encuentra el índice del elemento más grande. i) Dado un vector de tamaño N que fué prellenado con valores, hacer una función que encuentra el índice de segundo elemento más grande.

Correos para las tareas comp.algo@gmail.com Ahí se mandan, tareas, prácticas y exámenes. Computación y Algoritmos 10.02.2009

Introducción al análisis de algoritmos Computación y Algoritmos mat-151 1

Aplicaciones: Conexiones en redes, de comunicación, de energía eléctrica, etc. Búsquedas en bases de datos gigantescas (transacciones comerciales) Encontrar caminos cortos en grafos, en Planeación de movimiento en robótica, en busquedas de rutas en mapas The Human Genome Project: identificar los 100,000 genes del DNA humano. Encontrar páginas web en donde una información en particular está contenida. Componentes conectados en VC 6

Análisis empírico 7

Análisis empírico Si tenemos dos algoritmos que solucionan el mismo problema, cómo podemos saber cuál es mejor? 7

Análisis empírico Si tenemos dos algoritmos que solucionan el mismo problema, cómo podemos saber cuál es mejor? Corremos los dos a ver cuál termina primero! 7

Análisis empírico Si tenemos dos algoritmos que solucionan el mismo problema, cómo podemos saber cuál es mejor? Corremos los dos a ver cuál termina primero! No podría escapar al ojo menos atento si uno de los algoritmos termina en 3 segundos y el otro después de 30! 7

Análisis empírico Si tenemos dos algoritmos que solucionan el mismo problema, cómo podemos saber cuál es mejor? Corremos los dos a ver cuál termina primero! No podría escapar al ojo menos atento si uno de los algoritmos termina en 3 segundos y el otro después de 30! Cuando los análisis empíricos toman demasiado tiempo, se requiere un análisis matemático: esperar una hora o un día para que termine de ejecutarse un programa no es la mejor manera de determinar que es lento. 7

Análisis empírico: retos 8

Análisis empírico: retos implementar los algoritmos a comparar. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. datos perversos. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. datos perversos. ejemplo: algoritmo de ordenamiento. 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. datos perversos. ejemplo: algoritmo de ordenamiento. datos reales como las palabras en un libro, 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. datos perversos. ejemplo: algoritmo de ordenamiento. datos reales como las palabras en un libro, datos aleatorios generados automáticamente, 8

Análisis empírico: retos implementar los algoritmos a comparar. desarrollar una implementación correcta y completa. determinar las entradas apropiadas para probar el algoritmo. datos reales. datos aleatorios. datos perversos. ejemplo: algoritmo de ordenamiento. datos reales como las palabras en un libro, datos aleatorios generados automáticamente, datos perversos como archivos que contienen el mismo número. 8

Análisis empírico: peligros 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. comparar implementaciones de sistemas enteros (programas enormes). 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. comparar implementaciones de sistemas enteros (programas enormes). las diferentes implementaciones se hicieron con diferente cuidado 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. comparar implementaciones de sistemas enteros (programas enormes). las diferentes implementaciones se hicieron con diferente cuidado Algunas soluciones: 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. comparar implementaciones de sistemas enteros (programas enormes). las diferentes implementaciones se hicieron con diferente cuidado Algunas soluciones: comparar algoritmos relativamente similares con los mínimos cambios posibles en el código. 9

Análisis empírico: peligros comparar implementaciones con diferentes máquinas, compiladores o sistemas. comparar implementaciones de sistemas enteros (programas enormes). las diferentes implementaciones se hicieron con diferente cuidado Algunas soluciones: comparar algoritmos relativamente similares con los mínimos cambios posibles en el código. comparar bloques de operaciones básicas. 9

Algoritmos buenos (1) 11

Algoritmos buenos (1) No solo nos importa que los algoritmos sean factibles y en se ejecuten en tiempo finito, sino también que el proceso completo de la ejecución del programa que realiza este algoritmo sea eficiente en términos de: tiempo de ejecución, cantidad de memoria necesaria. Para un problema dado, puede haber gran cantidad de algoritmos que lo resuelvan, con propiedades muy diferentes! Según el contexto, se preferirá tal o tal algoritmo... 11

Algoritmos buenos (2) 12

Algoritmos buenos (2) Pueden haber otros factores que influyan nuestras elecciones: 12

Algoritmos buenos (2) Pueden haber otros factores que influyan nuestras elecciones: consideraciones de hardware: por ejemplo como usa la memoria el algoritmo es importante si tenemos poca memoria física y usamos memoria virtual. 12

Algoritmos buenos (2) Pueden haber otros factores que influyan nuestras elecciones: consideraciones de hardware: por ejemplo como usa la memoria el algoritmo es importante si tenemos poca memoria física y usamos memoria virtual. el hecho de que el algoritmo sea llamado muchas veces en una secuencia de llamadas: esto puede eventualmente amortiguar la complejidad, lo que puede resultar interesante. (por ejemplo, si se ejecuta rápido 9 veces de cada 10... ) 12

Algoritmos buenos (2) Pueden haber otros factores que influyan nuestras elecciones: consideraciones de hardware: por ejemplo como usa la memoria el algoritmo es importante si tenemos poca memoria física y usamos memoria virtual. el hecho de que el algoritmo sea llamado muchas veces en una secuencia de llamadas: esto puede eventualmente amortiguar la complejidad, lo que puede resultar interesante. (por ejemplo, si se ejecuta rápido 9 veces de cada 10... ) consideraciones globales: las estructuras usadas en el algoritmo pueden ser reutilizadas en otras partes del programa. 12

Análisis de algoritmos (1) 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. determinar su espacio total o máximo necesario en memoria. 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. determinar su espacio total o máximo necesario en memoria. determinar el tamaño del código 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. determinar su espacio total o máximo necesario en memoria. determinar el tamaño del código determinar si el resultado calculado es el correcto. 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. determinar su espacio total o máximo necesario en memoria. determinar el tamaño del código determinar si el resultado calculado es el correcto. determinar qué tan fácil es de leer, entender, modificar 13

Análisis de algoritmos (1) Estudiar las especificaciones del algoritmo para sacar conclusiones sobre cómo su implementación - el programa - se comportará en general. Pero que podemos analizar de un algoritmo? determinar el tiempo de ejecución en función de sus entradas. determinar su espacio total o máximo necesario en memoria. determinar el tamaño del código determinar si el resultado calculado es el correcto. determinar qué tan fácil es de leer, entender, modificar determinar su robustez, es decir, qué tan bien se comporta con entradas equivocadas o inesperadas. 13

Análisis de Algoritmos (2) 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) espacio de disco disponible 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) espacio de disco disponible el lenguaje de programación en el que se ha especificado el algoritmo 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) espacio de disco disponible el lenguaje de programación en el que se ha especificado el algoritmo el compilador / intérprete utilizado 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) espacio de disco disponible el lenguaje de programación en el que se ha especificado el algoritmo el compilador / intérprete utilizado el sistema operativo utilizado. 15

Análisis de Algoritmos (2) En este curso analizaremos principalmente el tiempo de ejecución. Existen muchos factores que pueden afectar el tiempo de ejecución de un programa: los datos de entrada el hardware el tipo de procesador utilizado (tipo y velocidad) memoria disponible (caché y RAM) espacio de disco disponible el lenguaje de programación en el que se ha especificado el algoritmo el compilador / intérprete utilizado el sistema operativo utilizado. Se necesita un modelo de la tecnología con la que se va a implementar como programas computacionales. 15

No todo es del tipo C y C++ Prolog Robolab LabView

Las cosas pueden ser complicadas de especificar: 14

Análisis de algoritmos (3) 16

Análisis de algoritmos (3) tamaño de la entrada - depende del problema estudiado, 16

Análisis de algoritmos (3) tamaño de la entrada - depende del problema estudiado, número de elementos de entrada (por ejemplo en problemas de sorting). 16

Análisis de algoritmos (3) tamaño de la entrada - depende del problema estudiado, número de elementos de entrada (por ejemplo en problemas de sorting). tamaño el bits de la estructura de datos de entrada (por ejemplo al multiplicar dos números ) 16

Análisis de algoritmos (3) tamaño de la entrada - depende del problema estudiado, número de elementos de entrada (por ejemplo en problemas de sorting). tamaño el bits de la estructura de datos de entrada (por ejemplo al multiplicar dos números ) tiempo de ejecución - número de operaciones básicas o primitivas ejecutadas. Es conveniente calcular de manera independiente a la computadora utilizada. 16

Modelos de computación (1) 17

Modelos de computación (1) Los siguientes dos modelos son ejemplos de máquinas virtuales, ideales. 17

Modelos de computación (1) Los siguientes dos modelos son ejemplos de máquinas virtuales, ideales. Realizan operaciones de forma secuencial (no hay concurrencia) 17

Modelos de computación (1) Los siguientes dos modelos son ejemplos de máquinas virtuales, ideales. Realizan operaciones de forma secuencial (no hay concurrencia) Proporcionan instrucciones básicas que son asociadas a un orden de tiempo de ejecución (un costo) 17

Modelos de computación (1) Los siguientes dos modelos son ejemplos de máquinas virtuales, ideales. Realizan operaciones de forma secuencial (no hay concurrencia) Proporcionan instrucciones básicas que son asociadas a un orden de tiempo de ejecución (un costo) Son modelos simplificados de las computadoras reales. 17

Máquina de Turing (1) 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. unidad capaz de leer y escribir datos individuales: la cabeza 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. unidad capaz de leer y escribir datos individuales: la cabeza controlada por un autómata finito. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. unidad capaz de leer y escribir datos individuales: la cabeza controlada por un autómata finito. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. Si tu estado es 42 y el símbolo que aparece es 0, entonces reemplazar por 1, muevete una localidad a la derecha y actualiza el nuevo estado a 17. unidad capaz de leer y escribir datos individuales: la cabeza controlada por un autómata finito. 18

Máquina de Turing (1) Alan Turing (1912-1954) propuso el modelo de la máquina de Turing en 1936. cinta que se extiende al infinito en ambas direcciones. la cinta se divide en bits de tamaño fijo y cada bit puede contener 0s o 1s ( o un símbolo de un alfabeto finito ) utilizando este formato la cinta contiene datos e instrucciones. Si tu estado es 42 y el símbolo que aparece es 0, entonces reemplazar por 1, muevete una localidad a la derecha y actualiza el nuevo estado a 17. unidad capaz de leer y escribir datos individuales: la cabeza controlada por un autómata finito. 18

Máquina de Turing (2) 19

Máquina de Turing (2) Operaciones posibles: 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 2. Escribir al bit al que apunta la cabeza. 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 2. Escribir al bit al que apunta la cabeza. 3. Mover la cinta a la derecha. 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 2. Escribir al bit al que apunta la cabeza. 3. Mover la cinta a la derecha. 4. Mover la cinta a la izquierda. 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 2. Escribir al bit al que apunta la cabeza. 3. Mover la cinta a la derecha. 4. Mover la cinta a la izquierda. 5. Quedar en el estado actual. 19

Máquina de Turing (2) Operaciones posibles: 1. Leer el bit al que apunta la cabeza. 2. Escribir al bit al que apunta la cabeza. 3. Mover la cinta a la derecha. 4. Mover la cinta a la izquierda. 5. Quedar en el estado actual. Cada instrucción toma una unidad de tiempo. Complejidad constante. 19

Ejemplo gráfico de máquina de Turing http://introcs.cs.princeton.edu/java/74turing/ Estado actual en amarillo

Ejemplo gráfico de máquina de Turing http://introcs.cs.princeton.edu/java/74turing/ Estado actual en amarillo

Máquina de Turing (3)

Máquina de acceso aleatorio (RAM) (1) 21

Máquina de acceso aleatorio (RAM) (1) Consta de un número finito de registros y una memoria finita. 21

Máquina de acceso aleatorio (RAM) (1) Consta de un número finito de registros y una memoria finita. La memoria se divide en palabras, cada palabra tiene una dirección entera entre 1 y n. 21

Máquina de acceso aleatorio (RAM) (1) Consta de un número finito de registros y una memoria finita. La memoria se divide en palabras, cada palabra tiene una dirección entera entre 1 y n. El contenido de cada palabra puede ser un entero o un número real (tipos de datos) 21

Máquina de acceso aleatorio (RAM) (1) Consta de un número finito de registros y una memoria finita. La memoria se divide en palabras, cada palabra tiene una dirección entera entre 1 y n. El contenido de cada palabra puede ser un entero o un número real (tipos de datos) Estos valores pueden representar datos o instrucciones. 21

Máquina de acceso aleatorio (RAM) (1) Consta de un número finito de registros y una memoria finita. La memoria se divide en palabras, cada palabra tiene una dirección entera entre 1 y n. El contenido de cada palabra puede ser un entero o un número real (tipos de datos) Estos valores pueden representar datos o instrucciones. 21

Máquina de acceso aleatorio (RAM) (2) 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. Las operaciones de posicionamiento y almacenamiento toman el mismo tiempo, sin importar el valor que se encuentre almacenado en la memoria (complejidad constante) 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. Las operaciones de posicionamiento y almacenamiento toman el mismo tiempo, sin importar el valor que se encuentre almacenado en la memoria (complejidad constante) operaciones aritméticas: suma, resta, multiplicación, división 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. Las operaciones de posicionamiento y almacenamiento toman el mismo tiempo, sin importar el valor que se encuentre almacenado en la memoria (complejidad constante) operaciones aritméticas: suma, resta, multiplicación, división operaciones con datos: cargar, guardar,copiar 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. Las operaciones de posicionamiento y almacenamiento toman el mismo tiempo, sin importar el valor que se encuentre almacenado en la memoria (complejidad constante) operaciones aritméticas: suma, resta, multiplicación, división operaciones con datos: cargar, guardar,copiar operaciones de control: condicionales, llamadas a funciones, regreso de valores. 22

Máquina de acceso aleatorio (RAM) (2) Es posible hacer operaciones con las direcciones. Buscar o guardar elementos de la memoria significan buscarlos en la dirección actual del registro. Las operaciones de posicionamiento y almacenamiento toman el mismo tiempo, sin importar el valor que se encuentre almacenado en la memoria (complejidad constante) operaciones aritméticas: suma, resta, multiplicación, división operaciones con datos: cargar, guardar,copiar operaciones de control: condicionales, llamadas a funciones, regreso de valores. Este modelo es el más utilizado. 22

Modelos de computación (2) 23

Modelos de computación (2) No simulan la jerarquía de memoria (caché o memoria virtual) 23

Modelos de computación (2) No simulan la jerarquía de memoria (caché o memoria virtual) Este tipo de modelos son excelentes predictores del desempeño de un algoritmo en computadoras reales. 23

Modelos de computación (2) No simulan la jerarquía de memoria (caché o memoria virtual) Este tipo de modelos son excelentes predictores del desempeño de un algoritmo en computadoras reales. Mientras más detallado sea el modelo, más complejo se vuelve el análisis. 23

Modelos de computación (2) No simulan la jerarquía de memoria (caché o memoria virtual) Este tipo de modelos son excelentes predictores del desempeño de un algoritmo en computadoras reales. Mientras más detallado sea el modelo, más complejo se vuelve el análisis. No abusar del modelo. 23

Nota sobre la implementación 24

Nota sobre la implementación El análisis de algoritmos inicia con la definición de las operaciones abstractas necesarias para la implementación. 24

Nota sobre la implementación El análisis de algoritmos inicia con la definición de las operaciones abstractas necesarias para la implementación. Separar el algoritmo de su implementación. Al implementar (sobre todo en sistemas grandes) se necesitará agregar mecanismos de detección de errores, deberán ser modulares, simples, legibles, con interfaces a otras partes del sistema, etc. 24

Nota sobre la implementación El análisis de algoritmos inicia con la definición de las operaciones abstractas necesarias para la implementación. Separar el algoritmo de su implementación. Al implementar (sobre todo en sistemas grandes) se necesitará agregar mecanismos de detección de errores, deberán ser modulares, simples, legibles, con interfaces a otras partes del sistema, etc. Queremos a pesar de esto los algoritmos más simples y con mejor desempeño. 24

Nota sobre la implementación El análisis de algoritmos inicia con la definición de las operaciones abstractas necesarias para la implementación. Separar el algoritmo de su implementación. Al implementar (sobre todo en sistemas grandes) se necesitará agregar mecanismos de detección de errores, deberán ser modulares, simples, legibles, con interfaces a otras partes del sistema, etc. Queremos a pesar de esto los algoritmos más simples y con mejor desempeño. La primera estrategia para aprender sobre el desempeño es realizar un análisis empírico. 24

Errores más comunes al seleccionar un algoritmo 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? Hay que considerar entonces 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? Hay que considerar entonces aplicación, 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? Hay que considerar entonces aplicación, veces que el programa será utilizado, 25

Errores más comunes al seleccionar un algoritmo 1.No tomar en cuenta su desempeño: los algoritmos más rápidos son generalmente más complicados. No tener miedo, a veces un mejor algoritmo solo involucra el cambio de unas cuantas líneas de código! 2.Tomar demasiado en cuenta su desempeño: si un programa toma solo unos microsegundos... vale la pena mejorarlo por solo un pequeño factor? Hay que considerar entonces aplicación, veces que el programa será utilizado, tiempo total que tomará al programador hacer las mejoras. 25

Análisis matemático de algoritmos 26

Análisis matemático de algoritmos Para comparar diferentes algoritmos para la misma tarea. 26

Análisis matemático de algoritmos Para comparar diferentes algoritmos para la misma tarea. Para predecir el desempeño en un nuevo ambiente. 26

Análisis matemático de algoritmos Para comparar diferentes algoritmos para la misma tarea. Para predecir el desempeño en un nuevo ambiente. Para establecer los parámetros de un algoritmo. 26

Análisis matemático de algoritmos Para comparar diferentes algoritmos para la misma tarea. Para predecir el desempeño en un nuevo ambiente. Para establecer los parámetros de un algoritmo. 26

Análisis matemático de algoritmos Para comparar diferentes algoritmos para la misma tarea. Para predecir el desempeño en un nuevo ambiente. Para establecer los parámetros de un algoritmo. El análisis empírico puede ser suficiente para algunas tareas, pero el análisis matemático es generalmente más informativo y menos costoso. 26

Análisis de algoritmos 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. Por ejemplo, cuántas veces se debe ejecutar el fragmento de código i=a[i] en la implementación del algoritmo union-búsqueda. 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. Por ejemplo, cuántas veces se debe ejecutar el fragmento de código i=a[i] en la implementación del algoritmo union-búsqueda. Cuántos nanosegundos se necesitan para ejecutar esta porción particular del código? 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. Por ejemplo, cuántas veces se debe ejecutar el fragmento de código i=a[i] en la implementación del algoritmo union-búsqueda. Cuántos nanosegundos se necesitan para ejecutar esta porción particular del código? propiedades del algoritmo vs. propiedades de una computadora. 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. Por ejemplo, cuántas veces se debe ejecutar el fragmento de código i=a[i] en la implementación del algoritmo union-búsqueda. Cuántos nanosegundos se necesitan para ejecutar esta porción particular del código? propiedades del algoritmo vs. propiedades de una computadora. 27

Análisis de algoritmos 1. Identificar las operaciones abstractas en las que se basa el algoritmo para separar el análisis de la implementación. Por ejemplo, cuántas veces se debe ejecutar el fragmento de código i=a[i] en la implementación del algoritmo union-búsqueda. Cuántos nanosegundos se necesitan para ejecutar esta porción particular del código? propiedades del algoritmo vs. propiedades de una computadora. determinar exactamente el tiempo de cálculo es una tarea muy compleja y no es útil más que para condiciones específicas. Una idea aproximada del desempeño del algoritmo en condiciones generales es más útil. 27

Análisis de algoritmos Es necesario estudiar los datos de entrada que puedan presentarse al algoritmo. entrada aleatoria caso promedio peor caso 28

Funciones de crecimiento 29

Funciones de crecimiento La mayoría de los algoritmos tienen un parámetro primitivo N que afecta el tiempo de cálculo significativamente. 29

Funciones de crecimiento La mayoría de los algoritmos tienen un parámetro primitivo N que afecta el tiempo de cálculo significativamente. ejemplos: el grado de un polinomio, el tamaño del archivo que se va a ordenar o buscar, el número de caracteres en una cadena, o alguna otra medida abstracta relacionada con el tamaño del problema considerado. 29

Funciones de crecimiento La mayoría de los algoritmos tienen un parámetro primitivo N que afecta el tiempo de cálculo significativamente. ejemplos: el grado de un polinomio, el tamaño del archivo que se va a ordenar o buscar, el número de caracteres en una cadena, o alguna otra medida abstracta relacionada con el tamaño del problema considerado. la meta es expresar los requerimientos de recursos de los programas (principalmente el tiempo de cálculo) en términos de N, usando fórmulas matemáticas de la manera más simple y precisa posible. 29

Complejidad 30

Complejidad Para poder caracterizar implementaciones, la primera cosa que hacer es aislar la o las variables que permiten caracterizar la complejidad del problema a resolver, con el fin de expresar la complejidad de las operaciones. 30

Complejidad Para poder caracterizar implementaciones, la primera cosa que hacer es aislar la o las variables que permiten caracterizar la complejidad del problema a resolver, con el fin de expresar la complejidad de las operaciones. Típicamente las variables son el número de elementos dentro del contenedor. 30

Complejidad Para poder caracterizar implementaciones, la primera cosa que hacer es aislar la o las variables que permiten caracterizar la complejidad del problema a resolver, con el fin de expresar la complejidad de las operaciones. Típicamente las variables son el número de elementos dentro del contenedor. Ejemplos: tamaño de un arreglo. 30

Complejidad - Funciones de crecimiento (1) Los algoritmos que estudiaremos en este curso tienen típicamente tiempos de cálculo proporcional a una de las siguientes funciones: 31

Complejidad - Funciones de crecimiento (1) Los algoritmos que estudiaremos en este curso tienen típicamente tiempos de cálculo proporcional a una de las siguientes funciones: 31

Complejidad - Funciones de crecimiento (1) Los algoritmos que estudiaremos en este curso tienen típicamente tiempos de cálculo proporcional a una de las siguientes funciones: La mayoría de las instrucciones de un programa se ejecutan una vez o unas pocas veces. Complejidad constante. Independiente al tamaño del problema. Si el tiempo de ejecución es logarítmico, el programa se vuelve proporcionalmente más lento mientras N crece. Ocurre generalmente en problemas grandes que se dividen en una serie de problemas más pequeños. Típicamente en los problemas de dicotomía donde el problema es compartido por varias instancias y solo una es procesada: búsqueda de mi amigo en el directorio. 31

Complejidad - Funciones de crecimiento (2) 32

Complejidad - Funciones de crecimiento (2) Cuando el tiempo es lineal, se da generalmente el caso que se hace un procesamiento por cada elemento que entra: hacer una impresión en la pantalla de cada uno de los elementos, etc... El tiempo N-logarítmico. Problemas donde cada iteración se divide en subproblemas, donde el procesamiento es lineal: los problemas clásicos en este caso son los conocidos algoritmos de ordenamiento: quicksort y mergesort. El tiempo de ejecución es de un orden cuadrático. Este es el caso para los algoritmos que tienen cíclos anidados, donde le ciclo interno se realiza sobre todos los datos: bubble sort, multiplicacion de matriz cuadrada por vector. 32

Ejemplo de NLog2(N)

Complejidad - Funciones de crecimiento (3) 33

Complejidad - Funciones de crecimiento (3) Tiempo de ejecución de orden cúbico, implica generalmente tres ciclos anidados, por ejemplo, la multiplicaciones de matrices cuadradas. Los algoritmos con funciones de crecimiento exponencial, son generalmente ingenuos y a partir de ciertos tamaños, no demasiado altos, se vuelven ya inutilizables: ejemplo, el problema de 8-puzzle. 33

Problema del 8 puzzle

Complejidad - Funciones de crecimiento (4)