看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
tropical72:若以dig為例,不就變成0~9,00~99,000~999?還是我誤會了? 03/11 18:58