我的問題是如下快捷方式,如果子集包含子集
我有一組K個元素的
這組的每個子集是由STD的實例表示::位集合(位我是真的=還有就是元素i的子集)
我有一個輸入的子集I,和子集S1的列表...錫
我想從S1返回的項目.. .Sn,使得Si包含在I中(即,每當Si有一點成立時,它必須是真實的,因爲我們ll)
顯然這可以在K * n中完成,通過獨立地對每個S子集執行相同的檢查。
但是,有沒有一種通用的方法可以做得更好?我很確定這是可能的,因爲在我的情況下,子集列表S1 ... Sn始終是相同的,並且可以進行預處理。 我相信這將會是可能的子集存儲在一個特定的數據結構(樹?線索?),這樣我可以放棄很多相同一氣呵成,等
example :
K = 5
I = [1,1,0,1,0]
S1 = [1,0,0,0,0]
S2 = [1,1,0,1,0]
S3 = [1,1,1,0,0]
the ouput should return S1,S2 (not S3!)
我有一個不變設置S1,S2,...,Sn
,並在相同的集合上運行I
的不同查詢。
編輯:如果S1包括在S2 比如:我說的是什麼樣的 例如檢查S1包括在I:如果沒有,那麼S2可以不包括在我(沒有檢查需要) 如果S3是S1和S2的結合:如果S1和S2包含在I中,那麼S3
不確定我關注'我想返回S1 ... Sn中的項目,使得Si包含在I.中,如果它與我有一點共同點,你想返回Si嗎?形式上,你在尋找'{S_i | S_i [intersection] I!= {}}?也許增加一個例子會澄清你到底是什麼。 – amit
我添加了一個例子 – lezebulon
明白了,還有,關於集合S1,..,Sn'的任何知識,任何排序順序?否則,你的'O(K * n)'基本上是線性時間,我不認爲有可能在沒有實際讀取所有輸入的情況下完成它,除非有一些你可以使用的命令。 (如果你有常數集S1,...,Sn和'I'總是等價的話,你可以改進它) – amit