como les va con las practicas?

Documentos relacionados
Datos Elementales y formato de un programa en Java

Introducción. Tema 1. Fundamentos de informática. Universidad de Oviedo. Fundamentos de Informática. Departamento de Informática Universidad de Oviedo

Operadores. Javier Fernández Rivera -

Representación de la Información.... en los Computadores

Ficha de Aprendizaje N 13

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

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

Representación de la información Ejercicios resueltos

INSTITUTO SUPERIOR DE EDUCACION RURAL ISER FUNDAMENTOS DE PROGRAMACION

El diseño de un programa Jhon Jairo Padilla Aguilar, PhD.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Representación de números en binario

UNIVERSIDAD MODULAR ABIERTA FACULTAD DE CIENCIAS ECONOMICAS

Datos y tipos de datos

Problemas computacionales, intratabilidad y problemas NP completos. Febrero Facultad de Ingeniería. Universidad del Valle

Laboratorio de Arquitectura de Redes. Operadores y expresiones en lenguaje C

Tipos de datos y Operadores Básicos

MATEMÁTICAS PARA LA COMPUTACIÓN CAPÍTULO 1. SISTEMAS NUMÉRICOS

Curso de Java Introducción a la Programación II

Programación estructurada (Tipos, operadores y expresiones)

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Definición de Memoria

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Java posee dos grandes categorías de tipos para las variables:

A veces queremos almacenar algún elemento que es Verdadero o Falso. Este tipo de dato se llama Booleano y su representación es sencilla, para cada

Lenguaje de Programación: C++ Repaso de Material C++

TEMA 2. CODIFICACIÓN DE LA INFORMACIÓN

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Estructura de Computadores Tema 2. Representación de la información

IN34A - Optimización

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

Computación 1. Representación Interna de Números

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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]

Expresiones y sentencias

Arquitectura de Computadoras

Práctica 1 - Representación de la información

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Los tipos de datos primitivos

TIPOS DE DATOS MYSQL

TIPOS DE DATOS POSTGRESQL 8.4.8

Fundamentos de Programación. El Sistema de Numeración Binario. Fundamentos de Programación. Página 02.0 de 44

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java. Introducción a la Programación Orientada a Objetos

APUNTES DE CATEDRA: SISTEMAS DE NUMERACION - REPRESENTACION INTERNA DE NUMEROS Y CARACTERES

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación en Lenguaje C

Aritmética de Enteros y

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Aritmética de Enteros

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

Expresiones y sentencias

TIPOS DE DATOS (VARIABLES) EN JAVA. TIPOS PRIMITIVOS (INT, BOOLEAN, ETC.) Y OBJETO (STRING, ARRAY, ETC.) (CU00621B)

Operadores aritméticos. / División operando enteros o reales si operandos son entero resultado es entero. Resto de caso resultado real

Lección 2 Introducción al lenguaje C

BLOQUE V. CONTROL Y PROGRAMACIÓN DE SISTEMAS AUTOMÁTICOS

BLOQUE V. CONTROL Y PROGRAMACIÓN DE SISTEMAS AUTOMÁTICOS

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

VARIABLES TIPOS FUNDAMENTALES

Cap 1: Operaciones en Datos

LOGICA DIGITAL ARITMETICA DE COMPUTADORAS ASPECTOS FUNDAMENTALES 1. FORMA DE REPRESENTAR LOS NUMEROS ( FORMATO BINARIO)

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato

TIPO DE DATO ABSTRACTO (TDA)

Complejidad computacional (Análisis de Algoritmos)

XDR: Estándar de Representación Externa de Datos

Representación de la información

Computación II. Introducción a Visual Basic

Análisis de algoritmos

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Transcripción:

como les va con las practicas?

Problemas NP-completos y Estructuras de datos básicas (representación de datos) mat-151 1

Una maquina de Turing Aceptation state

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state Una no-determinística

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state Una no-determinística

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state Una no-determinística

Una maquina de Turing Maquina de Turing Determinística, que acepta múltiplos de 3 en binario. Aceptation state Una no-determinística

Problemas P y NP 2

Problemas P y NP Problemas P se pueden solucionar en tiempo polinomial por una máquina de Turing determínistica. 2

Problemas P y NP Problemas P se pueden solucionar en tiempo polinomial por una máquina de Turing determínistica. Problemas NP (nondeterministic polynomial time) se pueden resolver en tiempo polinomial PERO por una maquina de Turing no determinística, si alguien nos da una solución, certificado o testigo polinómico, se puede comprobar si es solución del problema en tiempo polinomial. Ejemplo: Existe un subconjunto de { 7, 3, 2, 5, 8} tal que su suma es 0?, cuantos subconjuntos debemos de probar? 2

Problemas P y NP Problemas P se pueden solucionar en tiempo polinomial por una máquina de Turing determínistica. Problemas NP (nondeterministic polynomial time) se pueden resolver en tiempo polinomial PERO por una maquina de Turing no determinística, si alguien nos da una solución, certificado o testigo polinómico, se puede comprobar si es solución del problema en tiempo polinomial. Ejemplo: Existe un subconjunto de { 7, 3, 2, 5, 8} tal que su suma es 0?, cuantos subconjuntos debemos de probar? Problemas NP-completos los más dificiles de los NP, no es posible encontrar un algoritmo mejor que simplemente realizar una búsqueda exhaustiva. Si cualquier problema NP-completo se puede resolver en tiempo polinomial, entonces todos los problemas NP-completos se pueden resolver en tiempo polinomial. 2

Problemas P y NP Problemas P se pueden solucionar en tiempo polinomial por una máquina de Turing determínistica. Problemas NP (nondeterministic polynomial time) se pueden resolver en tiempo polinomial PERO por una maquina de Turing no determinística, si alguien nos da una solución, certificado o testigo polinómico, se puede comprobar si es solución del problema en tiempo polinomial. Ejemplo: Existe un subconjunto de { 7, 3, 2, 5, 8} tal que su suma es 0?, cuantos subconjuntos debemos de probar? Problemas NP-completos los más dificiles de los NP, no es posible encontrar un algoritmo mejor que simplemente realizar una búsqueda exhaustiva. Si cualquier problema NP-completo se puede resolver en tiempo polinomial, entonces todos los problemas NP-completos se pueden resolver en tiempo polinomial. No se sabe si los problemas NP-completos son tratables, si es NP-completo o P, se puede demostrar por reducción. 2

Reducción 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. Tenemos un problema de decisión B, diferente a A, que sabemos cómo resolver en tiempo polinomial. 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. Tenemos un problema de decisión B, diferente a A, que sabemos cómo resolver en tiempo polinomial. Conocemos un procedimiento que transforma cualquier instancia de A en una instancia de B con las características siguientes: 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. Tenemos un problema de decisión B, diferente a A, que sabemos cómo resolver en tiempo polinomial. Conocemos un procedimiento que transforma cualquier instancia de A en una instancia de B con las características siguientes: La transformación toma tiempo polinomial. 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. Tenemos un problema de decisión B, diferente a A, que sabemos cómo resolver en tiempo polinomial. Conocemos un procedimiento que transforma cualquier instancia de A en una instancia de B con las características siguientes: La transformación toma tiempo polinomial. Las respuestas son las mismas. Esto es, la respuesta de es si si y solo si la respuesta para es si. 3

Reducción Tenemos un problema de decisión A, que no sabemos si se puede resolver en tiempo polinomial. Llamamos a la entrada a un problema particular una instancia del problema. Tenemos un problema de decisión B, diferente a A, que sabemos cómo resolver en tiempo polinomial. Conocemos un procedimiento que transforma cualquier instancia de A en una instancia de B con las características siguientes: La transformación toma tiempo polinomial. Las respuestas son las mismas. Esto es, la respuesta de es si si y solo si la respuesta para es si. Nos da una forma para solucionar A en tiempo polinomial. 3

Reducción 4

Reducción Suponemos tener un problema A para el que sabemos que no hay solución posible en tiempo polinomial. 4

Reducción Suponemos tener un problema A para el que sabemos que no hay solución posible en tiempo polinomial. Suponemos que tenemos una reducción polinomial para transformar todas las instancias de A en las de otro problema B. 4

Reducción Suponemos tener un problema A para el que sabemos que no hay solución posible en tiempo polinomial. Suponemos que tenemos una reducción polinomial para transformar todas las instancias de A en las de otro problema B. Podemos probar por contradicción que no existe un algoritmo polinomial para B. 4

Reducción Suponemos tener un problema A para el que sabemos que no hay solución posible en tiempo polinomial. Suponemos que tenemos una reducción polinomial para transformar todas las instancias de A en las de otro problema B. Podemos probar por contradicción que no existe un algoritmo polinomial para B. En caso de existir, podríamos probar que hay un algoritmo polinomial para A. 4

Problema del vendedor viajero (TSP) Dado un número de ciudades y los costos de ir de una ciudad a otra, cuál es el viaje redondo de menor costo que visita cada ciudad una sola vez y regresa a la ciudad de origen? La solución más directa seria intentar todas las permutaciones (combinaciones ordenadas) y ver cuál es la más barata (utilizando búsqueda de fuerza bruta). Dado que el número de permutaciones es n!, obviamente la solución es NO práctica. appletviewer AppAgenteViajero.htm 5

TSP El TSP es uno de los problemas más intensamente estudiados en matemáticas computacionales y hasta ahora no se ha encontrado un método de solución para el caso general. Una solución resolvería el asunto de los problemas P vs. NP y les daría un premio de $1,000,000 del Clay Mathematics Institute. TSP info en http://www.tsp.gatech.edu/index.html 6

Tipos de datos 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) boolean = {false, true} 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) boolean = {false, true} integer = {..., -1, 0, 1,... } 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) boolean = {false, true} integer = {..., -1, 0, 1,... } real = {...,-1.0,..., 0.0,..., 1.0,...} 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) boolean = {false, true} integer = {..., -1, 0, 1,... } real = {...,-1.0,..., 0.0,..., 1.0,...} character = { \0\,..., a,..., z,..., \255 } 7

Tipos de datos uno de los conceptos fundamentales de cualquier lenguaje de programación. es un conjunto de valores y operaciones en los valores. conjunto de valores, e.g. el tipo entero puede corresponder al conjunto {...,-1,0,1,...} que presentan un comportamiento uniforme ante un conjunto de operaciones como suma, multiplicación, comparación,... e.g. el tipo {13,naranja, z } sería un tipo inusual... ( el naranja es más chico que z?) boolean = {false, true} integer = {..., -1, 0, 1,... } real = {...,-1.0,..., 0.0,..., 1.0,...} character = { \0\,..., a,..., z,..., \255 } colors, months, etc... 7

Tipos de datos 8

Tipos de datos La memoria de una computadora está organizada en unidades llamadas bytes. 8

Tipos de datos La memoria de una computadora está organizada en unidades llamadas bytes. En la mayor parte de las arquitecturas, un byte (octeto) está formado por ocho bits. Cada bit toma valores de 1 o 0. 8

Tipos de datos La memoria de una computadora está organizada en unidades llamadas bytes. En la mayor parte de las arquitecturas, un byte (octeto) está formado por ocho bits. Cada bit toma valores de 1 o 0. Cada octeto tiene una dirección única en la memoria, identificada por un número de 16, 32 o 64 bits, dependiendo de la máquina. 8

Tipos de datos La memoria de una computadora está organizada en unidades llamadas bytes. En la mayor parte de las arquitecturas, un byte (octeto) está formado por ocho bits. Cada bit toma valores de 1 o 0. Cada octeto tiene una dirección única en la memoria, identificada por un número de 16, 32 o 64 bits, dependiendo de la máquina. #536870911 #536870910 #536870909.... #2 #1 #0 Memoria de 512 Mb 8

Tipos de datos 9

Tipos de datos La unidad procesada por las instrucciones del código máquina, se llama una palabra (word). Hoy, en la mayoría de las computadoras, las palabras son de 32 o 64 bits. Las palabras son interpretadas como un número binario. una palabra de 32 bits puede representar valores enteros sin signo desde el 0 hasta el 2 32-1 o valores enteros con signo desde -2 31 a 2 31-1 9

Tipos de datos El tipo de datos define dos cosas: el número de octetos (8 bits) requeridos para representar el dato y la manera de usar estos octetos. Los tipos elementales en muchos lenguajes de programación son: enteros - int flotantes (reales) - float caracteres - char El rango/precisión de los tipos depende del número de bits que se utilicen para representarlos. 10

Tipos de datos En C++ el compromiso entre espacio y precisión se decide eligiendo entre los tipos int, long int, short int para enteros y entre float o double para números de punto flotante. No hay estándar sobre el tamaño que toman estos tipos y es dependiente del hardware, sin embargo C++ ofrece ciertas garantías: 11

Tipos de datos En C++ el compromiso entre espacio y precisión se decide eligiendo entre los tipos int, long int, short int para enteros y entre float o double para números de punto flotante. No hay estándar sobre el tamaño que toman estos tipos y es dependiente del hardware, sin embargo C++ ofrece ciertas garantías: 11

Tipos de datos Generalmente se piensa en el rango de valores que podremos almacenar en lugar de el número de octetos que tiene disponible el tipo. Para una máquina de 32 bits típica: 12

Tipos de datos Generalmente se piensa en el rango de valores que podremos almacenar en lugar de el número de octetos que tiene disponible el tipo. Para una máquina de 32 bits típica: Tipo Tamaño en bytes Valores char 1 [-128,127] short 2 [-32768,32767] int 4 [-2147483648, 2147483647] long 4 [-2147483648, 2147483647] float 4 [3.4x10-38, 3.4x10 38 ] double 8 [1.7x10-308, 1.7x10 308 ] long double 10 [3.4x10-4932, 3.4x10 4932 ] 12

Representación de números enteros (sin signo) el término entero se utiliza para referirse a un tipo de datos que representa un subconjunto finito de los enteros matemáticos. un tipo entero con n bits puede codificar 2 n números; por ejemplo un entero sin signo representa típicamente los valores no-negativos de 0 a 2 n -1. y si queremos representar números con signo? 13

Representación de números enteros (con signo) s a 1 bit n-1 bits 14

Representación de números enteros (con signo) s a 1 bit n-1 bits 14

Representación de números enteros (con signo) s a 1 bit n-1 bits 14

Representación de números enteros (con signo) s a 1 bit n-1 bits cómo sumar 3 + (-3) con esta representación? 14

Representación de números enteros (con signo) s a 1 bit n-1 bits cómo sumar 3 + (-3) con esta representación? Tenemos 14

Representación de números enteros (con signo) s a 1 bit n-1 bits cómo sumar 3 + (-3) con esta representación? Tenemos doble representación del cero! 14

Representación de números enteros (con signo) s a 1 bit n-1 bits cómo sumar 3 + (-3) con esta representación? Tenemos doble representación del cero! En el caso de enteros con signo, los enteros positivos se representan con n-1 bits (por el signo) y los enteros negativos se representan con su complemento a dos. C 2 (N) = 2 n-1 - N 14

Representación de números enteros (complemento a dos) Complemento a dos para 8-bits 15

Representación de números enteros (complemento a dos) signo Complemento a dos para 8-bits 0 1 1 1 1 1 1 1 = 127 0 0 0 0 0 0 1 0 = 2 0 0 0 0 0 0 0 1 = 1 0 0 0 0 0 0 0 0 = 0 1 1 1 1 1 1 1 1 = -1 1 1 1 1 1 1 1 0 = -2 1 0 0 0 0 0 0 1 = -127 1 0 0 0 0 0 0 0 = -128 15

Representación de números enteros (complemento a dos) 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque hay una correspondencia uno-a-uno con la representación de valores (representación única de cero) 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque hay una correspondencia uno-a-uno con la representación de valores (representación única de cero) porque la suma, resta y multiplicación no necesitan distinguir entre valores positivos y negativos. 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque hay una correspondencia uno-a-uno con la representación de valores (representación única de cero) porque la suma, resta y multiplicación no necesitan distinguir entre valores positivos y negativos. rango? 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque hay una correspondencia uno-a-uno con la representación de valores (representación única de cero) porque la suma, resta y multiplicación no necesitan distinguir entre valores positivos y negativos. rango? valores de -2 (n-1) a 2 (n-1) -1. 16

Representación de números enteros (complemento a dos) La aritmética de complemento a dos es conveniente porque hay una correspondencia uno-a-uno con la representación de valores (representación única de cero) porque la suma, resta y multiplicación no necesitan distinguir entre valores positivos y negativos. rango? valores de -2 (n-1) a 2 (n-1) -1. Ejercicio: cómo representamos 131 y -131 en un short? 16