導航:首頁 > 源碼編譯 > 冪集演算法

冪集演算法

發布時間:2023-02-05 06:18:16

Ⅰ 布爾代數

所謂一個布爾代數,是指一個有序的四元組〈B,∨,∧,*〉,其中B是一個非空的集合,∨與∧是定義在B上的兩個二元運算,*是定義在B上的一個一元運算,並且它們滿足一定的條件。以布爾值(或稱邏輯值)為基本研究對象並以此延伸至相關研究方向的一門數學學科。布爾值有兩個,真(用1表示)和假(用0表示)。布爾值的基本運算是基本邏輯運算,如:邏輯與,邏輯或,邏輯非,異或,同或等等。有自己的一套概念如最大項、最小項、卡諾圖、反演律、吸收律之類。

例子
最簡單的布爾代數只有兩個元素 0 和 1,並通過如下規則定義:
∧ 0 1
0 0 0
1 0 1
∨ 0 1
0 0 1
1 1 1
它應用於邏輯中,解釋 0 為假,1 為真,∧ 為與,∨ 為或,¬ 為非。 涉及變數和布爾運算的表達式代表了陳述形式,兩個這樣的表達式可以使用上面的公理證實為等價的,當且僅當對應的陳述形式是邏輯等價的。
兩元素的布爾代數也是在電子工程中用於電路設計;這里的 0 和 1 代表數字電路中一個位的兩種不同狀態,典型的是高和低電壓。電路通過包含變數的表達式來描述,兩個這種表達式對這些變數的所有的值是等價的,當且僅當對應的電路有相同的輸入-輸出行為。此外,所有可能的輸入-輸出行為都可以使用合適的布爾表達式來建摸。
兩元素布爾代數在布爾代數的一般理論中也是重要的,因為涉及多個變數的等式是在所有布爾代數中普遍真實的,當且僅當它在兩個元素的布爾代數中是真實的(這總是可以通過平凡的蠻力演算法證實)。比如證實下列定律(合意(Consensus)定理)在所有布爾代數中是普遍有效的:
(a ∨ b) ∧ (¬a ∨ c) ∧ (b ∨ c) ≡ (a ∨ b) ∧ (¬a ∨ c)
(a ∧ b) ∨ (¬a ∧ c) ∨ (b ∧ c) ≡ (a ∧ b) ∨ (¬a ∧ c)
任何給定集合 S 的冪集(子集的集合)形成有兩個運算 ∨ := ∪ (並)和 ∧ := ∩ (交)的布爾代數。最小的元素 0 是空集而最大元素 1 是集合 S 自身。
有限的或者 cofinite 的集合 S 的所有子集的集合是布爾代數。
對於任何自然數 n,n 的所有正約數的集合形成一個分配格,如果我們對 a | b 寫 a ≤ b。這個格是布爾代數當且僅當 n 是無平方因子的。這個布爾代數的最小的元素 0 是自然數 1;這個布爾代數的最大元素 1 是自然數 n。
布爾代數的另一個例子來自拓撲空間: 如果 X 是一個拓撲空間,它既是開放的又是閉合的,X 的所有子集的搜集形成有兩個運算 ∨ := ∪ (並)和 ∧ := ∩ (交)的布爾代數。
如果 R 是一個任意的環,並且我們定義中心冪等元(central idempotent)的集合為
A = { e ∈ R : e2 = e, ex = xe, ∀x ∈ R }
則集合 A 成為有兩個運算 e ∨ f := e + f + ef 和 e ∧ f := ef 的布爾代數。

希望幫到你 望採納 謝謝 加油

Ⅱ 淘寶sku演算法淺析

        最近項目遇到了一個難題,就是模仿淘寶上的選擇規格,首先我先來解釋下什麼是sku,sku(Stock Keeping Unit 庫存量單位)即庫存進出計量的基本單元,可以是以件,盒,托盤等為單位。sku這是對於大型連鎖超市DC(配送中心)物流管理的一個必要的方法。上面的話可能你們沒有聽懂是什麼意思,具體請打開手淘,選擇服裝類的產品(由於服裝類的產品可選規格較多,比較容易進行比較)。
        當時項目開始並不是採用這個sku演算法,而是採用遍歷查詢的方式,將所有結果進行拆分,拆分成幾個不同屬性的集合;例如顏色、內存、大小等;然後通過用戶點擊按鈕,去遍歷後台有無包括這種規格的商品(除了庫存為0);如果沒有則把按鈕變成灰色(即改變狀態);讓我們來分析下這種方案的優缺點。

尺寸:5.0寸、4.5寸
型號:土豪金、紅、黑
內存:128G、64G

        現在這幾種類型一共有2 * 3 * 2 = 12種排列組合,然而只有3種組合是正確的(其中還要排除庫存為0的情況)一開始先保存好每一個按鈕和每一列的位置進入一個List<List<TagEnable>> 的數組中,TagEnable記錄著每一個按鈕的狀態(0代表者正常,1代表選中,2代表不可選(庫存為0||無規格));然後當用戶點擊的時候,用Map<Integer,String> 記錄選中的按鈕和文字;並把每一個按鈕先設置為不可點擊,之後根據文字去對按鈕進行設置狀態。
        這種演算法是比較直接的一種實現,但是很繁瑣,循環嵌套循環,可以簡單分析下演算法復雜度,如果sku屬性組合元素的總和數用m來表示,可選的數據的長度是n的話,那麼演算法的步驟大概是m*n,這看起來好像不怎麼復雜;不過,每次判斷一個sku組合是否和result中的 組合匹配,卻不是一個簡單的過程,實際上,這可以看做是一個字元串匹配的一個演算法了, 最簡單的還是使用正則匹配,m * n次正則匹配,這樣就不怎麼快了吧。正則表達式很不穩定,萬一sku組合中有一些特殊字元,就可能導致一個正則匹配沒能匹配到我們想要的表達式。
而且,當用戶全部選中的時候,根據這種演算法,只會出現一種情況,就是未選中的全部都變成不可選(即變成灰色),這大大影響了用戶的體驗。如下圖:

        sku演算法是利用數學的集合思想來寫的。即先把可能的排列組合列出來,即取出集合中的所有子集,數學上叫做冪集。
就是如果第一條數據["5.0寸", "黑", "128G"]可選,
那麼以下的組合肯定存在:

例如:當用戶進行如下的選擇:5.0寸、128G
那麼如何判斷 4.5寸這個按鈕的狀態呢?只需判斷4.5寸、128G是否可選(集合U是否存在(4.5寸-128G)這個組合並且庫存不為0),以此類推:

於是乎,我們可以得出下列的結果:

在使用淘寶的過程中,我發現他們可以根據用戶選擇按鈕的唯一值確定圖像(例如在這案例中,顏色是唯一的),當用戶只選擇唯一值時,便可以確定其圖像

做法是這樣子的:先遍歷原始數據,如果用戶選擇的組合在原數據中是唯一的話,則可以確定其圖像。

https://github.com/hfkai/SkuSelects

閱讀全文

與冪集演算法相關的資料

熱點內容
北京通app怎麼注冊登錄 瀏覽:820
iphone上的數據怎麼轉移到安卓 瀏覽:743
python求每個時段平均值 瀏覽:244
安卓手機右上出現Hg什麼意思 瀏覽:69
程序員神經 瀏覽:753
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:686
python評論樹講解 瀏覽:679
juniper防火牆常用命令 瀏覽:426
vapp怎麼下載地址 瀏覽:11
pdf裡面內容怎麼修改 瀏覽:807
收藏網址加密的瀏覽器 瀏覽:1000
phpurl問號 瀏覽:898
什麼筆記本電腦可以用python 瀏覽:135
加密相冊如何翻找 瀏覽:992
泰州地區DNS伺服器地址 瀏覽:849
一種app可以買菜用英語怎麼說 瀏覽:196
中國聯通app裡面通話詳單怎麼刪除 瀏覽:505
計算機網路編譯軟體 瀏覽:100
程序員說不能說的秘密 瀏覽:700