Problema da mochila: diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
A wikipédia não é um repositório de implementações de um algoritmo em várias linguagens. Para isso existe http://rosettacode.org/wiki/Knapsack_problem |
Pseudocódigo para a matriz keep que serve para retornar os itens da solução ótima Etiquetas: Espaçamento excessivo Editor Visual |
||
Linha 115:
retornar <math>K(W,n)</math>
=== Matriz keep para o caso Limitado 0/1 ===
<code>Inicializar KEEP(0,j) = 0 para todo j pertencente a {1,...,n} e KEEP(w,0) = 0 para todo w pertencente a {1,...,n}:</code>
<code>para j = 1 até n: </code>
<code>para w = 1 até W:</code>
<code>se wj <= w:</code>
<code> se K(w,j-1)<K(w – wj, j – 1) + vj :</code>
<code> KEEP(w,j)
= 1</code>
<code>Inicializar inteiro item = n</code>
<code>Inicializar int remaning_weight = W</code>
<code>Inicializar lista solução = vazio</code>
<code> para item maior que zero:</code>
<code> se keep(remaning_weight,item) = 1:</code>
<code> remaning_weight
= remaning_weight – w(item)</code>
<code> adicione
item a lista solução</code>
<code> item = item – 1</code>
<code>Retorne Solução</code>
=== Solução usando Backtracking ===
Backtracking é um algoritmo refinado da busca por força bruta (ou enumeração exaustiva), no qual boa parte das soluções podem ser eliminadas sem serem explicitamente examinadas. É uma estratégia que se aplica em problemas cuja solução pode ser definida a partir de uma seqüência de n decisões, que podem ser modeladas por uma árvore que representa todas as possíveis seqüências de decisão. De fato, se existir mais de uma disponível para cada uma das n decisões, a busca exaustiva da árvore é exponencial. A eficiência desta estratégia depende da possibilidade de limitar a busca, ou seja, podar a árvore, eliminando os ramos que não levam a solução desejada.
|