第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

生成數(shù)值排列(迭代與遞歸)

生成數(shù)值排列(迭代與遞歸)

我想我正在嘗試做一些非?;厩曳浅:?jiǎn)單的事情。出于這個(gè)原因,我確信 Stack Overflow 上已經(jīng)有一篇關(guān)于此任務(wù)的帖子,但我想不會(huì)吧?也許這是一個(gè)無(wú)關(guān)緊要的概念?如果相關(guān)帖子已經(jīng)存在,我們深表歉意。我找不到它。這是我想要完成的任務(wù):給定列表長(zhǎng)度n和最大元素值m,生成列表的所有排列,其中每個(gè)元素在 0 和m之間變化。問題: 1. 有沒有辦法遞歸地執(zhí)行此操作?2. 對(duì)于這個(gè)概念來(lái)說(shuō),遞歸是最優(yōu)的(就計(jì)算資源、O 時(shí)間等而言)還是迭代更好?3.是否有更好的方法(不太復(fù)雜)來(lái)使用迭代來(lái)實(shí)現(xiàn)此目的(請(qǐng)參閱下面的代碼)?更多信息見下文我編輯了我的代碼和兩個(gè)示例以生成并展示完整的解決方案下面是兩個(gè)例子:示例 1:n = 3,m = 2 輸出:[0, 0, 0][0, 0, 1][0, 0, 2][0, 1, 0][0, 1, 1][0, 1, 2][0, 2, 0][0, 2, 1][0, 2, 2][1, 0, 0][1, 0, 1][1, 0, 2][1, 1, 0][1, 1, 1][1, 1, 2][1, 2, 0][1, 2, 1][1, 2, 2][2, 0, 0][2, 0, 1][2, 0, 2][2, 1, 0][2, 1, 1][2, 1, 2][2, 2, 0][2, 2, 1][2, 2, 2]示例 1:n = 2,m = 4 輸出:[0, 0][0, 1][0, 2][0, 3][0, 4][1, 0][1, 1][1, 2][1, 3][1, 4][2, 0][2, 1][2, 2][2, 3][2, 4][3, 0][3, 1][3, 2][3, 3][3, 4][4, 0][4, 1][4, 2][4, 3][4, 4]我的直覺告訴我這可以遞歸地完成,但我想不出如何做到這一點(diǎn)(我是一名初學(xué)者程序員)。對(duì)垃圾代碼表示歉意。一旦我想出了一種成功的方法,我就沒有花太多精力去清理它或提高它的效率。我的猜測(cè)是這段代碼對(duì)于我試圖解決的概念來(lái)說(shuō)太復(fù)雜了。
查看完整描述

3 回答

?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

我不認(rèn)為你的 n 和 m 的輸出分別是 3, 2,真的有意義。在第6行之后,后面[0, 2, 0]不應(yīng)該接代替嗎?第 13 排之后也發(fā)生了同樣的情況。[0, 2, 1][1, 0, 0]


無(wú)論如何,這是一個(gè)遞歸替代方案:


n = 3

m = 2


def permutation(n, m):

    if n <= 0:

        yield []

    else:

        for i in range(m+1):

            for j in permutation(n-1, m):

                yield [i] + j


# or even shorter

def permutation(n, m):

    return [[i] + j for i in range(m + 1) for j in permutation(n - 1, m)] if n > 0 else []



for i in permutation(n, m):

    print(i)

輸出:


[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], ..., [2, 1, 0], [2, 1, 1], [2, 1, 2], [2, 2, 0], [2, 2, 1], [2, 2, 2]]



查看完整回答
反對(duì) 回復(fù) 2024-01-27
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

這個(gè)問題似乎得到了解答,但我想為迭代排列提供一個(gè)更簡(jiǎn)單的替代方案。在這里,我使用列表推導(dǎo)式、格式化字符串文字(f'string' 字符串)和 eval 內(nèi)置方法。希望這個(gè)觀點(diǎn)對(duì)你有幫助(以某種方式?)。


def get_permutations_list(array_size, max_value):

    '''Returns a list of arrays that represent all permutations between zero

    and max_value'''


    array_member =''

    for_loops=''


    #Does a loop iteration for each member of the permutation list template

    for i in range(array_size):


        #adds a new member in each permutation

        array_member += f'x{i}, '


        #adds a new corresponding for loop

        for_loops+=" for x{i} in range({value})".format(i=i, 

                                                   value=max_value)


    output = f'[[{array_member}] {for_loops}]' #combines it all together

    return eval(output)


a = get_permutations_list(array_size=2, max_value=2)

print(a)

#Result: [[0,0],[0,1],[1,0],[1,1]]


查看完整回答
反對(duì) 回復(fù) 2024-01-27
?
開滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

3.你想要得到所有的排列。給定 n 和 m 的排列數(shù)為 (m+1)^n。因?yàn)槟鷮?shí)際上想要打印所有這些,所以時(shí)間復(fù)雜度也是 O((m+1)^n),這是迭代執(zhí)行時(shí)得到的結(jié)果。

1+2。我認(rèn)為你不應(yīng)該使用遞歸來(lái)做到這一點(diǎn),O((m+1)^n) 是你可以做到這一點(diǎn)的最佳時(shí)間,這就是使用迭代時(shí)得到的結(jié)果。遞歸也會(huì)為其內(nèi)存堆棧占用更多內(nèi)存。


查看完整回答
反對(duì) 回復(fù) 2024-01-27
  • 3 回答
  • 0 關(guān)注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)