看板 C_and_CPP 關於我們 聯絡資訊
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