Numero minimo di viaggi di shopping per un gruppo di persone per comprare regali l'uno per l'altro


10

Abbiamo un gruppo di n persone. Ci viene fornito un elenco di chi deve acquistare regali per chi all'interno del gruppo. Ogni persona potrebbe aver bisogno di acquistare / ricevere un numero qualsiasi di regali, o forse nessuno. In un giro di shopping, un sottogruppo di persone viaggia insieme nello stesso negozio e acquista regali per chiunque non sia presente nel negozio. Non possono acquistare regali per qualcun altro nello stesso viaggio di shopping perché non sarebbe una sorpresa. Una persona può fare più viaggi di shopping. Vogliamo ridurre al minimo il numero totale di viaggi di shopping necessari affinché tutti possano acquistare tutti i regali di cui hanno bisogno.

Ad esempio, considera il caso in cui ci sono 5 persone e ognuna deve acquistare regali per ogni altra persona nel gruppo. Consenti alle persone di essere numerate da 1 a 5. Questo può essere fatto in 4 viaggi di shopping, come mostrato:

  • Viaggio 1: 1, 2, 3 fare shopping

  • Viaggio 2: 1, 4, 5 fare shopping

  • Viaggio 3: 2, 4 vai a fare shopping

  • Viaggio 4: 3, 5 vai a fare shopping

Come potrei risolvere questo problema? È ovvio che l'input può essere rappresentato da un grafico diretto, ma non so dove andare da lì. Qualcuno ha sollevato il problema della copertina biculare , ma sebbene simile, non risponde a questa domanda.

Possiamo pensare l'ingresso come un grafo orientato su n vertici, dove il bordo ( u , v ) mezzi persona u deve acquistare un regalo per persona v . L'obiettivo è trovare un set di bicliques ( S 1 , T 1 ) , ... , ( S k , T k ) in modo tale che k sia minimo e il bordo impostato E del grafico sia un sottoinsieme di i ( S i × T ioGn(u,v)uv(S1,T1),,(Sk,Tk)kE . Inoltre, estendendo la definizione di bicliques a un grafico diretto, una biclique ( S i , T i ) contiene solo i bordi che mappano da S i a T i . Ciò differisce dal problema della copertina biclique in quanto non richiediamo che ogni biclique sia un sottografo di G (non richiediamo S i × T iE per ogni i ).i(Si×Ti)(Si,Ti)SiTiGSi×TiEi

In particolare, accetterò una risposta che:

  • Dimostra che questo problema è NP-difficile o
  • Presenta un algoritmo temporale polinomiale che risponde esattamente a questa domanda (nessun approssimativo o limite superiore)

Per la cronaca, non ho visto questo problema da nessuna parte, mi sto solo chiedendo per la mia curiosità.

Risposte:


2

Questo problema è NP-difficile . Per dimostrarlo, per prima cosa riformulerò questo problema (ottimizzazione) in un problema decisionale. Poi, ho riformulare il problema in una equivalente, da cui è abbastanza semplice da ottenere una riduzione della -coloring problema, che è NP-difficile per qualsiasi k 3 .kk3

Una breve formulazione del problema è la seguente:

Dati persone e un grafico G che codifica le loro relazioni di "donazione", trova la quantità minima di viaggi richiesta in modo tale che tutti i regali possano essere acquistati senza rovinare sorprese.nG

Tuttavia, questo è un problema di ottimizzazione. La classe NP è generalmente definita per problemi di decisione (in cui la risposta a ogni istanza è SÌ o NO). Una variante decisionale di questo è:

Dati persone e un grafico G che codifica le loro relazioni di "donazione" e un numero intero t , sta facendo al massimo t viaggi sufficienti per acquistare tutti i regali senza rovinare sorprese?nGtt

Definisco il problema di trovare una t -multicoloring diretta correttat di alcuni grafici come trovare una funzione multicolore c : V P ( C ) che è corretta , dove C è un insieme di t 'colori' ( ie | C | = t ) e P ( C ) è l'insieme di potenza di C (cioè l'insieme di tutti i sottoinsiemi di CG=(V,E) c:VP(C)Ct|C|=tP(C)CC). Una funzione multicolore è corretta se e solo se per ogni fronte , abbiamo quella c ( u ) c ( v ) .(uv)Ec(u)c(v)

Io sostengo che il problema giro di shopping è equivalente al problema di decidere l'esistenza di un diretto -multicoloringt dello stesso grafico .G

Prova : Se abbiamo una corretta diretto -multicoloring c per G , dove rinominiamo i colori tali che CtcG quindi prendere in considerazione la sequenza di t itinerari T 1 , ... , T t , dove un vertice v va a fare shopping in viaggio T i se e solo se i c ( v ) . Quindi, per ogni fronte ( u v ) EC={1,,t}tT1,,TtvTiic(v)(uv)E, abbiamo che esiste un viaggio tale che u T i e v T i , poiché c ( u ) c ( v ) . Pertanto, i viaggi T che sono sufficienti per comprare tutti i regali.TiuTivTic(u)c(v)Ti

Se abbiamo una sequenza di viaggi , quindi costruisci la funzione multicolore c sul set di colori C T iT1,,Ttc tale che c ( u ) = { i N | u T i } . Poi, per ogni arco ( u v ) E , esiste un viaggio T i tale che u C={1,,t}c(u)={iN|uTi}(uv)ETiuTi e (poiché u può acquistare un regalo per v su qualche viaggio), il che significa che i c ( u ) e i c ( v ) , quindi c ( u ) c ( v ) . vTiuvic(u)ic(v)c(u)c(v)

Trovare una corretta -multicoloring è fondamentalmente una strana riformulazione di un caso specifico di k -coloring. Pertanto, posso mostrare una riduzione del tempo polinomiale da ( ttk -colore problema: dato un grafico non orientatoG=(V,E(tt/2) , prima trasforma questo grafico nel grafico diretto G = ( V , E ) , in modo che V = V e ( u v ) E se e solo se ( u , v ) E o ( v , uG=(V,E)G=(V,E)V=V(uv)E(u,v)E (in altre parole, cambiamo i bordi non orientati in due bordi diretti).(v,u)E

Considera un insieme più grande , in modo tale che non esistano a , b K , a b , tale che a b . L'insieme di tutti i sottoinsiemi di dimensione C t / 2 , dove t = | C | , è un tale insieme. Pertanto, la dimensione massima di tale sottoinsieme è ( tKP(C)a,bKababCt/2t=|C| .(tt/2)

Se esiste una corretta -multicoloring per G , allora esiste una colorazione corretta che non utilizza più di ( ttG elementi disuguali daP(C)(*), quindi questo è un valore valido ( t(tt/2)P(C)  -colore perG.(tt/2)G

Se un vero (tt/2) -colore esiste per , quindi esiste un insieme K P ( C ) , | C | = t , tale che | K | ( tGKP(C)|C|=te non esiste alcunaa,bK,ab, tale cheab. Quindi,Gha una correttat-multicoloringdiretta.|K|(tt/2)a,bKababGt

Pertanto, questa è una riduzione del tempo polinomiale valida da -colore dell'attuale problema di acquisto contviaggi, il che significa che l'attuale problema di acquisto è NP-difficile. Nota che l'attuale problema di shopping è NP-completo, dal momento che possiamo verificare facilmente se un determinato elenco, al massimotviaggi ci permette di comprare tutti i regali senza rovinare sorprese.(tt/2)tt


(*): Se alcuni multi-colorazione utilizza colori più insiemi di un massimo 'non sottoinsieme' multi-colorazione C * , possiamo 'rinomina' CCCC tale che è un sovrainsieme . C rimane corretto, poiché nessuno degli elementi di C essendo adiacente a un elemento diverso da C è un problema e nessuno dei set di colori era adiacente l'uno all'altro nella C originale . Così, senza perdita di generalità, si può supporre C *C .CCCCCCC

Quindi, nota che "rinomina" con qualsiasi sottoinsieme diCC non rovina i bordi tra i nodi dei set di colori C C , poiché C non contiene elementi che sono un sottoinsieme di un altro. L'unica cosa che rimane è assicurarsi che i bordi tra C C e C non "rovinino" la colorazione.CCCCCCC

Considera la seguente relazione sui set di colori in CC : due set di colori A e B sono collegati se e solo se esiste una coppia di vertici a , b tale che a ha un set di coloriRCCABa,ba e b colore- set B e ( un , b ) e . Questa relazione può essere rappresentata dal grafico non orientato G = ( CC , R )AbB(a,b)EG=(CC,R).

Innanzitutto, possiamo "ridurre" sostituendo una coppia che non ha un bordo in G con un singolo set di colori. La colorazione rimane corretta, poiché la modifica di due set di colori che non sono affatto adiacenti nello stesso colore non introduce bordi non validi. Di conseguenza, abbiamo ridotto G a un grafico completo.CCGG

Ciò significa che se ha una quantità di set di colori inferiore o uguale a | C| , esiste la colorazione richiesta. Altrimenti, non esiste alcuna vera multi-colorazione, dal momento che C è un insieme più grande di 'non sottoinsieme', quindi non siamo in grado di colorare questa cricca. Pertanto, esiste necessariamente la multi-colorazione richiesta.G|C|C


Dato che il grafico completo su nodi K n è in grado di colorare se e solo se abbiamo almeno n colori, abbiamo che n persone possono fare shopping a vicenda in t viaggi se e solo se ( tnKnnnt. Ciò significa in particolare che, sen12870,è sufficientefare solo16viaggi. Se ci sono meno regali da acquistare, non saranno necessari più viaggi, quindi questo è un limite superiore generale per ogni soluzione.(tt/2)nn1287016


Di seguito è la mia precedente "risposta", che fornisce un algoritmo euristico che non garantisce di ottenere l'ottimale, ma può essere calcolato in tempo polinomiale.

Un altro modo per formulare questo problema è trovare una copertura di grafici bipartiti sulle partizioni ( S i , T i ) per alcuni grafici diretti G con n nodi, in modo tale che la quantità di partizioni (ovvero i viaggi), qui m , sia minima.C={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

Innanzitutto, alcune osservazioni, in parte provenienti da altre risposte:

  • La strategia avida, in cui scegliamo un con un grafico bipartito in cui la quantità di spigoli in comune con G è massima, non porta a una soluzione ottimale (Un forte contro-esempio è il grafico completo con 6 nodi, dove questa strategia fallisce, indipendentemente dal grafico bipartito massimo scelto.).(Si,Ti)G6
  • La strategia avida non è ottimale per i grafici aciclici arbitrari, considerare il seguente grafico: hard-aciclico Sia per eSi={3,5,6} il grafico bipartito rimuove 4 bordi, ma solo { 3 , 5 , 6 } è ottimale.Si={1,3,6}4{3,5,6}
  • Qualsiasi algoritmo (ottimale) avido non può preferire la dimensione della partizione scelta rispetto alla quantità di cicli (di qualsiasi dimensione) "rimossi" dalla partizione. Per vedere questo, considera il grafico con n+2 nodi, dove esiste un ciclo di nodi e ogni nodo nel ciclo ha 2 bordi aggiuntivi in ​​uscita verso 2 nodi aggiuntivi A , B , che non hanno bordi in uscita (vedi figura sotto per un esempio in cui n = 4 ). Una scelta golosa che preferisce massimizzare la quantità di spigoli su cicli di lunghezza nn22A,Bn=4ninvierà tutti i vertici nel ciclo durante il primo viaggio. Questo è ottimale, in quanto ciò non rimuove eventuali bordi del ciclo e semplicemente ignorare e la rimozione di tutti i bordi dal ciclo rimuove tutti i bordi verso A , B pure. Quindi qualsiasi scelta avida che preferisce la dimensione della partizione rispetto alla rimozione di un ciclo non è ottimale.A,BA,B
    4-ciclo

Sulla base di queste osservazioni, propongo la seguente scelta golosa: Scegli tale, che la quantità di cicli che questo viaggio "rimuove" da G sia massima e in caso di legami, scegli una partizione con la massima sovrapposizione con G tra loro (cioè guardare i bordi non sui cicli).(Si,Ti)GG

Poiché questo algoritmo non è diverso dalla strategia avida 'di base' sui grafici aciclici (rimuovendo una quantità massima di spigoli su ogni viaggio), questo algoritmo avido non è quindi ottimale. Tuttavia, l'intuizione di rimuovere i cicli ha ancora senso ed è un miglioramento rispetto alla strategia avida di base, quindi potrebbe essere un'euristica decente.


1
Si afferma "Se a t esiste -multicoloring per , questa colorazione non utilizza più di ( tG elementi disuguali daP(C)". Questa affermazione è falsa. Nell'esempio banale di 3 nodi disconnessia,b,cesiste unavmulticolore 2, dovev(a)={1},v(b)={2},v(c)={1,2}(tt/2)P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}. Questo è un corretto 2-multicolore che usa più di elementi distinti. Intendevi dire "Seesisteunat-multicoloring perG,una di questecolorazioni non usa più di ( t(21)=2tG elementi disuguali diP(C)"?(tt/2)P(C)
Riley

Anzi, questo è ciò che intendevo. Un altro modo di vederlo è che se è una t-multicolore minima (cioè questa non è ( t - 1 ) -multicolore), usa esattamente ( tG(t1) elementi. Chiaramente, l'esempio che dai non è un controesempio alla corretta riformulazione. (tt/2)
Lucertola discreta

Non aspettare. Non utilizza esattamente elementi, ma al massimo. (tt/2)
Lucertola discreta

Posso capire come questa affermazione rivista abbia un senso intuitivo, ma puoi provarlo? Forse potresti in qualche modo dimostrare che qualsiasi t-multicolore può essere "migliorato" in modo che tutti i multicolori siano elementi di un insieme soddisfano i requisiti di dimensione, e che non esiste a , b K tale che a b . Ka,bKab
Riley,

@Riley Non sono sicuro di cosa intendi, quale affermazione vuoi che io elabori? Ho aggiornato la mia risposta in modo tale da indicare ciò che il tuo commento originale ha suggerito. Il resto della prova rimane inalterato. Per quanto riguarda la relazione tra il problema del colore multi e originale, l'idea chiave è che la multi-colorazione può essere vista come non dotata di "sottoinsiemi" adiacenti. Dal momento che il più grande sottoinsieme "sottoinsieme non a coppie" di ha dimensione ( tP(C)(tt/2) , potremmo anche considerare quel set come set di colori e ottenere il problema di colorazione.
Lucertola discreta

2

Vedo come ridurre questo problema a Colorazione grafica , che ti offre uno strumento per risolvere il problema (per piccoli casi!), Ma non ancora come ridurre nella direzione opposta (che stabilirà la durezza NP).

L'idea di base è quella di costruire un grafico che contenga un vertice per ogni acquisto e un margine tra due acquisti che non possono avvenire nello stesso viaggio; cerchiamo quindi di raggruppare gli acquisti nel minor numero possibile di gruppi ("viaggi"), in modo tale che non vi siano conflitti tra due acquisti nello stesso gruppo. In particolare, se è il grafico diretto originale in cui un bordo u v indica quella persona che devi acquistare una persona v un regalo, quindi crea un grafico non orientato H = ( X , Y ) in cui è presente un vertice x ed un bordo (non orientato) x u v x v w quando u vG=(V,E)uvuvH=(X,Y) per ogni bordouvinGxuvuvGxuvxvwuv e sono entrambi bordi (diretti) in G (se v acquista un regalo w durante un viaggio, nessuno può acquistare vvwGvwv un dono durante lo stesso viaggio). Una colorazione del vertice di è una partizione degli acquisti necessari (vertici in H ) in viaggi (colori) che non sono in conflitto (condividono un bordo) e una colorazione del vertice di dimensioni minime richiede il minor numero possibile di viaggi.HH

Potrebbe essere possibile andare nella direzione opposta (ridurre la colorazione del grafico, o qualche altro problema NP-difficile, al proprio problema, e quindi stabilire la sua durezza NP), adattando una riduzione da 3SAT a Colorazione del grafico (come, ad esempio, dettagliato a p. 10 delle note di Jeff Erickson ), ma non ci ho provato da solo.


Questa risposta è geniale; è proprio quello che stavo cercando. Nell'analizzare la complessità temporale di questo algoritmo, ci sono al massimo n2n vertici (presenti) e bordi. Quando cerco un algoritmo sullacolorazione del grafico,tutto ciò che trovo èO(2nn(2n3)(n2n)2 per un grafico con n vertici. Esiste un algoritmo più efficiente in questo caso perché esiste un limite superiore polinomiale sul numero di spigoli? O(2nn)n
Riley,

1
@Riley Probabilmente no, decidendo colorabilità, k 3 per un grafico con il massimo gradokk3 è già NP-difficile. Vedi questi [appunti della lezione] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) per una riduzione da 3-SAT a grafici con massimo grado 3.3
Lucertola discreta

@ Lucertola discreta: dove in quelle note di lezione danno una tale riduzione?

Perché questa risposta è accettata? Non mostra né la durezza NP né un algoritmo "ottimale" o addirittura un algoritmo efficiente, per quanto posso vedere.
Lucertola discreta

1
@Discretelizard Okay. Non pensavo che la domanda implicasse che stavo cercando un algoritmo di tempo P, specialmente vista la possibilità che questo problema fosse NP-difficile. Ma posso rendere questo punto più esplicito nella domanda originale. Deselezionerò questa risposta come corretta e aggiungerò una taglia di 100 punti (si scopre che la seconda deve essere 100 se sulla stessa domanda, ma sono disposto a offrirla perché sono solo punti internet immaginari, giusto? :)) di nuovo a chiunque sia in grado di mostrare questo problema è NP-difficile, O trova un algoritmo temporale polinomiale che lo risolva.
Riley,

0

È il tipo di problema in cui sarei molto preoccupato se il mio capo mi chiedesse di implementare un algoritmo che è garantito per trovare una soluzione ottimale in tempi ragionevoli.

Per trovare una soluzione non necessariamente ottimale: dato qualsiasi gruppo di persone e regali da acquistare, possiamo contare quanti regali un gruppo di persone può acquistare durante un viaggio di shopping. Quindi inizia con un gruppo vuoto (che può acquistare 0 regali). Per ogni persona che non appartiene al gruppo, determina quanti regali possono essere acquistati se quella persona viene aggiunta al gruppo. Se c'è una persona che possiamo aggiungere senza ridurre il numero di regali, scegli uno a caso tra quelli che aumentano il numero di regali acquistati dell'importo massimo, fino a quando aggiungere qualcuno ridurrebbe il numero di regali acquistati. Quindi fai quel giro di shopping e ricomincia da capo fino a quando tutti i regali non vengono acquistati.

Ripeterei alcune volte, scegliendo persone diverse "a caso" nel caso in cui trovi una soluzione migliore.

Nell'esempio, cinque persone che devono comprare un regalo l'una per l'altra, questo trova una soluzione in quattro viaggi, che è ottimale; se non aggiungessimo persone a un viaggio che lascia invariato il numero di regali senza migliorarlo, avremmo cinque viaggi. E 6 persone richiedono 5 viaggi.


Quindi, in altre parole, stai scegliendo avidamente i viaggi di shopping in base a quanti regali sarebbero stati acquistati. Potresti provare che questa procedura comporta necessariamente il numero minimo possibile di viaggi di shopping? In tal caso, hai lavorato in modo errato all'esempio di 6 persone. 6 persone richiedono solo 4 viaggi di shopping: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Riley

Assolutamente nessuna prova. Algoritmo goloso + fare diverse scelte casuali aumenterebbe un po 'le tue possibilità ma non farebbe 4 viaggi.
gnasher729,

Ho testato l'affermazione che il problema è avido e fallisce. Anche se testerai ogni possibile giro di shopping invece di aggiungere persone una per una, otterrai comunque 5 viaggi:{{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}. L'approccio avido vorrebbe che il secondo giro di acquisti comprasse 9 regali, ma nella soluzione ottimale il secondo giro di acquisti acquista 8 regali (supponendo che vada nell'ordine sopra elencato).
Riley,

In realtà, l'approccio avido non risolve nemmeno il caso di 5 persone in 4 viaggi di shopping: . {{1,2},{3,4},{5},{1,3},{2,4}}
Riley,

-1

Supponi di ordinare le persone in base a chi stanno ricevendo (genitore) e a chi stanno dando (figlio). Dal momento che ognuno dà un regalo e riceve un regalo, la funzione genitore-figlio è uno a uno.

Non vuoi mai mettere il genitore e il figlio nello stesso gruppo. Inizi con una persona a caso e ordini tutti di conseguenza, quindi c h i l d ( p 1 ) = p 2p1child(p1)=p2 , ecc. Metti tutto in un gruppo, e tutti p e v e n in un altro gruppo . Per l'ultima persona p n =parent( p 1 )poddpevenpn=parent(p1), quindi non vuoi che questa persona sia nello stesso gruppo con . Se n è pari, non è un problema. Altrimenti, hai bisogno di un gruppo aggiuntivo, che può essere solo p n da solo, nel caso più semplice.p1npn

Questo algoritmo presuppone che tutti siano connessi. Ma non è necessario che sia così. Se ci sono più cicli di disconnessione, in altre parole, se ad un certo punto, dove k ! = n , quindi finisci quel cerchio e inizi con uno nuovo, seguendo lo stesso algoritmo. Finché non unisci le probabilità e le pari dello stesso ciclo, puoi unire i cicli disconnessi.pk=parent(p1)k!=n

Questo algoritmo termina con al massimo 2 round (per ) e 3 round (per n dispari ).nn


Sembra che questo approccio risolva il problema solo nel caso in cui ognuno dia un regalo e riceva un presente, cioè dove il grafico è una permutazione. Non sono sicuro che la domanda intendesse porre solo su quel caso speciale - vediamo cosa ha da dire l'OP a riguardo.
DW

È vero, la mia soluzione è per un sotto-caso del problema in cui . i,fan_in(vi)=fan_out(vi)=1
ilke444,

Sì, non stavo chiedendo specificamente permutazioni. Si prega di consultare la domanda aggiornata in cui chiarisco alcune cose.
Riley,
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.