Abordagem dinâmica de T-SQL para combinatória / mochila
Acho que minha pergunta tem a ver com uma variante do problema da mochila, mas não consigo realmente encontrar uma solução para isso:
Digamos que você esteja em uma loja de ferragens e precise comprar 21 parafusos. Eles apenas os oferecem em sacos:
Saco X - 16 Parafusos - 1,56 $ por parafuso - 25 $ TotalSaco Y - 8 Parafusos - 2,25 $ por parafuso - 18 $ TotalSaco Z - 4 Parafusos - 1,75 $ por parafuso - 7 $ TotalAgora você precisa descobrir quais bolsas você deve comprar para obter seus 21 parafusos (ou mais!) Pelo menor preço possível.
Então, o que recebi é uma mesa com todas as sacolas e uma variável para definir a quantidade necessária. O que eu preciso como resultado deve ser uma tabela com o nome da mala e a quantidade necessária.
Infelizmente o sqlfiddle está inoperante. Mas pelo menos aqui estão os dados de exemplo:
declare @bags table (id int, qty int, price decimal(19,4))
insert into @bags values
(10, 16, 25.00)
,(20, 8, 18.00)
,(30, 4, 7.00)
declare @ReqQty int = 21
Eu realmente aprecio sua ajuda! Espero que possamos resolver isso, pois preciso personalizar o sistema ERP da empresa com essa importante função.
Agradeço antecipadamente!
Edit: Eu li o artigo inteiro da Wikipedia sobre mochila e lá diz:Algoritmo de aproximação de transbordamento Pode ser possível gerar um algoritmo de aproximação, onde podemos exceder levemente o limite de peso permitido. Você deseja atingir um valor total pelo menos tão alto quanto o limite B fornecido, mas pode exceder o limite de peso ...Atualmente, a solução é desconhecida para este algoritmo de aproximação.
Parece que é melhor usar um algoritmo ganancioso em vez de inventar a roda? ;)