Encontre subsequência de comprimento máximo satisfazendo simultaneamente duas restrições de ordenação


8

Nos é dado um conjunto F={f1,f2,f3,,fN} do NFrutas. Cada fruta tem preço e conteúdo vitamínico ; associamos a fruta ao par ordenado . Agora temos que organizar essas frutas de forma que a lista classificada contenha preços em ordem crescente e conteúdo de vitaminas em ordem decrescente.PEuVEufi(Pi,Vi)

Exemplo 1 : e .N=4F={(2,8),(5,11),(7,9),(10,2)}

Se organizarmos a lista de modo que todo o preço esteja em ordem crescente e o conteúdo de vitaminas em ordem decrescente, as listas válidas serão as seguintes:

  • [(2,8)]
  • [(5,11)]
  • [(7,9)]
  • [(10,2)]
  • [(2,8),(10,2)]
  • [(5,11),(7,9)]
  • [(5,11),(10,2)]
  • [(7,9),(10,2)]
  • [(5,11),(7,9),(10,2)]

Nas listas acima, desejo escolher a lista de tamanho máximo. Se mais de uma lista tiver tamanho máximo, devemos escolher a lista de tamanho máximo cuja soma dos preços seja menor. A lista que deve ser escolhida no exemplo acima é .{(5,11),(7,9),(10,2)}

Exemplo 2 : eN=10

F={(99,10),(12,23),(34,4),(10,5),(87,11),(19,10),(90,18),(43,90),(13,100),(78,65)}

A resposta para esta instância de exemplo é .[(13,100),(43,90),(78,65),(87,11),(99,10)]

Até agora, é isso que tenho feito:

  1. Classifique a lista original em ordem crescente de preço;
  2. Encontre todas as subsequências da lista classificada;
  3. Verifique se a subsequência é válida e compare todas as subsequências válidas.

No entanto, isso leva tempo exponencial; como posso resolver esse problema com mais eficiência?

Respostas:


5

Uma solução de programação dinâmica funcionaria aqui, se o conteúdo de vitaminas viesse de um conjunto finito (por exemplo, números inteiros limitados). Primeiro, classifique as frutas em preço ascendente e, nos casos em que duas ou mais frutas tenham o mesmo preço, classifique-as em conteúdo vitamínico (decrescente). Agora, definaM[f,v] para ser o número máximo de frutas em uma sub-lista, contendo apenas o último f frutas (da lista classificada), com um teor de vitaminas de no máximo v. M[0 0,]=0 0 e

M[f,v]={mumax{M[f-1,v],1+M[f-1,Vf]}E se Vf<=vM[f-1,v]de outra forma
O uso de programação dinâmica fornece uma solução que é executada em O(número de frutas×possíveis valores de vitaminas).

:: Você pode ser mais específico, por favor?
Jack

Bem, sobre o que você gostaria de obter mais detalhes? Você não está familiarizado com a programação dinâmica?
Tom van der Zanden
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.