ada2012-listaejercicios

9
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS CURSO: ANÁLISIS Y DISEÑO DE ALGORITMOS DOCENTE: Dr. César A. Beltrán Castañón Arequipa, Julio de 2012. LISTA DE EJERCICIOS Pregunta 1. CLRS 2.3-7 Describa un algoritmo con consumo de tiempo O(n lg n) que, dados un conjunto S de n enteros y otro entero x, determina si existen o no dos elementos en S cuya suma es exactamente x. Solucion: En primer lugar, odenamos los elementos del array usando un algoritmo de ordenación como el merge sort el cual se ejecuta en tiempo O(n lg n). Después podemos encontrar si dos que existen en S cuya suma es x. Para cada elemento s[i] en S establecemos y=s[i]-x. Ahora usamos la busqueda binaria, y averiguamos si el elemento y existe en S. Si es asi devuelve a[i] y “y”, si no se encuentra “y” para cualquier s[i], entonces devuelve que no existe ningun par de elementos. Cada busqueda binaria toma tiempo O(lg n) y hay un n elementos a buscar. Por lo tanto, el tiempo total para este procedimiento es de T(n) = Θ(n lg n) +Θ(n lg n) donde el primer termino proviene de a ordenación y el segundo termino viene de realizar la busqueda binaria para cada uno de los n elementos. Por lo tanto, el tiempo total de ejecución es T(n) = Θ(n lg n). Un procedimiento alternativo para encontrar los dos elemntos de la matriz ordenada es la siguiente: SUM-TO-X(A) 1 Merge-Sort(S) 2 i ← 1 3 j ← length(S) 4 while i = j

Upload: karen-giannella-apaza

Post on 10-Nov-2015

212 views

Category:

Documents


0 download

DESCRIPTION

analisis y diseño de algoritmos

TRANSCRIPT

UNIVERSIDAD NACIONAL DE SAN AGUSTN

UNIVERSIDAD NACIONAL DE SAN AGUSTNESCUELA PROFESIONAL DE INGENIERA DE SISTEMASCURSO: ANLISIS Y DISEO DE ALGORITMOSDOCENTE: Dr. Csar A. Beltrn CastanArequipa, Julio de 2012.LISTA DE EJERCICIOSPregunta 1. CLRS 2.3-7Describa un algoritmo con consumo de tiempo O(n lg n) que, dados un conjunto S de n enteros y otro entero x, determina si existen o no dos elementos en S cuya suma es exactamente x.Solucion: En primer lugar, odenamos los elementos del array usando un algoritmo de ordenacin como el merge sort el cual se ejecuta en tiempo O(n lg n).Despus podemos encontrar si dos que existen en S cuya suma es x. Para cada elemento s[i] en S establecemos y=s[i]-x.Ahora usamos la busqueda binaria, y averiguamos si el elemento y existe en S. Si es asi devuelve a[i] y y, si no se encuentra y para cualquier s[i], entonces devuelve que no existe ningun par de elementos.Cada busqueda binaria toma tiempo O(lg n) y hay un n elementos a buscar. Por lo tanto, el tiempo total para este procedimiento es de T(n) = (n lg n) +(n lg n) donde el primer termino proviene de a ordenacin y el segundo termino viene de realizar la busqueda binaria para cada uno de los n elementos. Por lo tanto, el tiempo total de ejecucin es T(n) = (n lg n).Un procedimiento alternativo para encontrar los dos elemntos de la matriz ordenada es la siguiente:SUM-TO-X(A)1 Merge-Sort(S)2i 13 j length(S)4 while i = j5 if S[i] + S[j] == x6 return S[i], S[j]7 if S[i] + S[j] < x8then i i + 19 if S[i] + S[j] > x10 then j j - 1Se ha establecido dos contadores en los dos extremos del array. Si su suma es x, devuelve esos valores. Si la suma es menor a x, necesitamos una suma grande por lo que incrementamos el contador de la parte inferior. Si la suma es mayor que x, disminuimos en el contador superior. El bucle hace (n) iteraciones, ya que en cada iteracin que ya sea aumentar i o disminuir j para j-i s siempre esta disminuyendo y terminara cuando j-i