2014-01-21 38 views
1

給定一組其是一些已知的值相結合,得到一些值,如下所示(組,類型,屬性)的邏輯交集規則的基團:重構多個交叉點到交叉工會

group1 AND type1 AND property1 = value1 
group1 AND type1 AND property2 = value2 
group1 AND type1 AND property3 = value3 
group1 AND type2 AND property1 = value1 
group1 AND type2 AND property4 = value1 
group2 AND type1 AND property2 = value2 

這以下成立:

  • 組/類型/屬性的集合是有限的和已知的
  • 在唯一給定的規則按組/類型/屬性的組合
  • 許多規則可以引用單個值

如何可能我最好的辦法查找關於「摺疊」這些規則轉換成其中相同組的多個值被組合(見下文)的格式,同時保持相同的邏輯解釋的最佳解決方案原始查詢?

(group1) AND (type1 OR type2) AND (property1) = value1 
(group1 OR group2) AND (type1) AND (property2) = value2 
(group1) AND (type1) AND (property3) = value3 
(group1) AND (type2) AND (property4) = value1 

目的:的含有相同的邏輯信息作爲原始查找規則數量最少。

一種方法可能是採取原始查找「鍵」,按第一個值分組,然後按兩個鍵進行分組,然後對每個鍵的組合重複其餘鍵的不同實例。結果朝着正確的方向發展,但不能保證在多步驟方法中達到最優。

希望對更好的方法有任何想法,或者如果這實際上是一個普遍問題,則指向閱讀。

如有需要,歡迎提供任何澄清。

*爲笨重的標題道歉 - 希望描述的一般問題

編輯:我認爲這個問題(沒有具體的答案)表達的問題,因爲找到Union of all intersecting sets

編輯2:我應該說,目標表單實際上是一個要求,而不是來自@timrau的邏輯最優解決方案。表單爲(groups) AND (types) AND (properties) => value,其中組/類型/屬性僅用OR表示。

+0

你在說什麼語言?例如,你是說「group1,type1和property1都等於value1」嗎? – jimmyfever

+0

所以你試圖表達一個交集的聯合作爲(聯合的交集)的聯合s – Eric

+0

@jimmyfever在英文中,我會說一個記錄意味着「定義的組,類型和屬性都屬於這個值」。沒有特定的語言,處理一個*巨大*配置來源,我想表達不同。爲了實現我更喜歡C#或類似的,但我是開放的頭腦:) – Kyle

回答

2

對於每個可能的值,以乘積和形式構成布爾公式。 (爲簡單起見,我使用g1表示group1t1代表type1p1代表property1v1代表value1

v1 = g1 t1 p1 + g1 t2 p1 + g1 t2 p4 
v2 = g1 t1 p2 + g2 t1 p2 
v3 = g1 t1 p3 

然後,可以應用任何邏輯最小化算法/系統如Quine-McCluskeyEspressoABC,Logic Friday或甚至Karnaugh map,如果你實際上打算手工減少他們。

minimzation後,我們得到

v1 = g1 (t1+t2) p1 + g1 t2 p4 
v2 = (g1+g2) t1 p2 
v3 = g1 t1 p3 

然後他們可以被翻譯回原來的邏輯公式。