bleed大, yauhh大 :
你們好,我以我實際上的處理問題來說明,可能比較好說明我整個想法脈絡
假設我現在有四筆交易分別為123, 012 (看成BCD, 與 ABC亦可), 014,145(看成ABE,與
BDE),一個批次處理兩筆。共有兩批次。
我要建一顆樹,統計交易所有出現集合的次數,採用「深度優先遞迴作法」(如我的程式
碼),第一個批次依順產生共15個集合:表示法 集合 (次數)
0 (1)
0 1 (1)
0 1 2 (1)
0 1 2 3 (0)
0 1 3 (0)
0 2 (0)
0 2 3 (0)
0 3 (0)
1 (2) 、 1 2 (2)、1 2 3 (1)、1 3 (1)
2 (2) 、 2 3 (1)、3 (1)
但是我的方法當發生產生出前一個批次未被產生出來的集合X,我必須參考集合X的子集(
第一個批次不算)。第一個批次用「深度優先遞迴作法」的產生順序沒關係,但在第二個
批次的產生順序卻會影響。
第二批次資料為{014,145},若我用「深度優先遞迴作法」依序我產生了
0 (1)
0 1 (1)
0 1 4 (1) (這時候 014 滿足上述條件,為新批次第一次被產生出來的集合,因此必須要
去參考 0, 1, 4, 0 1, 0 4, 14這些集合的資料)!這時深度就會有問題!
….
所以我直覺就是將每個批次的做法從原本「深度優先遞迴作法」修改成「當有集合X出現
,要確保X的子集都被我產生了」,這樣集合X就能參考得到正確的資料。
所以我才會在上一篇提到,『把想法實際寫flow chart時,複雜到不知道怎麼變成遞迴的
方式進行』是因為想把原本深度優先遞迴作法改成超集參考子集的作法,我是沒有設定非
得用遞迴。後來看了y大和b大的解說,似乎產生的方式和我原文中的想法推想地方是有點
類似的,但是我一直推不出來,懷疑自己推想會不會是錯的…才發問
最後回應bleed大問的地方:
當 0 1 2 3 (ABCD)是新出現的集合時,2 3 (CD)產生是否應該優先於0 1 3(ABD)? 這邊
是不用的,因為我只要確定集合0 1 2 3的子集都可以在結構中被我參考到就行了,抱歉
這邊我在原文只用「當有子集未被產生,會先產生子集的部分才能產生超集的部分」說明
,表達可能不夠清楚。
另外想請問,假設集合0 1 2 3是新出現集合,要產生對應的節點建到樹結構之前,我要
參考0123子集資料,是不是只能重新將0 1 2 3 再分解成子集{0, 1, 2, 3, 01, 02,
03, 012, 013, …} 一一的traverse找對應子集節點的資訊,計算完後再將 0 1 2 3建到
樹結構?
謝謝y大,說我問得問題不清楚的地方,往往是解答的地方,看來是我分析的部分
還不夠深入也是我要再加強的部分!!Thanks!!
最後再次謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.14.204