回答
这相当于vertex cover的NP完全问题。
简单的证明:如果我们可以找到最小顶点覆盖,我们可以找到最小的一组标签。只需使用vertices = tags union persons创建一个图形并适当地链接它们,并将所有标签连接在一起。最小的顶点覆盖对应于最小的标记集合,一旦我们认识到对于这个图形中的每个顶点覆盖,都有一个相同大小的顶点覆盖仅由“标记” - 翻译构成。
的oposite(顶点盖可以减少到最少的代码)可以通过创建一个标签和一个人的每个顶点,并与人连接的标签为每个顶点为同一顶点+它的邻居中显示。
你是对的,但这是一个可怕的“证明” – SoapBox 2010-08-07 21:55:03
这是一个NP难题。这将需要大量的处理来确保你确实拥有绝对最少数量的标签。
,我会用漂亮的快速和容易的解决办法是
while there are users left in the pool:
find the tag that represents the most users
add that tag to the list
remove all the users that that tag represents from the pool
If you want, you can then loop through and make sure there aren't any
unnecessary tags //but that probably won't help much
有,当然也有一定数量的标签可以进行布局方式,使得不是最好的方式,不会找到最佳解决方案。但是,我非常确定它应该非常接近。
+ 1,这将选择标签多于'ln(n)'标签而不是最优标签,而在实践中它通常会更好(在Skiena算法设计中查看手册,http://www.algorist.com/) – 2010-08-07 21:49:56
人员和标签之间的许多一对多的关系,形成了一个二分图,这是幸运从一般的情况完全不同。因此,这个问题不是NP完整的,但是can be solved in polynomial time。这似乎等于找到最大匹配,维基百科提供了几个alternatives。
- 1. 无法覆盖标签Tkinter
- 2. UIButton标签覆盖
- 3. 覆盖JFrame的最小化
- 4. 覆盖率最大化,最小化项目使用率的算法?
- 5. 覆盖的Grails G:link标签
- 6. 覆盖图上的标签?
- 7. 最大加权片段覆盖算法
- 8. 最小顶点覆盖使用会合的中间人
- 9. 最小VS最小顶点覆盖
- 10. 标签内容覆盖标签
- 11. 如何覆盖Meta标签?
- 12. 覆盖去结构标签
- 13. 覆盖使用接口的方法
- 14. Double.GetHashCode算法或覆盖
- 15. 如何使用EditorTemplate覆盖标签?
- 16. 覆盖接口方法PHP
- 17. 覆盖子接口方法
- 18. 如何提高最小化或覆盖PyGObject的窗口?
- 19. 具有最小刻度的图表的好标签算法
- 20. 回覆算法为集覆盖
- 21. 近似最小集合覆盖的Python
- 22. 寻找最小面积覆盖X个地理点百分点的算法
- 23. qfixj是否覆盖标签的值43
- 24. 覆盖Django表格中的标签
- 25. Bootstrap中的标签覆盖文本框
- 26. 覆盖窗口
- 27. 其中转移覆盖算法使用
- 28. 覆盖/禁用超级接口方法
- 29. 滑动窗口最小算法
- 30. 覆盖django-taggit标签,使它们总是小写
我会将所有人都标记为'person'并声明该标记结果集。 – relet 2010-08-07 21:24:07