→ tropical72:若以dig為例,不就變成0~9,00~99,000~999?還是我誤會了? 03/11 18:58
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
CodeBlock 8.02
問題(Question):
計算資料所有的組合和其出現的次數
目前寫法是以深度優先產生所有組合(目前已完成),但是要改成當深度下去時
當有子集未被產生,會先產生子集的部分才能產生超集的部分
比方: 總共有4個attributes A,B,C,D
目前深度產生方式: A, AB, ABC, ABCD, ABD, AC ,ACD, AD, B...
改成當AB要產生時,因為B還沒被產生,所以必須先產生B才能產生AB
要產生ABC時,要先產生C、AC、BC才能產生ABC
餵入的資料(Input):
程式假設三筆交易 123, 012, 0123 以item_id[]儲存
也就是看成 BCD, ABC, ABCD 這樣的資料
程式碼(Code):(請善用置底文網頁, 記得排版)
目前寫好深度的部分
set() -->會去call subset
subset() 遞迴產生子集組合
http://codepad.org/PVXepiw4
補充說明(Supplement):
我的想法是:(以4個attributes為例ABCD)
當產生A後,call subset時,會以A為prefix一直遞迴下去,直到換B為prefix遞迴...
觀察的結果是:每深度一次,就會多出一個attributes要和原來出現的屬性做結合
因此在call subset 要產生AB之前,就會出現B屬性是新屬性沒被處理
所以 新屬性B 先產生set(B)的部分,再和已處理過的attribute(A)結合成(AB)
attributes : A B C D
先深度
A (ok)
AB (B為新屬性,提前產生B,也就是set(B),再產生(AB))
ABC (C為新屬性,提前產生C,和A結合產生(AC)和B結合產生(BC) )
ABCD (D為新屬性,提前產生D,set(D)先產生D,再和A,B,C結合產生其他長度的組合 )
把上面想法實際寫flow chart時,複雜到不知道怎麼變成遞迴的方式進行
不知道是這樣產生的次序本來就很不容易找到規則呢?
先感謝板上的板友回應 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.14.209