2010-05-16 19 views
11

Solo una domanda di curiosità. Ricorda quando durante la lezione di gruppo il professore dividerebbe le persone in gruppi di un certo numero (n)?Dividere le persone in squadre per la maggior parte delle soddisfazioni

Alcuni dei miei professori vorrebbe un elenco di n gente vuole lavorare con e n la gente non si vuole lavorare con da ogni studente, e poi magicamente si rivelano gruppi di n dove gli studenti sarebbero stati abbinati con le persone che preferiscono ed evitano di lavorare con persone che non preferiscono.

Per me questo algoritmo suona molto come un problema di zaino, ma ho pensato di chiedere in giro quale sarebbe il tuo approccio a questo tipo di problema.

EDIT: trovato an ACM article che descrive qualcosa esattamente come la mia domanda. Leggi il secondo paragrafo per deja vu.

+1

Che suona bene; i miei professori mi hanno sempre assegnato a lavorare con le persone più pigre della classe e finivo per fare troppo lavoro. ;-) –

+0

@james a volte è il modo migliore per imparare. ;) –

+7

@Jweede: potrebbe essere un buon modo per imparare che (1) la gente ti sfrutterà e (2) il tuo capo non riconoscerà il tuo duro lavoro –

risposta

5

A me sembra più una specie di problema clique.

Il mio modo di vedere il problema, che avevo creato la seguente graph:

  • vertici sarebbero gli studenti
  • Due studenti sarebbero collegati da un bordo se entrambe le seguenti cose sussistono:
    1. Almeno uno dei due studenti desidera lavorare con l'altro.
    2. Nessuno dei due studenti non vuole lavorare con l'altro.

Si tratta allora di suddividere il grafico in cricche di dimensione n. (Supponendo che il numero di studenti sia divisibile per n)

Se ciò non fosse possibile, probabilmente lascerei che il primo vincolo sui bordi scivolasse e avesse margini tra due persone purché nessuno dei due esplicitamente affermasse che non voglio lavorare con l'altro.

Per quanto riguarda un approccio per risolvere questo problema in modo efficiente, non ne ho idea, ma si spera che questo vi possa avvicinare ad alcuni approfondimenti sul problema.

+0

Interessante ... probabilmente potresti anche usarlo per capire la complessità del problema. – WhirlWind

+0

La teoria dei grafi era il mio altro pensiero sul problema. Se ricordo bene, le cricche sono NP-Hard. Tuttavia, non credo che le dimensioni delle classi saranno così grandi da renderlo intrattabile. –

+0

@Jweede, in realtà è NP-completo secondo l'articolo di wikipedia. Il che credo lo renda anche NP-Hard. – Cam

1

Questo problema può essere bruto-forzato, quindi il mio approccio sarebbe prima di forzarlo, quindi correggerlo quando ho un'idea migliore.

+0

Uhh, ok, sappiamo come forzarlo. Come è questa una risposta? – WhirlWind

+1

Penso che Knuth sarebbe d'accordo con te lì. –

+2

@WhirlWind: non ha chiesto specificamente quale algoritmo avremmo usato, ha chiesto "quale sarebbe il vostro approccio a questo tipo di problema". E questo sarebbe il mio approccio. –

3

Si potrebbe modellare questo abbastanza facilmente come un problema di clustering e non si sarebbe nemmeno davvero bisogno di definire uno spazio, si potrebbe in realtà solo definire le distanze:

fare due persone molto vicino se entrambi vogliono lavorare insieme. Chiude se uno di loro vuole lavorare con l'altro. Media distanza se c'è solo apatia. Lontano se uno non vuole lavorare con l'altro.

Quindi potresti trovare solo gruppi, yay. Quindi dividete tutti i gruppi di dimensioni eccessivamente grandi, con la certezza che le persone nei gruppi andrebbero tutti bene insieme.

+1

L'idea è interessante. Usare la distanza in quello spazio astratto ci consente di non provare a tracciare i punti (il che richiederebbe in primo luogo di risolvere il problema). Dal momento che il partizionamento di un cluster richiede circa il tempo O (Dimensione), penso che potremmo risolvere il problema abbastanza efficientemente lì. Uno dovrebbe però modificare la distanza, per tenere conto della simmetria (dovresti essere più propenso a lavorare con qualcuno che ti piace e ti piace piuttosto che con qualcuno che ti piace ma a cui non importa di te). Ciò significa 5 distanze anziché 3 se stimiamo che Love-Hate è equivalente a Medio-Medio. –

0

Ci sono un paio di algoritmi che è possibile utilizzare. Un grande esempio è il cosiddetto "problema del matrimonio stabile", che ha una soluzione perfetta.Si può leggere di più su di esso qui:

http://en.wikipedia.org/wiki/Stable_marriage_problem

Il problema matrimonio stabile funziona solo con due gruppi di persone (uomini/donne nel caso di matrimonio). Se vuoi formare una coppia puoi usare una variazione, il problema del compagno di stanza stabile. In questo caso crei coppie ma tutti provengono da un singolo pool.

Ma hai chiesto una squadra (che traduco in> 2 persone per squadra). In questo caso, puoi consentire a tutti di completare il loro meglio fino alla peggiore corrispondenza e quindi eseguire lo