Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


taller de estudio para programacion, Apuntes de Programación Lineal

nasnwapdewdn wkdnqwudns xjuqwbdasm xqwdnm wm

Tipo: Apuntes

2010/2011

Subido el 15/11/2022

andrea-mora-44
andrea-mora-44 🇨🇴

2 documentos

1 / 3

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Taller dividir y conquistar TPRO Nov 7-2022 Profesor Raúl Chaparro
1. Dos amigos matan el tiempo de espera en la cola del cine jugando a un juego muy sencillo: uno de ellos
piensa un número natural positivo y el otro debe adivinarlo preguntando solamente si es menor o igual que
otros números. Diseñar un algoritmo eficiente para adivinar el número.
2. Tenemos 3 algoritmos para solucionar un problema. ¿Cuál nos conviene más, justificar calculando la
complejidad de los respectivos algoritmos?
a. El algoritmo B resuelve el problema (de tamaño n) dividiéndolo en 9 sub-problemas de tamaño n/3
resolviendo cada sub-problema de forma recursiva y combinando las soluciones en n2.
b. El algoritmo A resuelve el problema (de tamaño n) dividiéndolo en 5 sub-problemas de tamaño n/2 ,
resolviendo cada sub-problema de forma recursiva, y combinando las soluciones en tiempo lineal.
c. El algoritmo C resuelve el problema (de tamaño n) eligiendo un sub-problema de tamaño n -
1 en O(n), y luego resolviendo recursivamente ese sub-problema.
3. Implementar, usando dividir y conquistar, una función que, dado un arreglo y su longitud, determine si el
arreglo esta ordenado. Calcular y justificar la complejidad.
4. Usando la Estrategia dividir y conquistar, construya un algoritmo de orden O(nlogn). Tal que dado un
arreglo de n números enteros devuelva True o False según si existe algún elemento que aparezca más de la
mitad de las veces. Justificar el orden de la solución. Ejemplos:
aparCmas [4, 1, 2, 1, 2, 3,4,5,] = False
aparCmas [1, 1,1, 2, 2,8] = False
aparCmas [5, 7, 9, 5, 5, 5] = True
aparCmas [7] = True
Nota: Hacerlo sin ordenar el arreglo.
5. Supongamos que tenemos un arreglo A con 2n+1 elementos. Además, supongamos, que es de la forma
A=[i1,i2,i3,i2n, p1,p2,p3,p2n] es decir los i´s son números impares y los p´s son números pares. Diseñar
e implementar un algoritmo dividir y conquistar talque el arreglo resulte [i1,p2,i3,p3i2n, p2n]. Es decir,
resulten intercalados. No utilizar espacio adicional. Ejemplo:
intercala [3,1,3,11,21,55,3,13 ,2,6,8,30,40,0,66,20] = [3,2,1,6,3,8,11,30,21,40,55,0,3,66,13,20]
¿Cual es la complejidad del algoritmo?
6. Diseñar e implementar un algoritmo usando Dividir y Conquistar, tal que dado un arreglo, de enteros: sin
elementos repetidos, con todos los elementos ordenados excepto uno. Nos devuelva el elemento del
desorden. Calcule la complejidad.
7. Diseñar e implementar un algoritmo con la estrategia Dividir y Conquistar: que calcule la parte entera de la
raíz cuadrada de un número entero n en tiempo O(logn). Por ejemplo: rizC 36=6, rizC 30 =5, rizC
50=9.
8. Se quiere implementar MergeSort pero, en vez de dividir en dos partes el arreglo, dividirlo en tres, llamando
recursivamente al algoritmo para cada una de las partes y luego uniéndolas.
a. Suponiendo que la mezcla de las tres partes se realiza en tiempo lineal, calcular el orden del
algoritmo.
b. Si en vez de dividir en tres partes, se dividiera el arreglo en n, siendo n la cantidad de elementos del
arreglo ¿a qué otro algoritmo de ordenamiento se asemeja esta implementación? ¿Cuál es el orden de
dicho algoritmo?
pf3

Vista previa parcial del texto

¡Descarga taller de estudio para programacion y más Apuntes en PDF de Programación Lineal solo en Docsity!

Taller dividir y conquistar TPRO Nov 7- 2022 Profesor Raúl Chaparro

1. Dos amigos matan el tiempo de espera en la cola del cine jugando a un juego muy sencillo: uno de ellos piensa un número natural positivo y el otro debe adivinarlo preguntando solamente si es menor o igual que otros números. Diseñar un algoritmo eficiente para adivinar el número. 2. Tenemos 3 algoritmos para solucionar un problema. ¿Cuál nos conviene más, justificar calculando la complejidad de los respectivos algoritmos? a. El algoritmo B resuelve el problema (de tamaño n ) dividiéndolo en 9 sub-problemas de tamaño n/ resolviendo cada sub-problema de forma recursiva y combinando las soluciones en n^2. b. El algoritmo A resuelve el problema (de tamaño n ) dividiéndolo en 5 sub-problemas de tamaño n/2 , resolviendo cada sub-problema de forma recursiva, y combinando las soluciones en tiempo lineal. c. El algoritmo C resuelve el problema (de tamaño n ) eligiendo un sub-problema de tamaño n - 1 en O( n ), y luego resolviendo recursivamente ese sub-problema. 3. Implementar, usando dividir y conquistar, una función que, dado un arreglo y su longitud, determine si el arreglo esta ordenado. Calcular y justificar la complejidad. 4. Usando la Estrategia dividir y conquistar, construya un algoritmo de orden O( n log n ). Tal que dado un arreglo de n números enteros devuelva True o False según si existe algún elemento que aparezca más de la mitad de las veces. Justificar el orden de la solución. Ejemplos: aparCmas [4, 1, 2, 1, 2, 3,4,5,] = False aparCmas [1, 1,1, 2, 2,8] = False aparCmas [ 5 , 7 , 9 , 5 , 5 , 5 ] = True aparCmas [ 7 ] = True Nota: Hacerlo sin ordenar el arreglo. 5. Supongamos que tenemos un arreglo A con 2 n+1^ elementos. Además, supongamos, que es de la forma A=[i1,i2,i3,…i 2 n, p1,p2,p3,…p 2 n] es decir los i´s son números impares y los p´s son números pares. Diseñar e implementar un algoritmo dividir y conquistar talque el arreglo resulte [i1,p2,i3,p3…i 2 n, p 2 n]. Es decir, resulten intercalados. No utilizar espacio adicional. Ejemplo: intercala [3,1,3,11, 21 , 55 ,3, 13 ,2, 6 ,8,3 0 , 40 ,0,66,20] = [3,2,1,6,3,8,11,3 0 ,21,40,55,0,3,66,13,20] ¿Cual es la complejidad del algoritmo? 6. Diseñar e implementar un algoritmo usando Dividir y Conquistar, tal que dado un arreglo, de enteros: sin elementos repetidos, con todos los elementos ordenados excepto uno. Nos devuelva el elemento del desorden. Calcule la complejidad. 7. Diseñar e implementar un algoritmo con la estrategia Dividir y Conquistar: que calcule la parte entera de la raíz cuadrada de un número entero n en tiempo O(log n ). Por ejemplo: rizC 36 =6, rizC 30 =5, rizC 50 =9. 8. Se quiere implementar MergeSort pero, en vez de dividir en dos partes el arreglo, dividirlo en tres, llamando recursivamente al algoritmo para cada una de las partes y luego uniéndolas. a. Suponiendo que la mezcla de las tres partes se realiza en tiempo lineal, calcular el orden del algoritmo. b. Si en vez de dividir en tres partes, se dividiera el arreglo en n , siendo n la cantidad de elementos del arreglo ¿a qué otro algoritmo de ordenamiento se asemeja esta implementación? ¿Cuál es el orden de dicho algoritmo?

c. Dado lo obtenido en los puntos anteriores ¿tiene sentido implementar MergeSort con k separaciones, para k > 2? d. Considere el problema de encontrar el mínimo y el máximo (al mismo tiempo) de una lista de n elementos. Dar un algoritmo Dividir y Conquistar que resuelva este problema y analice el tiempo de ejecución.

9. Dado un arreglo A de números enteros positivos se desea ordenarlo de forma tal que todos los números pares se ubiquen en la primera parte de la lista y, todos los números impares en la segunda parte de la lista. Los números pares deben quedar ordenados de mayor a menor entre sí y, los números impares deben quedar ordenados entre sí de menor a mayor. Por ejemplo, para la lista A = [4 ; 3 ; 25 ; 7 ; 6 ; 16 ; 12 ; 0] quedará ordenado de la siguiente manera: [16 ; 12 ; 6 ; 4 ; 0 ; 3 ; 7 ; 25]. Dar un algoritmo Dividir y Conquistar completo que ordene un arreglo de la forma descripta, tal que su tiempo de ejecución pertenezca a O( n log n ), donde n es la cantidad de elementos del arreglo. Justifique adecuadamente el análisis del tiempo de ejecución de su algoritmo. 10. Dado una lista C de números enteros distintos, y un número entero S, se pide:  Diseñar un algoritmo de complejidad O(n log n) que determine si existen o no dos elementos de C tales que su suma sea exactamente S.  Suponiendo ahora ordenada la lista C, diseñar un algoritmo que resuelva en tiempo O(n) el mismo problema. 11. Dos amigos matan el tiempo de espera en la cola del cine jugando a un juego muy sencillo: uno de ellos piensa un número natural positivo y el otro debe adivinarlo preguntando solamente si es menor o igual que otros números. Diseñar un algoritmo eficiente para adivinar el número. 12. Mr. Scrooge ha cobrado una antigua deuda, recibiendo una bolsa con n monedas de oro. Su olfato de usurero le asegura que una de ellas es falsa, pero lo único que la distingue de las demás es su peso, aunque no sabe si este es mayor o menor que el de las otras. Para descubrir cuál es la falsa, Mr. Scrooge solo dispone de una balanza con dos platillos para comparar el peso de dos conjuntos de monedas. En cada pesada lo único que puede observar es si la balanza queda equilibrada, si pesan más los objetos del platillo de la derecha o si pesan más los de la izquierda. a. Demostrar que, en el caso peor, y para n≥ 3, hacen falta un mínimo de log3(2n) pesadas para determinar cuál es la moneda falsa y si pesa más o menos que las auténticas. b. Diseñar un algoritmo eficiente para encontrar la moneda falsa y decidir si pesa más o menos que las auténticas. 13. Dado un vector V [1…n] de elementos que se pueden ordenar, se desea hallar los m elementos más pequeños, donde m es mucho más pequeño que n. ¿Qué es mejor, ordenar V [1…n] y después coger los m primeros elementos V [1::m], ir seleccionando el primer elemento, después el segundo, y así hasta el elemento m-eximo, o utilizar algún otro método? Generalizar el mejor método para, fijada una posición p del vector, hallar los m elementos que ocuparán en el vector ordenado las posiciones p, p + 1,…., p + m-1. 14. Juan tiene una fantástica colección con n canicas de diversos tamaños y colores, y quiere averiguar si algún color determinado domina la colección, es decir, si existe algún color tal que más de n/2 canicas sean de dicho color. Desarrollar un algoritmo que en tiempo O(n log n) decida si existe tal color y en caso afirmativo diga cuál es. BONO 1