2010-10-09 14 views
5

Sto pensando che questo potrebbe essere NP-completo, ma lo chiederò comunque. Gli algoritmi greedy non sembrano funzionare nella mia testa.Algoritmo per trovare il minor numero di tag che comprende tutti gli elementi?

Dato un set di elementi, ciascuno con 1 o più tag, voglio trovare il set di tag più piccolo che copra tutti gli articoli.

Modifica: Vedere my "solution" here.

+0

solo per riferimento, l'algoritmo ingenuo è n * 2^k. basta scorrere il power set dei tag e verificare che ogni elemento taggato sia coperto dal set corrente. n è il numero di elementi taggati, k è il numero di tag. – aaronasterling

+0

così ... dati 1000 articoli e 3000 tag ... Sto osservando le operazioni 1.2e906 ... cioè irrisolvibili ... così tanto per quel piano. – mpen

+0

@ Mark, per il modo più ingenuo per ottenere una soluzione ottimale è n * 2^k. Non sono sicuro dei modi migliori però. Se vuoi solo un'approssimazione, probabilmente può essere migliorata ben oltre. – aaronasterling

risposta

6

Questo è il problema Set Cover, che è NP-completo. Ogni tag definisce un sottoinsieme dell'elenco di elementi e si desidera trovare il numero minimo di sottoinsiemi (tag) la cui unione è uguale all'intero elenco di elementi.

+0

Sapeva che avrebbe avuto un nome ... semplicemente non sapeva come veniva chiamato. Ora posso approfondire, grazie :) – mpen

Problemi correlati