Finden Sie eine Teilsequenz maximaler Länge, die gleichzeitig zwei Ordnungsbeschränkungen erfüllt


8

Wir erhalten eine Menge von Früchten. Jede Frucht hat Preis und Vitamingehalt ; wir haben Frucht mit dem geordneten Paar assoziiert . Jetzt müssen wir diese Früchte so anordnen, dass die sortierte Liste die Preise in aufsteigender Reihenfolge und den Vitamingehalt in absteigender Reihenfolge enthält.N P i V i f iF={f1,f2,f3,,fN}NPiVifi(Pi,Vi)

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

Wenn wir die Liste so anordnen, dass alle Preise in aufsteigender Reihenfolge und der Vitamingehalt in absteigender Reihenfolge angegeben sind, lauten die gültigen Listen wie folgt:

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

Aus den obigen Listen möchte ich die Liste mit der maximalen Größe auswählen. Wenn mehr als eine Liste die maximale Größe hat, sollten wir die Liste der maximalen Größe auswählen, deren Preissumme am geringsten ist. Die Liste, die im obigen Beispiel ausgewählt werden sollte, lautet .{(5,11),(7,9),(10,2)}

Beispiel 2 : undN=10

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

Die Antwort auf diese Beispielinstanz lautet .[(13,100),(43,90),(78,65),(87,11),(99,10)]

Bis jetzt habe ich Folgendes getan:

  1. Sortieren Sie die ursprüngliche Liste in aufsteigender Reihenfolge des Preises.
  2. Finden Sie alle Teilsequenzen der sortierten Liste.
  3. Überprüfen Sie, ob die Teilsequenz gültig ist, und vergleichen Sie alle gültigen Teilsequenzen.

Dies dauert jedoch exponentiell. Wie kann ich dieses Problem effizienter lösen?

Antworten:


5

Eine dynamische Programmierlösung würde hier funktionieren, wenn der Vitamingehalt aus einer endlichen Menge stammt (z. B. begrenzte ganze Zahlen). Sortieren Sie zuerst die Früchte nach steigendem Preis und in den Fällen, in denen zwei oder mehr Früchte den gleichen Preis haben, sortieren Sie sie nach Vitamingehalt (absteigend). Definieren Sie nun als die maximale Anzahl von Früchten in einer Unterliste, die nur die letzten Früchte (der sortierten Liste) enthält und einen Vitamingehalt von höchstens . und Wenn Sie dynamische Programmierung verwenden, erhalten Sie eine Lösung, die ausgeführt wirdf v M [ 0 , ] = 0 M [ f , v ] = { m a x { M [ f - 1 , v ] , 1 + M [ f - 1 , V f ] } wenn  V f < = v ] sonst O (M[f,v]fvM[0,]=0

M[f,v]={max{M[f1,v],1+M[f1,Vf]}if Vf<=vM[f1,v]otherwise
O(number of fruit×possible vitamin values) .

:: Kannst du bitte genauer sein?
Jack

Nun, worüber möchten Sie mehr Details? Kennen Sie sich nicht mit dynamischer Programmierung aus?
Tom van der Zanden
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.