Ejercicios tema 6

Anuncio
EJERCICIOS DE ALGORÍTMICA Y COMPLEJIDAD
VUELTA ATRÁS
Ejercicio 1.
Dado el conjunto siguiente de ítems:
Objeto
Peso
Valor
1
10
100
2
7
63
3
8
56
4
4
12
Se decide utilizar el algoritmo de vuelta atrás de la mochila para obtener la solución
óptima. Teniendo la mochila una restricción de peso de 16 kg.
1) Indicar cuantas soluciones existen
2) Indicar cuál es la solución óptima
3) Mostrar el árbol de decisiones que se construye durante la ejecución del algoritmo.
El estado se mostrara por un tupla de 4 números que tomarán los valores 0, para
indicar que el ítem no está incluido en la mochila, y 1 para indicar lo contrario.
Ejercicio 2.
Dado el algoritmo siguiente:
C: array (1..MAX) of Integer range 0..1;
procedure binario (m: Integer) is
begin
if m = 0 then
Imprimir (C);
else
C(m) := 0;
binario (m-1);
C(m) := 1;
binario (m-1);
end if;
end binario;
1) Comprobar que una llamada a “binario (3)” genera todas las posibles
combinaciones de números binarios de 3 dígitos de longitud.
2) ¿En general, cuántas llamadas al procedimiento se realizan con “binario (n)”?
3) Deduce la complejidad del algoritmo.
4) Modifica el algoritmo para que únicamente se calculen los números binarios de
longitud m que no contengan más de k dígitos a 1.
Ejercicio 3.
El siguiente algoritmo realiza una ordenación ascendente mediante la técnica de vuelta atrás. Para
ello genera todas las permutaciones del vector de entrada.
vec_entrada
vec_ordenado
: T_Vector := (2,1,3);
: T_Vector;
res
: Boolean;
--- Vector a ordenar
-- inicialmente VACIO
-- (vec_ordenado'length = 0)
function backsort (ent: T_Vector; ord: T_Vector) return boolean is
r : Boolean;
begin
if ent'length = 0 then
--- No hay más números a ordenar
if EstaOrdenado (ord) then
Imprimir_Solucion (ord);
return true;
end if;
end if;
for i in ent'range loop
r := backsort (remove (ent, i), add (ord, ent(i)) );
end loop;
return false;
end backsort;
begin --- programa principal
res := backsort (vec_entrada, vec_ordenado);
end programa;
Las funciones:
•
remove (vec, i). Devuelve un nuevo vector al que se ha eliminado el elemento de la
posición i. La longitud del nuevo vector es una unidad inferior a la longitud del vector
pasado como parámetro (vec).
•
add (vec, num). Devuelve un nuevo vector formado por el vector vec y el elemento num
que ha sido añadido al final.
•
Imprimir_Solucion (vec). Imprime por pantalla el contenido de vec, comenzado por la
posición vec’first.
•
EstaOrdenado (v). Devuelve el valor true si el vector v está ordenado de forma ascendente.
Se pide:
1) Muestra el árbol que genera la función backsort, indicando en cada uno de los nodos los
valores de los parámetros ent y ord.
2) ¿Cuántas posibles alternativas generaría backsort si la entrada fuera un vector de n
elementos?
3) Modifica la función backsort, para que una vez encontrada la solución, no continúe con la
búsqueda.
4) Elimina la llamada a la función EstaOrdenado e introduce código que permita comprobar si
una alternativa es viable como solución.
5) Muestra todas las posibles alternativas que generará la función backsort con los cambios
realizados en los apartados 3 y 4.
Descargar