2010-10-09 10 views
5

Ich denke, das könnte NP-komplett sein, aber ich werde trotzdem fragen. Gierige Algorithmen scheinen nicht in meinem Kopf zu funktionieren.Algorithmus, um die geringste Anzahl von Tags zu finden, die alle Elemente umfassen?

Angesichts einer Reihe von Elementen, jede mit 1 oder mehr Tags, möchte ich den kleinsten Satz von Tags, die alle Elemente abdecken.

Bearbeiten: Siehe my "solution" here.

+0

nur als Referenz, der naive Algorithmus ist n * 2^k. Iterieren Sie einfach die Leistungseinstellungen der Tags und prüfen Sie, ob alle markierten Elemente von der aktuellen Gruppe abgedeckt sind. n ist die Anzahl der markierten Objekte, k ist die Anzahl der Tags. – aaronasterling

+0

so ... gegeben 1000 Artikel und 3000 Tags ... Ich sehe 1.2e906 Operationen ... d. H. Unlösbar ... so viel für diesen Plan. – mpen

+0

@Mark, für den naivsten Weg, optimale Lösung zu bekommen, ist es n * 2^k. Ich bin mir nicht sicher über bessere Möglichkeiten. Wenn Sie nur eine Annäherung wünschen, kann es wahrscheinlich weit darüber hinaus verbessert werden. – aaronasterling

Antwort

6

Dies ist das Set Cover Problem, das NP-vollständig ist. Jedes Tag definiert eine Untermenge Ihrer Liste von Elementen, und Sie möchten die minimale Anzahl von Untergruppen (Tags) finden, deren Vereinigung der vollständigen Liste der Elemente entspricht.

+0

Wusste, dass es einen Namen haben würde ... wusste nur nicht, wie es hieß. Jetzt kann ich weiter untersuchen, danke :) – mpen

Verwandte Themen