Somma minima cumulativa impostata


17

Considera questo problema: dato un elenco di set finiti, trova un ordine che minimizza .s1,s2,s3,|s1|+|s1s2|+|s1s2s3|+...

Ci sono algoritmi noti per questo? Qual è la sua complessità? Non sono ancora riuscito a pensare a un algoritmo ottimale efficiente, ma ovviamente non è nemmeno in NP-Hard.


1
Hai provato tutti gli ovvi modi candidati per provare a risolverlo con un algoritmo goloso, per vedere se qualcuno di loro funziona? (Le probabilità sono che nessuno di loro funzionerà, ma vale la pena verificarlo. Di solito per ogni candidato avido algoritmo che hai in mente, se non funziona, di solito è facile trovare un controesempio che lo dimostri.)
DW

Ho già dimostrato che l'algoritmo greedy non funziona per n 3. Controesempio: A = {0, 1} B = C = {2,3,4}. La soluzione ottimale è B, C, A con costo 11, l'algoritmo avido fornisce A, B, C con costo 12. Finora il migliore che ho trovato è un algoritmo di approssimazione con ratio , che è piuttosto male. n+23
Antimonio

C'è un programma dinamico , dove è il numero di insiemi. O(2npoly(n))n

1
Forse questo è più adatto a cstheory.
Yuval Filmus,

5
Qualcuno può risolvere il caso speciale quando tutto ? |Sio|=2
domotorp,

Risposte:


6

Questo problema è in realtà correlato a un problema di pianificazione noto come "Pianificazione vincolata alla precedenza per ridurre al minimo i tempi di completamento ponderati". Il problema è il seguente: Dato un insieme di lavori, in cui ogni lavoro ha un tempo di elaborazione (p) e peso (w) e un grafico di precedenza è definito sui lavori. L'obiettivo è pianificare i lavori in una singola macchina (non preventiva) in modo tale che i vincoli di precedenza siano statisificati e la somma dei tempi di completamento ponderati sia ridotta al minimo. Il problema è NP-difficile e si conosce un'approssimazione 2.

Riduzione dal problema della somma cumulativa minima al problema di pianificazione vincolata alla precedenza: per ogni elemento creare un lavoro con p = 1, w = 0. Inoltre per ogni set creare un lavoro con p = 0, w = 1. Creare il grafico della precedenza, in modo che se elemento , allora e deve essere programmato prima S . Penso che questo caso speciale del problema di programmazione sia anche NP-difficile.eSeS

Vedi i seguenti link,

1) http://www.win.tue.nl/~gwoegi/papers/precsum.pdf

2) http://web.engr.illinois.edu/~chekuri/papers/dam_sched.ps


Vorrei anche raccomandare il seguente documento per migliorare limiti, casi speciali e risultati di durezza per il problema di pianificazione. people.idsia.ch/~monaldo/papers/MOR-schedprec-11.pdf . Vedi anche l'articolo sulla durezza 2- \ epsilon in una variante di giochi unici di Bansal e Khot win.tue.nl/~nikhil/pubs/focs-09-version.pdf .
Chandra Chekuri,

La riduzione non dovrebbe andare nella direzione opposta per dimostrare che il problema della somma cumulativa è NP Hard?
Antimonio

Non importa, penso di vedere come la riduzione procede in entrambe le direzioni.
Antimonio,

1

Shalmoli Gupta ha già spiegato che il problema generale è NP-Hard, quindi ho deciso di indagare se alcuni casi speciali sono polinomiali risolvibili. Alla fine, ho trovato una soluzione al caso speciale di insiemi che rappresentano un albero, o più in generale, un ordine parallelo di serie per inclusione di sottoinsiemi con tutti gli insiemi incomparabili disgiunti.

Una proprietà che semplifica le cose è se l'elenco di insiemi è chiuso sotto l'intersezione. Se , quindi, esiste un ordinamento ottimale in cui s 1 viene prima di s 2 . Possiamo supporre WLOG che l'ordinamento ottimale sia un'estensione lineare dell'ordine parziale dato dall'inclusione del sottoinsieme.S1S2S1S2

Poiché tutti i sottoinsiemi di un set appaiono prima di esso nell'ordine, ciò significa che l'importo aggiunto alla somma corrente da un determinato set è fisso, indipendentemente da dove appare. Se è la lista di insiemi, allora il costo incrementale di un insieme è il numero di elementi in s che non sono in qualsiasi sottoinsieme di s che compare in S . Se lo stesso set appare più volte in S , possiamo scegliere arbitrariamente uno per primo e lasciare che gli altri abbiano un costo 0.SSS

Ciò significa che il problema è equivalente al problema del tempo di completamento ponderato minimo nella pianificazione di una singola macchina con vincoli di precedenza. In questo problema, dato un insieme di lavori con pesi e tempi t j e un ordine parziale sui lavori P , desideriamo trovare un ordine dei lavori che minimizzi il tempo di completamento totale ponderato, cioèwjtjP

Σio=1nwjio(ΣK=1iotjK)

soggetta ai vincoli di precedenza . Il problema minimo dell'insieme cumulativo con insiemi chiusi di intersezione può essere trasformato in questo creando un lavoro per ogni insieme, in cui ogni lavoro ha un peso 1, tempo pari al costo incrementale definito sopra e P è l'ordine dato dall'inclusione del sottoinsieme.PP

A quanto pare, questo problema è NP-Hard anche per la generale . Tuttavia, alcune forme speciali di P possono essere risolte in tempi polinomiali.PP

Questo documento fornisce un algoritmo per il caso di serie ordini paralleli P (che include il caso importante degli alberi pure). Sfortunatamente, non ho potuto accedere a quel documento, quindi ho deciso di provare a reinventarlo in modo indipendente. Ecco cosa mi è venuto in mente.O(nlogn)P

Per risolvere questo problema, sono necessarie diverse osservazioni.

Prima di tutto, in assenza di vincoli di precedenza, la soluzione ottimale è semplicemente ordinare i lavori in ordine crescente di . Per semplicità, mi riferirò a questo come al valore del lavoro, abbreviatov(j). Si noti che poiché l'ordinamento èO(nlogn), è impossibile fare meglio di questa complessità.tjwjv(j)O(nlogn)

Regola 1 Lasciate e b essere posti di lavoro in modo tale che un < b P e B copre una. Se v ( a ) < v ( b ) , possiamo eliminare il vincolo a < b senza influire sull'ordinamento ottimale o sul valore obiettivo.un'Ba<bPv(a)<v(b)a<b

Supponiamo appare prima un nell'ordinamento ottimale del problema rilassato. Poiché b copriva originariamente a, ciò significa che tutti i lavori tra b e a nel nuovo ordinamento sono incomparabili con aeb. Ma poiché b ha un valore più alto di a, possiamo ridurre il valore oggettivo scambiando b e a, una contraddizione.ba

Allo stesso modo, possiamo eliminare il vincolo nel caso in cui purché garantiamo che dopo l'ordinamento per valore, rompiamo i legami consultando le relazioni di precedenza del problema originale (semplificato). Ciò garantisce che la soluzione ottimale trovata per il problema rilassato sia anche una soluzione ottimale al problema originale.v(a)=v(b)

Pertanto, ogni volta che b copre a e , possiamo semplificare il problema eliminando il vincolo a < b .v(a)v(b)a<b

Regola 2 Supponiamo di sapere che b segue immediatamente dopo a in una soluzione ottimale. Possiamo unire aeb in un nuovo nodo c con e t c = t a + t b , contraendo il poset P in modo appropriato.wc=wa+wbtc=ta+tBP

Il valore obiettivo ottimale del nuovo problema differisce da una costante dal valore obiettivo originale (in particolare ), tuttavia questa costante non dipende dall'ordinamento e quindi l'ordinamento ottimale non è influenzato. Possiamo recuperare una soluzione ottimale al vecchio problema prendendo una soluzione ottimale al nuovo problema e sostituendo c con una b .wun'tBcun'B

Regola 3 Supponiamo che in una soluzione ottimale a un'istanza problema, viene immediatamente prima b e v ( un ) > v ( b ) . Supponiamo ora di creare un'istanza del problema più ampia aggiungendo nuovi lavori con il nuovo poset formato da serie o composizione parallela con l'originale. Ci sarà sempre una soluzione ottimale al problema più grande in cui a viene immediatamente prima di b .un'Bv(un')>v(B)un'B

Supponiamo altrimenti. Lascia che la soluzione ottimale contenga . Poiché P era formato da composizione serie parallele, sappiamo che tutti x i s sono incomparabile un e b . Unisci tutti i nodi x i in un nuovo nodo x usando la regola 2. Adesso considera v ( x ) . Se v ( x ) v ( a ) allora possiamo scambiareun',X1,X2,...,BPXioun'BXioX'v(x)v(x)v(a) e a senza aumentare il valore oggettivo. Allo stesso modo, se v ( x ) v ( b ) , possiamo scambiare x e b . Pertanto, v ( a ) < v ( x ) < v ( b ) . Ma v ( a ) > v ( b ) , una contraddizione.xav(x)v(b)xbv(a)<v(x)<v(b)v(a)>v(b)

Usando la regola 2 e la regola 3, possiamo già ottenere un algoritmo semplice ma non ottimale . Poiché P è un ordine parallelo in serie, supponiamo che l'input contenga una rappresentazione ad albero di P in cui ciascun nodo rappresenta la composizione in serie o la composizione parallela e le foglie sono lavori individuali. Possiamo trovare una soluzione ottimale con l'attraversamento preordinato dell'albero mantenendo l'invariante che la soluzione ottimale per ciascun sottoproblema è una catena in ordine crescente di valore.O(n2)PP

Supponiamo che sia la composizione in serie dei sottoproblemi con i poseti P 1 e P 2 . Lascia che le soluzioni ottimali ordinino C 1 e C 2 . La soluzione ottimale a P è chiaramente la concatenazione di queste catene. Tuttavia, è possibile che il primo lavoro in C 2 abbia un valore inferiore rispetto all'ultimo lavoro in C 1 . Per mantenere l'invariante che la soluzione è una catena ordinata, usiamo la regola 3 + la regola 2 per unire gli endpoint purché non siano in ordine.PP1P2C1C2PC2C1

Se è invece una composizione parallela, prendiamo semplicemente le catene ordinate S 1 e S 2 e le uniamo in una nuova catena ordinata. Grazie all'invariante, questo è valido.PS1S2

Sfortunatamente, questo algoritmo è . Per ottenere un algoritmo O ( n l o g n ) , dobbiamo calcolare pigramente le catene usando la regola 1.O(n2)O(nlogn)

In particolare, se un sottoproblema contiene solo nodi in cui i vincoli di precedenza sono uguali all'ordine dei valori, allora possiamo dimenticare completamente i vincoli di precedenza e guardare solo i valori. Ciò è garantito dallo stesso invariante che ha assicurato che le soluzioni siano ordinate catene nel precedente algoritmo.

Invece di calcolare una catena ordinata per ciascun sottoproblema, rappresentiamo la soluzione ottimale per un sottoproblema come una coppia di heap di Fibonacci, uno heap al minuto e uno heap massimo, entrambi contenenti tutti i lavori nel sottoproblema. Ciò significa che possiamo eliminare l'elemento minimo o massimo della soluzione in tempo logaritmico.

Come prima, eseguiamo un attraversamento preordine. Dove è una composizione in serie, esaminiamo il lavoro massimo della prima coppia di heap e il lavoro minimo della seconda coppia di heap. Se i loro valori sono fuori servizio, li eliminiamo e li uniamo usando la regola 2 e 3. Quindi confrontiamo il lavoro appena creato con i nuovi endpoint e continuiamo a saltar fuori e fonderci finché sono fuori servizio. Una volta che gli endpoint non hanno più valori fuori servizio, possiamo tranquillamente dimenticare la restrizione della precedenza della serie grazie alla regola 1. Quindi spingiamo semplicemente i lavori appena creati su un heap, quindi uniamo gli heap per creare la coppia di heap che rappresenta la soluzione a P stesso.PP

Per una composizione parallela, uniamo semplicemente le coppie di heap. Il nuovo heap minimo è l'unione dell'heap minimo di ciascun sottoproblema e allo stesso modo dell'heap massimo. Si noti che i cumuli di Fibonacci sono unificabili in tempo costante.

Una volta che abbiamo una coppia di heap che rappresenta la soluzione all'intero problema, possiamo trovare l'ordinamento effettivo della soluzione facendo scattare l'heap minimo fino a quando non è vuoto. Successivamente annulliamo tutte le sostituzioni della regola 2 per ottenere una soluzione al problema originale.

O(nlogn)

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.