2015-11-04 16 views
5

Ho un insieme di entità e ho bisogno di raggruppare queste entità in gruppi chiamati specie. L'insieme di tutte le specie definite chiama lo Universe e un'entità deve appartenere a una sola specie. Per questo ho una funzione booleana intransitiva chiamata f che ritorna se due entità, passate da parametri, sono compatibili. Un specie è definito da un gruppo di entità compatibili tra loro e un universe è definito da un gruppo di specie che non sono completamente compatibili tra loro, assumendo che la compatibilità di due specie sia definita dalla compatibilità di tutte le sue entità.Algoritmo per trovare il gruppo ottimale di elementi compatibili

Come è possibile determinare l'universo che contiene il minor numero di specie possibile per un determinato insieme di entità?

Ho provato come segue e la mia funzione restituisce un universo valido ma non quello con il minor numero possibile di specie.

+0

btw: Singolare delle specie è specie. Specie è una parola completamente diversa. – ciamej

+0

Sfortunatamente, la tua soluzione è 'O (n^3)' e la mia è 'O (n^4)'. Se le prestazioni sono un problema per te, potrei pensare a un modo più veloce per calcolarlo. – ciamej

+0

Puoi fornire l'input e l'output. E quale dovrebbe essere la complessità. – codebusta

risposta

4

Considerare le entità come vertici di un grafico e aggiungere spigoli tra i vertici se le entità sono compatibili.

In questo grafico risultante, la definizione di una specie corrisponde alla definizione di clique.

Quindi il problema di trovare il numero minimo di specie equivale a coprire il grafico con il minor numero di cricche. Questo problema è noto come minimum clique cover ed è NP-completo.

+0

Che è anche equivalente a Colorare il grafico, se trasformi ogni spigolo in un non-margine e viceversa. (Ne parlo nel caso qualcuno voglia trovare un'implementazione del risolutore ...) –

Problemi correlati