m≥0 vi ≥ 0 v (S ) w(S ) vi wi i
n wi ≥ 0 w(S ) ≤ m w i i∈S
i S v (S )
m
0/1
n
Maximizar
n
u j x j
j =1
Sujeito
n
p j x j ≤ M
j =1
x j ∈ {0, 1}, j = 1 . . . n
{1, . . . , n} {1, . . . , n} v i∈S i
x j
1
0
N P
•
j
N P
•
N P
N P (cM,uM,n,P [1..n [1..n]], U [1..n [1..n]], X [1..n [1..n]) ]) i ← 1ton X [i] ← escolhe(0 escolhe(0,, 1); U [i] ∗ X [i] < uM ) n ( P [ P [i] ∗ X [i] > cM ) cM )OR OR(( n U [ 1
1
Insucesso Sucesso
KnapsackND 0/1 X [i], 0 ≤ i ≤ n cM uM O (n) O(m)
n W
i C S ⊆ {1,...,n}
W
i∈S
wi ≤ W
m
ci
wi
C c(S ) =
ci ≥ C ?
i∈S
N P
A i∈A
si
B A ⊆ A
si = B?
i∈A
ci = wi
U = A, wi = ci = si , W = C = B
• S ∈ U
wi ≤ W
i∈S
ci ≥ C
i∈S
A ∈ A B≤
si ≤ B.
i∈A
si = B.
i∈A
•
•
NP
• N P
n n
n (v1 , v2 , . . . , vn )
vi
S i
(v1 , . . . , vi )
2n X
Z Z
xi 1 ≤ i ≤ k xi = 0 k+1 ≤ i ≤ n Z
k+1
xi = 1
0 ≤ xi ≤ 1
(ut,pt,k,M ) b ← ut c ← pt i ← k+1 n c ← c + P (i) c < M b ← b + U (i) (b + (1 − (c − M )/P (i)) ∗ U (i)) b
(M,n,P,I,pf,if,X ) pc ← ic ← 0 k←1 if ← −1 1=1 (k ≤ n)&( pc + P (k) ≤ M ) pc ← pc + P (k) ic ← ic + I (k) Y (k) ← 1 k ← k +1 k>n if ← ic pf ← pc k←n X ← Y Y (k) ← 0 Limite(ic,pc,k,M ) ≤ if (k = 0)&(Y (k) = 1) k ←k−1 k=0 Y (k) ← 0 pc ← pc − P (k) ic ← ic − I (k) k ← k+1 O(2n ) Z
Z
if = −1
n
X (i), 1 ≤ i ≤ n
i=1
pc = k
−1
i=1
ic > if
I (i)X (i) = if P (i)Y (i)
k≤n Y (k)
Y (i) = 1 1 ≤ i ≤ n i=1 I (i)Y (i)
ic = k
−1
k>n
P (i) 0
Limite ≤ n
Y (k), pc
ic
if
Y i
Y (i) P (i)
if if if = 159
X 2 − 1 = 511 9
n
r r−1
r n−1
n−1
r
n n n r
O(2n )
O(n2 )
• • •
•
• • • •
=
−1
r −1
+
r−1
n s1, s2, . . . , s n S i
j
i
j
i
i−1
j t[n, S ]
t
S
n
f t[i, j] t[i − 1, j − si ]
• • •
t T [i − 1, j]
w←0
(v[1..n], w[1..n], n , W ) W
c[0, w] ← 0 i←1 n c[i, 0] = 0 i←1 n w←1
W
w[i] ≤ w v[i] + c[i − 1, w − w[i]] > c[i − 1, w] c[i, w] = v[i] + c[i − 1, w − w[i]] c[i, w] = c[i − 1, w] c[i, w] = c[i − 1, w]
O(W ) O(n) n
W O(n)
O(W ) O(n ∗ W )
(n, W ) i←n j ← M ((i > 0)&( j > 0)) (c[i, j ] <> c[i − 1, j]) X [i] ← 1 j ← j − w[i] i−− X [i] ← 0 i−−
n
U (i)/P (i) (U (i)/P (i) ≥ U (i + 1)/P (i + 1)) 0/1
O(N )
• •
X cum
•
F OR cum
cum U (i)/P (i)
F OR
•
cum (U [1..n], P [1..n], M , n) X ← 0 cum ← M i←1
n
P (i) > cum Exit; X (i) ← 1; cum ← cum − P (i) j ← i n P ( j) <= cum X (i) ← 1; cum ← cum − P ( j)
U (i)/P (i) n=3
M = 50
220
•
•
•
U = P + 10 U = 1, 1 ∗ P
•
n n ∈ 10, 20, 30, 40, 50, 100, 200, 300, 400, 500
• M ∈ 10%, 20%, 30%, 40%, 50%
•
• n
•
n ∈ (10, 20, 30, 40, 50, 100, 200, 300, 400, 500)
M ∈ (10, 20, 30, 40, 50)
n
n = (50, 100, 200, 400)
n = (50, 100, 200, 400)
Comparacao entre os Metodos para n = 100 0.7 Guloso Dinamico Backtracking 0.6 s o d n u g e s m e a t s o p s e R e d o p m e T
0.5
0.4
0.3
0.2
0.1 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=1
45
50
Comparacao entre os Metodos para n = 200 0.55 Guloso Dinamico Backtracking
0.5
s o d n u g e s m e a t s o p s e R e d o p m e T
0.45
0.4
0.35
0.3
0.25
0.2
0.15 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=2
n n n
45
50
•
•
array n LeArquivo =
1
LeArquivo = 0 GeraV etor
N MaxTam NoElementos
Comparacao entre os Metodos para n = 100 0.7 Guloso Dinamico Backtracking 0.6 s o d n u g e s m e a t s o p s e R e d o p m e T
0.5
0.4
0.3
0.2
0.1 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=1
45
50
Comparacao entre os Metodos para n = 100 0.65 Guloso Dinamico Backtracking
0.6
0.55 s o d n u g e s m e a t s o p s e R e d o p m e T
0.5
0.45
0.4
0.35
0.3
0.25
0.2 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=2
45
50
Comparacao entre os Metodos para n = 100 3.5 Guloso Dinamico Backtracking 3
s o d n u g e s m e a t s o p s e R e d o p m e T
2.5
2
1.5
1
0.5
0 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=3
45
50
Comparacao entre os Metodos para n = 100 0.7 Guloso Dinamico 0.6 s o d n u g e s m e a t s o p s e R e d o p m e T
0.5
0.4
0.3
0.2
0.1 10
15
20
25 30 35 40 Numero de Elementos no Vetor para DSET=4
45
50