Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenedores en un barco
Maximizar el número de contenedores cargados
Maximizar el número de toneladas cargadas
1 / 44
CONTENEDORES EN UN BARCO
PROBLEMA
3 / 44
ESTRUCTURA DE DATOS
struct Cont {
int id ;
peso_t peso ;
4 / 44
SOLUCIÓN MAXIMIZAR EL NÚMERO DE CONTENEDORES CARGADOS
5 / 44
CÓDIGO MAXIMIZAR EL NÚMERO DE CONTENEDORES CARGADOS
vector < int > max_num_conts ( const vector < peso_t > p ,
peso_t K ) {
vector < Cont > conts = a_cont ( p ) ;
return elegidos ;
}
6 / 44
OPTIMALIDAD MAXIMIZAR EL NÚMERO DE CONTENEDORES CARGADOS
7 / 44
OPTIMALIDAD MAXIMIZAR EL NÚMERO DE CONTENEDORES CARGADOS
7 / 44
ESTRATEGIA MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
8 / 44
CÓDIGO MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
vector < int > max_peso_greedy ( const vector < peso_t > p ,
peso_t capacidad ) {
vector < Cont > conts = a_cont ( p ) ;
sort ( conts . begin () , conts . end () , mayor ) ;
vector < int > elegidos ;
9 / 44
PERSPECTIVA MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
De esta forma, podremos ver las ventajas que presenta enfocar las
soluciones de una forma simple.
10 / 44
OTRO ALGORITMO MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
11 / 44
CÓDIGO MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
vector < Cont > bruto_sub ( const vector < Cont > p , peso_t K )
{
if ( p . empty () || K == 0)
return vector < Cont >() ;
peso_t max = 0;
vector < Cont > max_v ;
for ( vector < Cont >:: const_iterator it = p . cbegin () ; it
!= p . cend () && max < K ; ++ it ) {
vector < Cont >:: const_iterator next ( it ) ;
vector < Cont > orig_copy (++ next , p . cend () ) ; //
Copia todos los posteriores
vector < Cont > v_candidato ;
if ( it→peso > K )
v_candidato = bruto_sub ( orig_copy , K ) ;
else {
v_candidato = bruto_sub ( orig_copy , K - it→peso ) ;
v_candidato . push_back (* it ) ; // Si usamos
listas , mejor usar push_front
}
peso_t suma1 = suma ( v_candidato ) ;
if ( suma1 > max && suma1 <= K ) {
max = suma1 ;
max_v = v_candidato ;
}
}
return max_v ;
12 / 44
COMPARATIVA MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
13 / 44
COMPARATIVA MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
0.4
0.3
0.2
0.1
0
0 5 10 15 20 25 30 35 40 45 50
Capacidad
14 / 44
COMPARATIVA MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
1000
800
600
400
200
0
0 5 10 15 20 25 30 35 40 45 50
Capacidad
15 / 44
CONCLUSIÓN MAXIMIZAR EL NÚMERO DE TONELADAS CARGADAS
16 / 44
EL PROBLEMA DEL VIAJANTE DE
COMERCIO
PROBLEMA
80
02
60
08
76
95
57
51
50 14 93 55
27
67
54
77
78 92 75
61
22 10 88
29 35 53 52
94 68
28
72
56
91 89 70 90
41
44
49
45 21 25
37
85 58
39
18
36 71
79
86 01 74
03
69
87 23
16 42
17 73
63
38
19
24
33 43
15 07 05
26
46
47
12 48 04
40 82
84 06
30
32 81
31 34 13
64 83
65 11
09
66
18 / 44
ALGORITMOS
19 / 44
GRAFOS
20 / 44
CONSTRUCCIÓN DEL GRAFO
21 / 44
VECINO MÁS CERCANO ALGORITMOS
Devolveremos trayecto.
22 / 44
VECINO MÁS CERCANO ALGORITMOS
• Toma como camino inicial los nodos más al norte, este y oeste
• Mientras haya nodos disponibles:
I Para cada nodo disponible, halla la posición entre dos nodos del camino
donde, de insertarse, se incrementaría menos la longitud del camino
I Inserta el nodo que aumente menos la longitud en la posición que se
calculó para ese nodo
24 / 44
INSERCIÓN ( CÓDIGO ) ALGORITMOS
26 / 44
COLONIA ALGORITMOS
27 / 44
CONSTANTES ALGORITMOS
28 / 44
COMPARATIVA DE LOS ALGORITMOS EJEMPLOS
29 / 44
COMPARATIVA DE LONGITUDES EJEMPLOS
80
Longitud
60
40
20
0
Algoritmos
30 / 44
SOLUCIÓN ÓPTIMA EJEMPLOS
Problema ulysses16
30
Camino óptimo
25
20
15
10
Y
-5
-10
33 34 35 36 37 38 39 40 41 42
X
31 / 44
SOLUCIÓN DE VECINO MÁS CERCANO EJEMPLOS
Problema ulysses16
30
Vecino más cercano
25
20
15
10
Y
-5
-10
33 34 35 36 37 38 39 40 41 42
X
32 / 44
SOLUCIÓN DE INSERCIÓN EJEMPLOS
Problema ulysses16
30
Estrategias de inserción
25
20
15
10
Y
-5
-10
33 34 35 36 37 38 39 40 41 42
X
33 / 44
SOLUCIÓN DE LA COLONIA DE HORMIGAS EJEMPLOS
Problema ulysses16
30
Colonia de hormigas
25
20
15
10
Y
-5
-10
33 34 35 36 37 38 39 40 41 42
X
34 / 44
COMPARATIVA DE LONGITUDES EJEMPLOS
6000
Longitud
5000
4000
3000
2000
1000
0
Algoritmos
35 / 44
SOLUCIÓN ÓPTIMA EJEMPLOS
Problema berlin52
1200
Camino óptimo
1000
800
600
Y
400
200
0
0 200 400 600 800 1000 1200 1400 1600 1800
X
36 / 44
SOLUCIÓN DE VECINO MÁS CERCANO EJEMPLOS
Problema berlin52
1200
Vecino más cercano
1000
800
600
Y
400
200
0
0 200 400 600 800 1000 1200 1400 1600 1800
X
37 / 44
SOLUCIÓN DE INSERCIÓN EJEMPLOS
Problema berlin52
1200
Estrategias de inserción
1000
800
600
Y
400
200
0
0 200 400 600 800 1000 1200 1400 1600 1800
X
38 / 44
SOLUCIÓN DE LA COLONIA DE HORMIGAS EJEMPLOS
Problema berlin52
1200
Colonia de hormigas
1000
800
600
Y
400
200
0
0 200 400 600 800 1000 1200 1400 1600 1800
X
39 / 44
COMPARATIVA DE LONGITUDES EJEMPLOS
100000
Longitud
80000
60000
40000
20000
0
Algoritmos
40 / 44
SOLUCIÓN ÓPTIMA EJEMPLOS
Problema pr76
14000
Camino óptimo
12000
10000
8000
Y
6000
4000
2000
0
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
X
41 / 44
SOLUCIÓN DE VECINO MÁS CERCANO EJEMPLOS
Problema pr76
14000
Vecino más cercano
12000
10000
8000
Y
6000
4000
2000
0
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
X
42 / 44
SOLUCIÓN DE INSERCIÓN EJEMPLOS
Problema pr76
14000
Estrategias de inserción
12000
10000
8000
Y
6000
4000
2000
0
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
X
43 / 44
SOLUCIÓN DE LA COLONIA DE HORMIGAS EJEMPLOS
Problema pr76
14000
Colonia de hormigas
12000
10000
8000
Y
6000
4000
2000
0
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
X
44 / 44