Está en la página 1de 5

PARCIAL ANÁLISIS Y DISEÑO DE ALGORITMOS

CÓDIGO:
NOMBRES: __manuel sebastian chitiva rodriguez____________________________________________
FECHA: 13 de mayo de 2021

1. EXPLIQUE EN QUÉ CONSISTE EL PROBLEMA DE LA DILIGENCIA, EXPLIQUE LA SOLUCIÓN


MÁS ÓPTIMA.

el problema de las diligencias consiste en buscar el camino mas barato o con menos costo desde un estado
inicial, en este caso A, hasta un final, J:

RTA:A-C-E-H-J

2. ¿QUÉ ES UN ALGORITMO VORAZ?, DE UN EJEMPLO Y EXPLIQUE UN CASO DE APLICACIÓN

Los algoritmos codiciosos suelen ser simples. Se utilizan principalmente para resolver
problemas de optimización, como encontrar el mejor orden para procesar un conjunto de tareas
a través de una computadora, encontrar la ruta más pequeña de gráficos, etc. Generalmente, los
elementos involucrados son:

- Un conjunto o lista de candidatos (tareas a procesar, vértices del grafo, etc);


- Un conjunto de decisiones ya tomadas (candidatos ya escogidos);
- Una función que determina si un conjunto de candidatos es una solución al problema (aunque
no tiene por qué ser la óptima);
- Una función que determina si un conjunto es completable, es decir, si añadiendo a este
conjunto nuevos candidatos es posible alcanzar una solución al problema, suponiendo que esta
exista;
- Una función de selección que escoge el candidato aún no seleccionado que es más
prometedor;
- Una función objetivo que da el valor/coste de una solución (tiempo total del proceso, la
longitud del camino, etc) y que es la que se pretende maximizar o minimizar;

Para resolver el problema de optimización, debemos encontrar un conjunto de candidatos


para optimizar la función objetivo. El engorroso algoritmo se ejecuta paso a paso.
Inicialmente, el conjunto de candidatos está vacío. Luego, en cada paso, intente usar la
función de selección para agregar los mejores candidatos que aún no han sido
seleccionados al grupo. Si el conjunto de resultados está incompleto, el candidato será
rechazado y no se considerará en el futuro. De lo contrario, se unirá al grupo del candidato
seleccionado y permanecerá en ese grupo en todo momento.

Después de cada combinación, compruebe si el conjunto de resultados es la solución al


problema. Si la solución encontrada es siempre óptima, entonces el algoritmo codicioso es
correcto. El esquema general del algoritmo codicioso es:

funcion voraz(C:conjunto):conjunto
{ C es el conjunto de todos los candidatos }
S <= vacio { S es el conjunto en el que se construye la solucion}
mientras ¬solucion(S) y C <> vaciohacer
x <= el elemento de C que maximiza seleccionar(x)
C <= C \ {x}
si completable(S U {x}) entonces S <= S U {x}
si solucion(S)
entonces devolver S
si no devolver no hay solucion

El nombre voraz proviene de que, en cada paso, el algoritmo escoge el mejor "pedazo" que es
capaz de "comer" sin preocuparse del futuro. Nunca deshace una decisión ya tomada: una vez
incorporado un candidato a la solución permanece ahí hasta el final; y cada vez que un candidato
es rechazado, lo es para siempre.

ejemplo:

Se desea pagar una cantidad de dinero a un cliente empleando el menor número posible de
monedas. Los elementos del esquema anterior se convierten en:

● candidato: conjunto finito de monedas de, por ejemplo, 1, 5, 10 y 25 unidades, con una
moneda de cada tipo por lo menos;
● solución: conjunto de monedas cuya suma es la cantidad a pagar;
● completable: la suma de las monedas escogidas en un momento dado no supera la
cantidad a pagar;
● función de selección: la moneda de mayor valor en el conjunto de candidatos aún no
considerados;
● función objetivo: número de monedas utilizadas en la solución.

3. ¿EN QUÉ CONSISTE LA PROGRAMACIÓN DINÁMICA?

Por lo general, para resolver un problema complejo, las personas tienden a descomponerse en
subproblemas más pequeños, luego resuelven el último subproblema (puede recurrir a la
nueva subdivisión) y luego combinan las soluciones obtenidas para calcular la solución
inicial del problema. problema. La división natural del problema puede resultar en un gran
número de subejemplos idénticos. Si todos los problemas se resuelven sin considerar una
posible duplicación, el algoritmo será ineficaz. Por otro lado, si cada instancia diferente se
resuelve solo una vez y se retienen los resultados, el algoritmo obtenido será mejor.

Esta es la idea de la programación dinámica: no calcule lo mismo dos veces, generalmente


use la tabla de resultados para resolver los subejemplos. La programación dinámica es un
enfoque de abajo hacia arriba. Resuelva primero el subejemplo más pequeño y, por lo tanto,
el más simple. Combinando las soluciones, se pueden obtener continuamente soluciones de
muestra más grandes hasta que se alcanza la muestra original.

4. REALICE UN CUADRO COMPARATIVO ENTRE LA PROGRAMACIÓN DINÁMICA Y LA


PROGRAMACIÓN RECURSIVA.

PROGRAMACIÓN DINÁMICA PROGRAMACIÓN RECURSIVA

acelera el procesamiento, ya que se usan Soluciona problemas recurrentes


referencias que fueron previamente
calculadas.

Se necesita mucha memoria para almacenar Son programas cortos.


el resultado calculado de cada subproblema

Si se tiene memoria limitada para ejecutar el código y no es preocupante la velocidad de


procesamiento, se puede usar la recursividad. Por ejemplo, si se está desarrollando una
aplicación móvil, la memoria es muy limitada para ejecutar la aplicación.

Si se desea que el programa se ejecute más rápido y no se tienen restricciones de memoria,


es preferible utilizar la programación dinámica.

5. ¿QUE SE ENTIENDE POR COMPLEJIDAD COMPUTACIONAL?, DE UN EJEMPLO

La teoría de la complejidad computacional es parte de la teoría computacional, que estudia


los recursos necesarios para resolver problemas en el proceso de computación. Si es difícil
de realizar, el cálculo es complicado. En este caso, podemos definir la complejidad
computacional como la cantidad de recursos necesarios para realizar el cálculo. Por lo
tanto, los cálculos más difíciles requerirán más recursos que los menos difíciles. Los
recursos generalmente estudiados son el tiempo (el número de pasos de ejecución del
algoritmo para resolver el problema) y el espacio (la cantidad de memoria utilizada para
resolver el problema). Los algoritmos que resuelven problemas pero que tardan mucho en
resolverse son casi inútiles. Asimismo, es posible que no se utilicen algoritmos que
requieran gigabytes de memoria. Puede agregar otros recursos a estos recursos, como la
cantidad de procesadores necesarios para resolver el problema en paralelo. Si el cálculo
necesita más Una vez dijimos que era más complicado Llamamos complejidad del tiempo.
Por otro lado, si Un tipo de cálculo requiere más espacio de almacenamiento que otro tipo
de cálculo, decimos que es más complicado, en este caso En el caso hablamos de
complejidad espacial. esto es Por supuesto, el tiempo necesario para proceder Menos
cálculos realizados en computadoras modernas De lo necesario para realizar el mismo
cálculo Máquinas en los últimos diez años, por supuesto, el tiempo de las máquinas de
próxima generación se reducirá en gran medida

Ejemplo:

i = 1;
while(i<n){
i = i*2
}
i va incrementando su valor en base a la potencia de 2
2^0, 2 ^1, 2^2, 2^3, 2^4, 2^5, ... , 2^x

por lo tanto, llegara al punto en que:

𝑥
2^x > n, o sea (i>n) → 𝑙𝑜𝑔22 > 𝑙𝑜𝑔2𝑛 →𝑙𝑜𝑔22 > 𝑙𝑜𝑔2𝑛 →

𝑙𝑜𝑔22 se cancela por lo tanto la complejidad sserá del:

𝑙𝑜𝑔2𝑛

6. ¿A QUÉ MÉTODO DE ORDENAMIENTO SE LE ATRIBUYE EL DICHO “DIVIDE Y VENCERÁS” ?,


EXPLIQUE SU FUNCIONAMIENTO.

El método está basado en la resolución recursiva de un problema dividiéndolo en dos o más


subproblemas de igual tipo o similar. El proceso continúa hasta que éstos llegan a ser lo
suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a
cada uno de los subproblemas se combinan para dar una solución al problema original.
7. CONTESTE (F) O (V) SEGÚN CORRESPONDA.

A. UNA CARACTERÍSTICA DE LA PROGRAMACIÓN DINÁMICA ES NO REPETIR O


REPROCESAR DATOS DENTRO DE NUESTRO ALGORITMO. ( Verdadero )

B. UNA DESVENTAJA CLARA PARA UN ALGORITMO VORAZ ES QUE SE INCREMENTA EL


TIEMPO DE EJECUCIÓN DEL ALGORITMO Y POR ENDE SU COMPLEJIDAD. ( falso )

8. ¿EXPLIQUE EN QUE CONSISTE EL MÉTODO HEAPSORT Y POR QUE SE CARACTERIZA?

También podría gustarte