日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...

發布時間:2023/12/4 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

優化這種方法的方法不是找出更快的方式來生成排列,而是生成盡可能少的排列。

首先,如果您只想要按排序順序的組合,您將如何做到這一點?

您不需要生成0到100的所有可能組合,然后對其進行過濾。第一個數字a可以是0到100之間的b任何數字。第二個數字可以是0到(100-a)之間的任何值。第三個數字,c只能是100-ab。所以:for a in range(0, 101):

for b in range(0, 101-a):

c = 100-a-b

yield a, b, c

現在,而不是產生100*100*100組合過濾下來到100*50*1+1,我們只是生成100*50*1+1,為2000X加速。

但是,請記住,仍有X * (X/2)**N答案。因此,X * (X/2)**N及時計算它們而不是X**N最佳 - 但它仍然是指數時間。而且沒有辦法解決這個問題; 畢竟,你想要一個指數的結果。

你可以尋找方法讓第一部分itertools.product與reduceor 結合起來更簡潔accumulate,但我認為它最終會降低可讀性,并且你希望能夠擴展到任意任意N,并且還能得到所有的排列,而不僅僅是排序的。所以,在你這樣做之前保持它是可以理解的,然后在你完成之后尋找方法來壓縮它。

你顯然需要經歷N步驟。我認為使用遞歸比循環更容易理解。

當n為1時,唯一的組合是(x,)。

否則,對于從0到x的每個值a,您可以將該值與總和為xa的n-1個數的所有組合一起使用。所以:def sum_to_x(x, n):

if n == 1:

yield (x,)

return

for a in range(x+1):

for result in sum_to_x(x-a, n-1):

yield (a, *result)

現在你只需要添加排列,你就完成了:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from itertools.permutations(combi)

但是有一個問題:permutations置換位置,而不是價值。所以,如果你有,比如說(100, 0, 0),那六個排列是(100, 0, 0),(100, 0, 0),(0, 100, 0),(0, 0, 100),(0, 100, 0),(0, 0, 100)。

如果N非常小 - 就像在你的例子中那樣,N = 3且X = 100-可以很好地生成每個組合的所有6個排列并過濾它們:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from set(itertools.permutations(combi))

......但如果N能夠變大,我們也會在那里談論很多浪費的工作。

這里有很多關于如何在沒有重復值的情況下進行排列的好答案。例如,請參閱此問題。借用該答案的實現:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from unique_permutations(combi)def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from sympy.multiset_permutations(combi)

def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from more_itertools.distinct_permutations(combi)

總結

以上是生活随笔為你收集整理的python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。