是否有發現的ķ非負整數的所有序列,其總和Ñ一種有效的算法,同時避免旋轉(完全,如果可能的話) ?順序很重要,但旋轉對於我正在處理的問題是多餘的。列出所有的k元組的條目求和至n,忽略轉速
例如,ķ = 3和Ñ = 3,我想獲得如下所示的列表:
(3,0,0),(2,1,0) ,(2,0,1),(1,1,1)。
元組(0,3,0)不應該在列表中,因爲它是(3,0,0)的旋轉。但是,(0,3,0)可以在列表而不是(3,0,0)中。請注意,(2,1,0)和(2,0,1)都在列表中 - 我不想避免所有排列的元組,只是旋轉。此外,0是一個有效的條目 - 我不尋找分區n。
我的當前程序是循環從超過1 < = 我 < = Ñ,設定第一條目等於我,然後遞歸地解決問題爲N」 = Ñ - 我和K」 = ķ - 1,我通過強制要求的條目是嚴格大於第一得到一些加速,但這種方法仍然產生大量的旋轉 - 例如,給出ñ = 4和k = 3,(2,2,0)和(2,0,2)都在輸出列表中。
編輯:以粗體添加說明。我很抱歉沒有把這些問題弄清楚,因爲我在原帖中應該有這些問題。
你**是**尋找n的分區,但大小**高達** K。並插入零填充k空間 – 2010-09-17 05:39:52
我認爲如果您計算所有總和爲n的無序集合,然後找到所有避免這些集合的旋轉的唯一序列,那麼您會最好。 – 2010-09-17 05:55:25
@belisarius:找到尺寸爲_k_的_n_的所有分區是問題的一部分,但不是全部。嚴格地說,如果加數的順序是置換的,那麼兩個分區是相同的。我沒有計算分區的困難,或者甚至是所有的加數排列 - 問題是找到所有的排列順序。 – Seth 2010-09-17 06:08:11