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[f−1,v],1+M[f−1,Vf]}if Vf<=vM[f−1,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.