Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CÓDIGO:
NOMBRES: __manuel sebastian chitiva rodriguez____________________________________________
FECHA: 13 de mayo de 2021
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
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:
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.
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.
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
𝑥
2^x > n, o sea (i>n) → 𝑙𝑜𝑔22 > 𝑙𝑜𝑔2𝑛 →𝑙𝑜𝑔22 > 𝑙𝑜𝑔2𝑛 →
𝑙𝑜𝑔2𝑛