亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

生成數字的分區

生成數字的分區

慕妹3242003 2019-11-29 10:36:37
我需要一種算法來生成所有可能的正數分區,然后我想到了一個算法(作為答案發布),但這是指數時間。該算法應返回所有可能的方式,以小于或等于其自身的正數之和表示一個數字。因此,例如對于數字5,結果將是:54 + 13 + 23 + 1 + 12 + 2 + 12 + 1 + 1 + 11 + 1 + 1 + 1 + 1所以我的問題是:有沒有更有效的算法呢?編輯:問題的標題是“一個數字的總和分解”,因為我真的不知道這叫什么。ShreevatsaR指出它們被稱為“分區”,因此我相應地編輯了問題標題。
查看完整描述

3 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

它稱為分區。[另請參閱Wikipedia:分區(數論)。]


分區的數量p(n)呈指數增長,因此生成所有分區的所有操作都必須花費指數時間。


也就是說,您可以做得比代碼更好。請參見David Eppstein在Python Algorithms and Data Structures中的此版本或其更新版本。


查看完整回答
反對 回復 2019-11-29
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

這是我在Python中的解決方案(指數時間):


q = { 1: [[1]] }


def decompose(n):

    try:

        return q[n]

    except:

        pass


    result = [[n]]


    for i in range(1, n):

        a = n-i

        R = decompose(i)

        for r in R:

            if r[0] <= a:

                result.append([a] + r)


    q[n] = result

    return result

 


>>> decompose(5)

[[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1], [1, 1, 1, 1, 1]]


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 842 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號