Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

Relaciones de recurrencia
Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Estructura de Datos Hugo Araya Carrasco Hugo Araya Carrasco.
Complejidad de Algoritmos
Lenguajes de programación
ALGORITMOS DE ORDENAMIENTO
Paricial IV Ing. Esmeralda Elizabeth Rodríguez Rodríguez
Estructuras de Control
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 1: Consideraciones acerca de la eficiencia.
Unidad 4: Análisis de algoritmos (parte II)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS NOTA IMPORTANTE: Para complementar.
Programación 1 Introducción
ALGORITMOS 2 DIGITALES II
¿Qué es un algoritmo? “(del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de operaciones.
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
Tema 3. Optimización de Código
IINTRODUCCION A LA CIENCIA DE LA COMPUTACION Y A LA PROGRAMACION
Fundamentos de Programación
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Programación de Computadores
Semana 5 Subprogramas..
Ordenamiento, Heapsort y Colas de prioridad
Análisis de Algoritmos
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Análisis de Algoritmos
Introducción al análisis de algoritmos
Algoritmos.
Pertinencia de la enseñanza del cómputo paralelo en el currículo de las ingenierías. Proyecto PAPIME PE

Estructuras de Datos Arreglos.
(Organización y Manejo de Archivos)
Fundamentos de programación Organización de una computadora.
Material de apoyo Unidad 4 Estructura de datos
Divide y vencerás 1. Método general.
Análisis de algoritmos
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Estructura de Control Repeticiones(Loops) Ejercicios
4.  Métodos matemáticos.
Medianas y Estadísticas de Orden
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
Parte II. Algorítmica. 4. Programación dinámica.
1 Ordenamiento y estadísticas de orden Agustín J. González ELO 320: Estructura de Datos y Algoritmos.
Parte I. Estructuras de Datos.
Análisis y Diseño de Algoritmos
1 Ordenamiento en tiempo lineal y Estadísticas de orden Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem 2002.
Algoritmos de Ordenamiento y Complejidad
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
1 Análisis de algoritmos Generalidades Agustín J. González 1er. Sem
Parte I. Estructuras de Datos.
Capítulo 6. ANÁLISIS DE ALGORITMOS
Análisis de Algoritmos
Estructuras de control Resolución de problemas y algoritmos.
ELO3201 Análisis de Algoritmos (cont.) Agustín J. González ELO320 1º sem 2002.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Análisis de algoritmos Generalidades
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Elaboración de algoritmos usando lógica de programación
Introducción a los TADs
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
U11: Recursividad Otra manera de hacer bucles Dicen algunos pedagogos que conceptualmente mas sencilla.
PROGRAMACION DE APLICACIONES EN MEMORIA DEL COMPUTADOR = ALGORITMOS Y ESTRUCTURAS DE DATOS.
Solución a Ecuaciones de Recurrencia Dr. Rogelio Dávila Pérez División de Posgrado Universidad Autónoma de Guadalajara
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Ciclos condicionales y exactos Estructura de control de ciclos
Transcripción de la presentación:

Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos

Algoritmos en la computación Un algoritmo es un procedimiento computacional que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida Algoritmo Entrada Salida “Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado”

Algoritmos en la computación Un algoritmo es un procedimiento computacional que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida Algoritmo Entrada Salida “Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado” Entrada/Salida especifican los problemas

Algoritmos en la computación Problema 1: Cambio de monedas Entrada: A={a 1, a 2, …, a n } tal que a 1 <a 2 < …<a n, P  N Salida: tal que y es mínimo

Algoritmos en la computación Problema 2: ??? Entrada: n  Z + Salida: 1, si n=2 1, si n=1 1, si n>2  n mod i  0  i  {2, …., n-1} 0, si n>2   x | n mod x=0  x  {2, …., n-1}

Algoritmos en la computación Problema 3: ??? Entrada: S= Salida: una permutación de S, S’= tal que a 1 ’<a 2 ’<…,<a n ’

Algoritmos en la computación Instancia de un problema (instancia del problema) Una instancia es una entrada válida para el algoritmo Algoritmo de ordenamiento

Algoritmos en la computación Correctitud Se dice que un algoritmo es correcto, si para cada instancia, el algoritmo termina con la salida correcta Algoritmo Entrada 1 Salida 1 Entrada 2 Entrada n Salida 2 Salida n

Algoritmos en la computación primo(int n){ if (n==1) return 1; if (n%2==0) return 0; else return 1; } Para cada instancia, el algoritmo termina con la salida correcta ¿Es el algoritmo primo correcto?

Algoritmos en la computación primo(int n){ if (n==1) return 1; else{ int c=0; for (int i=2; i<n; i++) if (n%i==0) c++; if (c==0) return 1; else return 0; } Para cada instancia, el algoritmo termina con la salida correcta ¿Es el algoritmo primo correcto?

Algoritmos en la computación primo(int n){ if (n==1) return 1; else{ int c=0; for (int i=3; i<n; i++) if (n%i==0) c++; if (c==0) return 1; else return 0; } Para cada instancia, el algoritmo termina con la salida correcta ¿Es el algoritmo primo correcto?

Algoritmos en la computación Tipos de problemas solucionados utilizando algoritmos: Proyecto del genoma humano: Identificar genes en secuencias de ADN que llegan hasta los 10000pb. Se almacena la información observada hasta el momento en bases de datos y se analizan con algoritmos que debe ser eficientes Búsquedas en Internet: Dada la cantidad de información indexada, responder de forma correcta la solicitud de una búsqueda en Internet

Algoritmos en la computación Tipos de problemas solucionados utilizando algoritmos: Tratamiento de colisiones de objetos: Detectar una colisión entre dos cuerpos en un espacio 3D Búsquedas sobre videos: En un biblioteca, un usuario desea encontrar todos los videos donde aparezca JFK

Algoritmos en la computación Análisis de algoritmos Meta: Comparar algoritmos que resuelven un mismo problema Correctitud Eficiencia Tiempo Espacio Estructuras de datos utilizadas Modelo computacional El tipo y número de datos con los cuales trabaja (escalabilidad)

Análisis del algoritmo Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort Se recorre de derecha a izquierda buscando el lugar que debe ocupar

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort

Algoritmos en la computación Insertion sort A:

Algoritmos en la computación Insertion sort Desarrolle el algoritmo INSERTION-SORT(A) A:

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 Key=A[2]=3

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 Key=A[2]=3 i=1

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 Key=A[2]=3 i=0

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key A[1]=3

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2 i=2

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2 i=2

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2 i=1

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2 i=0

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 Key=A[3]=2 i=0

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=4 Key=A[4]=6 i=3

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=4 Key=A[4]=6 i=3

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=4 Key=A[4]=6 i=2

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=4 Key=A[4]=6 i=2

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=5 Key=A[5]=9 i=4

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=5 Key=A[5]=9 i=4

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=5 Key=A[5]=9 i=3

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=5 Key=A[5]=9 i=3

Algoritmos en la computación ¿Qué es hacer análisis de algoritmos? Calcular tiempo de computación Espacio (memoria) Analizar las estructuras de datos utilizadas Identificar el tipo y número de datos de entrada al algoritmo + medidas de análisis (tiempo de ejecución) medidas experimentales

Algoritmos en la computación ¿Qué es hacer análisis de algoritmos? Calcular tiempo de computación* Espacio (memoria) Analizar las estructuras de datos utilizadas Identificar el tipo y número de datos de entrada al algoritmo + medidas de análisis (tiempo de ejecución) medidas experimentales

Algoritmos en la computación primo(int n){ if (n==1) return 1; else{ int c=0; for (int i=2; i<n; i++) if (n%i==0) c++; if (c==0) return 1; else return 0; } ¿De qué depende la cantidad de operaciones básicas que realizará el algoritmo para un llamado específico?

Algoritmos en la computación El tiempo de computo depende del tamaño de la entrada, los tiempos serán diferentes si se ordenan 10 números que si se ordenan Además, es posible que para dos entradas de igual tamaño, el tiempo sea diferente. Esto depende, de qué tan ordenado ya se encontraba la secuencia de entrada

Algoritmos en la computación El tiempo de computo T de un algoritmo depende del tamaño de la entrada, T(n)=f(n), donde n es el tamaño de la entrada

Algoritmos en la computación El tiempo de computo T de un algoritmo depende del tamaño de la entrada, T(n)=f(n), donde n es el tamaño de la entrada T 1 (n)=3n 2 T 2 (n)=6n 3 por ejemplo, para n=100, se tiene: T 1 (n)=3*100 2 = T 2 (n)=6*100 3 =

Algoritmos en la computación El tiempo de computo T de un algoritmo depende del tamaño de la entrada, T(n)=f(n), donde n es el tamaño de la entrada T 1 (n)=3n 2 T 2 (n)=6n 3 por ejemplo, para n=100, se tiene: T 1 (n)=3*100 2 = T 2 (n)=6*100 3 = Operaciones primitivas Pasos Instrucciones

Algoritmos en la computación Note que los pasos ejecutados se calculan independientemente de la máquina y de la implementación

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  1 to length[A]c1c1 2 print A[j]c2c2

Algoritmos en la computación for j  1 to 3for (int j=1; j<=3; j++) j=1  j=2  j=3  j=4 

Algoritmos en la computación for j  1 to 3for (int j=1; j<=3; j++) j=1  j=2  j=3  j=4  La cantidad de comparaciones en un for es: cantidad de números válidos + 1

Algoritmos en la computación for j  1 to 3for (int j=1; j<=3; j++) j=1  j=2  j=3  j=4  La cantidad de comparaciones en un for es: cantidad de números válidos + 1 Cantidad de comparaciones: 3 + 1

Algoritmos en la computación for j  1 to n ¿Cuántas veces se repite?

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  1 to length[A]c1c1 n+1 2 print A[j]c2c2 n

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 ? 2 print A[j]c2c2 ?

Algoritmos en la computación for j  2 to 4for (int j=2; j<=4; j++) j=2  j=3  j=4  j=5  La cantidad de comparaciones en un for es: cantidad de números válidos + 1

Algoritmos en la computación for j  2 to 4for (int j=2; j<=4; j++) j=2  j=3  j=4  j=5  La cantidad de comparaciones en un for es: (4-2+1) + 1

Algoritmos en la computación for j  2 to 6for (int j=2; j<=6; j++) ???

Algoritmos en la computación for j  2 to n La cantidad de comparaciones en el for es:

Algoritmos en la computación for j  2 to n La cantidad de comparaciones en el for es: (n-2+1) + 1 = n

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 ??? 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 ??? 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Depende de qué tan ordenados se encuentran los datos en A

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Para cada j, se puede repetir una cantidad diferente de veces

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Sea t j, la cantidad de comparaciones que se hacen en el while para cada valor de j Por ejemplo, t 2,es un número que indica cuántas veces se cumple la condición cuando j=2

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Por ejemplo, t 2,es un número que indica cuántas veces se cumple la condición cuando j=2 Sea t j, la cantidad de comparaciones que se hacen en el while para cada valor de j

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 7 A[i+1]  keyc7c7

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 7 A[i+1]  keyc7c7 n-1

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 T(n)=???

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, cuánto vale t j ?

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 t 2 =?

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 t 3 =?

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, t j =1. T(n)=???

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 0 6 i  i-1c6c6 0 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, t j =1. T(n)=???

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el peor de los casos, cuánto vale t j ?

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 t 2 =?

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 t 2 =? i=1

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=2 t 2 =? i=0

Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key j=3 t 3 =?

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el peor de los casos, t j =j. T(n)=???

Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el caso promedio, se supone que se necesitan j/2 comparaciones, esto es, t j =j/2. T(n)=???

Algoritmos en la computación InstrucciónCosto 1 i=1c1c1 2 while i<=len(mat1)c2c2 3 j  1c3c3 4 while j<=len(mat2)c4c4 5 mat3[i][j]  mat1[i][j]+mat2[i][j]c5c5 6 j  j+1c6c6 7 i  i+1c7c7 Calcule el tiempo de computo para el algoritmo def programa1(mat1, mat2) # suponga que len(mat1)=len(mat2)=n

Algoritmos en la computación InstrucciónCosto 1 s  0 c1c1 2 i  1 c2c2 3 while i<=n c3c3 4 t  0 c4c4 5 j  1 c5c5 6 while j<=i c6c6 7 t  t+1 c7c7 8 j  j+1c8c8 9 s  s+tc9c9 10 i  i+1c 10 Calcule el tiempo de computo para el algoritmo def programa2(n)

Algoritmos en la computación InstrucciónCosto 1 i  1 c1c1 2 while i<=n c2c2 3 k  i c3c3 4 while k<=n c4c4 5 k  k+1 c5c5 6 k  1 c6c6 7 while k<=i c7c7 8 k  k+1c8c8 9 i  i+1c9c9 Calcule el tiempo de computo para el algoritmo def programa3(n)

Algoritmos en la computación Diseño de algoritmos Otras alternativas para el diseño de algoritmos son: Aproximación incremental Dividir y conquistar Programación dinámica Técnicas voraces

Algoritmos en la computación Dividir y conquistar Considera recursividad Dividir el problema en subproblemas Conquistar los subproblemas (solucionarlos recursivamente) Combinar las soluciones de los subproblemas para crear la solución al problema original

Algoritmos en la computación Merge Sort Dividir

Algoritmos en la computación Merge Sort Combinar

Algoritmos en la computación Merge sort Entrada: Dividir: Conquistar: a’ 1  a’ 2  …  a’ q y a’ q+1  a’ q+2  …  a’ n Combinar: si a’ 1  a’ q+1 y a’ 2 >a’ q+1 entonces sino …

Algoritmos en la computación Merge sort T(n)= 1n=1 Dividir(n) + Conquistar(n) + Combinar(n)

Algoritmos en la computación Merge sort T(n)= 1n= T(n/2) + nn>1 al resolver la recurrencia, T(n) = n lg n

Algoritmos en la computación Análisis de algoritmos Insertion sort y Merge sort Computador 1Computador instrucciones/seg10 6 instrucciones/seg Implementación 1(Insertion)Implementación 2(Merge) 2n 2 50n*lg n

Algoritmos en la computación Analisis de algoritmos Insertion sort y Merge sort Computador 1Computador instrucciones/seg10 6 instrucciones/seg Implementación 1(Insertion)Implementación 2(Merge) 2n 2 50n*lg n Tiempo 1(Insertion)Tiempo 2(Merge) 2(10 6 ) 2 /10 8 =20.000segs=5.56horas50*10 6 lg 10 6 /10 6 =1.000segs=16.67 mins Ordenar un arreglo de 10 6 números