Buone disposizioni di posti a sedere per sequenza di pasti e tavoli di dimensioni k per un gruppo di persone


23

Data una serie di persone, vorrei sederle per una sequenza di pasti a tavoli di dimensioni . (Certo, ci sono abbastanza tavoli per sedere tutti per ogni pasto.) Vorrei organizzare questo in modo tale che nessuno condivida due volte un tavolo con la stessa persona. I valori tipici sono e e da 6 a 10 pasti.k | S | | S | = 45 k = 5Sk|S||S|=45k=5

Detto in modo più astratto, vorrei trovare una sequenza di partizioni di tale che ciascuna partizione sia costituita da sottoinsiemi disgiunti a coppie di cardinalità e dalla proprietà globale aggiunta che ogni intersezione tra due di tali sottoinsiemi non contiene più di un elemento. Sospetto che ciò possa essere formulato come un problema teorico o combinatorio del grafico.kSk

Sarei grato per una migliore formulazione del problema e di indicazioni per la letteratura pertinente in quanto è al di fuori del mio dominio.

Il contesto: questo potrebbe essere usato per la disposizione dei posti a sedere presso lo Schloss Dagstuhl, dove molti scienziati informatici vengono a discutere delle loro ricerche nel corso di una settimana. Attualmente i posti a sedere vengono effettuati in modo casuale e non sorprende che alcune persone si trovino a sedere con le stesse persone due volte (o più spesso) nel corso di una settimana. Inoltre, non sorprende che riceviamo alcune lamentele su questo e vaghi suggerimenti su come migliorarlo. Mi piacerebbe capirlo meglio. Una formulazione più forte del problema comporta l'ottimizzazione di chi è seduto uno accanto all'altro, ma credo che questo non sia rilevante per le tabelle di dimensioni 5.

Al di fuori dell'applicazione, penso che l'interessante domanda sia per il numero massimo di pasti che possono essere serviti per un dato e , cioè quante partizioni esistono.kSk


IIRC, sembra il problema Hamilton-Waterloo.
Juho,

Dando un'occhiata a un articolo sul problema Hamilton-Waterloo ho l'impressione che affronti il ​​problema più rigoroso di garantire che un partecipante si sieda uno accanto all'altro esattamente una volta.
Christian Lindig,

1
Il problema della scolaretta di Kirkman sembra essere di natura simile e potrebbe essere un punto di partenza.
Christian Lindig,

Risposte:


11

Ecco una variante della risposta originale (di seguito) che fornisce l'impostazione desiderata: tabelle di dimensioni 5, 45 persone e 10 pasti, tranne per il fatto che un pasto ha alcune tabelle di dimensioni 4.

Sia il campo di dimensione 9. Seleziona 4 linee verticali e degenerate per ogni e dichiarare il loro popolo "vuoto". Ci rimangono 81 - 9x4 = 45 persone.{ ( b , x ) | x F } b = 0 , 1 , 2 , 3F{(b,x)|xF}b=0,1,2,3

9 pasti sono dati da piste . Le intersezioni con le 4 linee degenerate vuote riducono le dimensioni della tabella a 9-4 = 5.a=0,1,,8

Un pasto aggiuntivo è dato dalle restanti linee degenerate per ogni . Qui la dimensione della tabella è 9. Tuttavia (in qualsiasi soluzione) possiamo dividere una tabella di dimensioni 9 in una tabella di dimensioni 5 e una di dimensioni 4.b = 4 , 5 , 6 , 7 , 8{(b,x)|xF}b=4,5,6,7,8

Se ci sono alcune persone in più si può usare il campo di dimensione 11.


Prima di tutto gestiamo persone e pasti. kk2k

Scegliere un campo finito di dimensione e identificare le persone con . Ad ogni pasto corrisponde una pendenza, a un tavolo una linea parallela a quella pendenza.k F × FFkF×F

In particolare, il pasto ha tabelle per ogni .k { ( x , a x + b ) | x F } b Fak{(x,ax+b)|xF}bF

La proprietà di intersezione desiderata è il fatto che le linee con pendenze distinte si intersecano esattamente in un punto.


Per gestire persone, dividerle in due gruppi di ciascuno e applicare la costruzione sopra a ciascun gruppo. Per gestire , etichetta (nel primo gruppo) una linea fissa come come "vuota". Potresti avere alcuni tavoli con persone.k 2 2 k 2 - k = 45 { ( x ,2k2k22k2k=45k - 1{(x,x)|xF}k1

Per più pasti, ad esempio, si potrebbe scegliere una divisione diversa in due gruppi all'inizio del sesto pasto. (Supponi di interlacciare la partizione originale, per assicurarti che i due gruppi "si mescolino"). Anche se, naturalmente, ciò può provocare alcune intersezioni.


Questa è una costruzione interessante ma troppo limitante per il mio caso particolare a causa di ma potrebbe servire come limite inferiore. |S|=k2
Christian Lindig,

Ho modificato la domanda per affrontare parametri più generali.
Manu,

1
Credo che [block design] ( en.wikipedia.org/wiki/Block_design ) sia la struttura appropriata per il caso generale, come sottolineato da domotorp di seguito. Tuttavia, mi piace l'aspetto costruttivo di questo e accettare è una buona risposta.
Christian Lindig,

3
Sono curioso di sapere se esiste una soluzione con 10 pasti; Ho cercato su Google ma non sono riuscito a trovare una risposta. Comunque, una volta trovata la soluzione migliore, che ne dici di codificarla in modo che gli organizzatori possano incollare i nomi dei partecipanti e recuperare tutti i posti assegnati? Sarebbe utile a loro? Se rendessimo più semplice, altri seminari potrebbero adottare questa bella tradizione di Dagstuhl.
Manu,

1
Bel aggiornamento. Dovremmo bere una birra a Dagstuhl in tuo onore se questo viene implementato :)
Suresh Venkat

4

Ecco un limite superiore (sciolto?) Sul numero di pasti che puoi servire.

|S|=nnn / kkn/k

Per ogni pasto, costruisci un grafico con un nodo per ogni persona in e un bordo quando due persone condividono una tabella. Questo grafico è una raccolta di cricche ciascuna della dimensione . Quindi il numero di spigoli nel grafico è .n / k k Θ ( n k )Sn/kkΘ(nk)

Poiché non si desidera che si verifichi alcun bordo in due diversi pasti e poiché il numero totale di bordi possibili su un set di vertici di dimensioni è , ciò indica che è possibile servire solo pasti.Θ ( n 2 ) O ( n / k )nΘ(n2)O(n/k)

In realtà, non è difficile trovare le costanti qui e quando fai la matematica, ottieni un limite superiore di esattamente , che, per i tuoi valori tipici, è 11.n1k1


3

Se vuoi che due persone siedano esattamente allo stesso tavolo una volta, questo si chiama 2-design risolvibile ed è stato studiato molto. Ovviamente consentire di saltare qualche pasto darebbe una soluzione al tuo problema quando due persone possono incontrarsi al massimo una volta. (Suppongo che potrebbero esistere altre soluzioni.)


Vorrei che due persone si incontrassero al massimo una volta. L'identità del tavolo non è un problema e non sono sicuro del significato di sedersi allo stesso tavolo come parte della tua risposta, ma cercherà la definizione collegata.
Christian Lindig,

2

Non sono sicuro che sia necessario un algoritmo deterministico, ma in passato ho risolto un problema simile utilizzando un metodo Monte Carlo a catena Markov .

Puoi vedere un esempio funzionante di questo approccio su Github : questo programma tenta di far sedere un gruppo di persone a tavoli di dimensioni fisse, dato un insieme di vincoli di posti che possono essere positivi o negativi ("must" o "must not" ) e assoluto o relativo ("preferibile").

Nota: questo programma non risolve esattamente lo stesso problema che proponi, ma fornisce una dimostrazione funzionante di un metodo Monte Carlo a catena Markov ed è abbastanza vicino da poterlo facilmente aggiustare secondo necessità per il tuo problema.

Il programma risolve il problema per una cena, ma nel tuo caso, un modo semplice per affrontare il problema sarebbe quello di eseguire l'algoritmo una volta per ogni cena, ogni volta fornendo i compagni precedenti di ogni commensale come requisiti sfocati o assolutamente negativi. (Il vantaggio dei requisiti fuzzy è la garanzia che l'algoritmo si fermerà su tutti gli input, anche se non è possibile trovare una disposizione perfetta).

In questo processo, proveremmo prima di sistemare ogni commensale in base ai requisiti assoluti - potresti voler saltare questa parte del processo, poiché funziona solo quando i requisiti assoluti sono relativamente piccoli; altrimenti si finisce con un problema incredibilmente grande !

Nel passaggio successivo, creiamo una serie di tabelle e assegniamo casualmente i partecipanti alle tabelle per una configurazione iniziale e viene calcolato un punteggio per rappresentare il numero di requisiti fuzzy che sono stati soddisfatti. Le coppie di commensali vengono commutate casualmente e il punteggio viene ricalcolato per quelle tabelle per determinare se la nuova configurazione è preferibile.

Questa parte del processo dovrebbe idealmente essere ripetuta con diverse configurazioni iniziali e può essere facilmente calcolata in parallelo.


|S|

0

Penso che qualsiasi disposizione dei posti valida sia equivalente a un ipergrafo d-regolare su | S | vertici, dove d è il numero di cene, con il grado al massimo k e il massimo livello di codice 1. La banale soluzione è di far sedere tutti sempre da soli, ma immagino che l'obiettivo sia ridurre al minimo il numero di tavoli?


1
Il numero di tabelle è fissato in questa impostazione. Ed è strettamente inferiore al numero di persone.
Suresh Venkat,
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.