Trova la sottosequenza della lunghezza massima soddisfacendo contemporaneamente due vincoli di ordinazione


8

Ci viene dato un set F={f1,f2,f3,,fN} di NFrutta. Ogni frutto ha un prezzoPi e contenuto vitaminico Vi; abbiamo associato la fruttafi con la coppia ordinata (Pi,Vi). Ora dobbiamo sistemare questi frutti in modo tale che l'elenco ordinato contenga i prezzi in ordine crescente e il contenuto vitaminico in ordine decrescente.

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

Se disponiamo l'elenco in modo tale che tutti i prezzi siano in ordine crescente e i contenuti vitaminici in ordine decrescente, gli elenchi validi sono i seguenti:

  • [(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)]

Tra gli elenchi sopra, voglio scegliere l'elenco di dimensioni massime. Se più di un elenco ha dimensioni massime, dovremmo scegliere l'elenco di dimensioni massime la cui somma dei prezzi è minima. L'elenco che dovrebbe essere scelto nell'esempio sopra è{(5,11),(7,9),(10,2)}.

Esempio 2 :N=10 e

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

La risposta a questa istanza di esempio è [(13,100),(43,90),(78,65),(87,11),(99,10)].

Fino ad ora, questo è quello che ho fatto:

  1. Ordinare l'elenco originale in ordine crescente di prezzo;
  2. Trova tutte le sottosequenze dell'elenco ordinato;
  3. Verifica se la sottosequenza è valida e confronta tutte le sottosequenze valide.

Tuttavia, ciò richiede tempo esponenziale; come posso risolvere questo problema in modo più efficiente?

Risposte:


5

Una soluzione di programmazione dinamica funzionerebbe qui, se i contenuti vitaminici provengono da un set finito (ad esempio, numeri interi limitati). Innanzitutto, ordina i frutti a prezzo crescente e nei casi in cui due o più frutti hanno lo stesso prezzo, ordinali in base al contenuto vitaminico (decrescente). Adesso definisciM[f,v] essere il numero massimo di frutti in un elenco secondario, contenente solo l'ultimo f frutti (dell'elenco ordinato), aventi al massimo un contenuto vitaminico v. M[0,]=0 e

M[f,v]={max{M[f1,v],1+M[f1,Vf]}if Vf<=vM[f1,v]otherwise
L'uso della programmazione dinamica ti offre una soluzione O(number of fruit×possible vitamin values).

:: Puoi essere più specifico per favore?
Jack,

Bene, su cosa vorresti maggiori dettagli? Non hai familiarità con la programmazione dinamica?
Tom van der Zanden,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.