回答
這相當於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