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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登陆xp系统,无法显示桌面

症状登录到 Windows xp 后,可能会看到空白桌面或看不到桌面。出现这种情况时,可以按下 CtrlAltDelete 键启动任务管理器,但正在运行的任务或进程列表中却没有列出 Explorer.exe。启动 Explorer.exe 的新实例也无法解决问题。 原因…

孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项

怀孕期间孕妇使用电脑有电磁辐射吗?孕妇当然可以使用电脑,经科学研究发现在电脑前工作对孕妇不会产生什么影响!孕妇既然是特别保护对象,那么怀孕妈妈在使用电脑时也会有一些注意事项。第一宝宝小编为准妈妈搜集了十二条注意事项。…

python类和函数_构建程序. Python中的类和函数

如果希望mainfunc的所有实例都使用相同的KeySeq对象,则可以使用默认参数值技巧: def mainfunc(ksKeySeq()): key ks.next() 只要您实际上没有传递ks值,对mainfunc的所有调用都将使用在定义函数时创建的KeySeq实例. 如果您不知道,这就是为什么:函数是一个…

CCDP-思科认证网络设计高级工程师

CCDP是Cisco售前设计支持工程师的最高级认证。获得CCDP认证证书应能够运用应具有的网络知识、对设备安装、配置和操作技巧对复杂的LAN、WAN和交换式局域网进行设计。 CCDP认证必备条件必须先获取CCNA和CCDA证书CCDP考试642-801 BSCI 642-811 BCMSN 642-871 ARCH CCDP 重新认证C…

.NET5实战千万并发,性能碾压各版本,云原生时代,.NET5为王!

在移动互联网时代掉队的.NET,当下正凭借着.NET5的开源跨平台以及容器友好,在云原生时代正在重铸辉煌。而作为.NET开发者,新年跳槽季的高并发问题会更多了,因为高并发能牵扯出太多问题,接口响应超时、CPU负载升高、GC频…

html点击按钮计算两个输入框的和_小程序计算报价功能介绍

一、使用场景用户可在管理后台设置计算值和运算公式,访客输入对应计算值,即可实现自动计算出结果,并提供相关的咨询入口,适用于装修、建材、房贷、车险等行业的报价行为。二、功能版本限制小程序至尊版可开启和使用计算报价功能。…

中南民族大学计算机图像处理实验报告,中南民族大学数字图像处理程序及图像...

数字图像处理实验课 matlab实验程序 以及图像结果 附带有命名图仅供参考 定有错误 木有绝对正确实验11—1close all;clear;fzeros(40,40);%f(10:30,10:30)1;subplot(1,3,1);%imshow(f);%Ffft2(f)subplot(1,3,2);%imshow(F);%Dlog(1abs(F));%subplot(1,3,3);imshow(D);1——2clc…

用python画树_Python+Turtle动态绘制一棵树实例分享

本文实例主要是对turtle的使用,实现Pythonturtle动态绘制一棵树的实例,具体代码: # drawtree.py from turtle import Turtle, mainloop def tree(plist, l, a, f): """ plist is list of pens l is length of branch a is hal…

[ASP.NET2.0] asp.net在ie7中使用FileUpload上传前预览图片 [ZT]

asp.net在ie7中使用FileUpload上传前预览图片 因为安全性问题&#xff0c;IE7禁用了image控件引用本地图片&#xff0c;为了这个问题郁闷了好几天&#xff0c;终于找到了解决方案&#xff0c;好东西要与大家分享&#xff0c;代码如下&#xff1a;此段代码放于<head> ....…

如何在 ASP.Net Core 使用 内存缓存

ASP.NET Core 是一个轻量级&#xff0c;模块化的框架&#xff0c;常用来在 Windows&#xff0c;Linux 和 MacOS 上构建高性能&#xff0c;现代化的web框架&#xff0c;不像过去的 Asp.NET&#xff0c;在 ASP.NET Core 中并没有内置 Cache 对象&#xff0c;不过你可以通过 nuget…

360浏览器5兼容模式吗_个独模式真能将企业总体税负降低至5%吗,为何大家都热衷核定征收...

个独模式真的能将企业总体税负降低至5%吗&#xff0c;为何大家都热衷选择申请核定征收企业性质不同&#xff0c;结构不同&#xff0c;体量不同&#xff0c;业务模式不同&#xff0c;自然纳税方式和税负也有差别。不同的纳税对象应该采取不同的节税方式&#xff0c;用合理合法的…

五年级计算机下册工作计划,五年级下学期工作计划

指导思想&#xff1a;五年级组2009年下学期工作计划是坚持"以人为本,以德为先"的宗旨,以课堂教学为阵地,以课改为中心工作,努力培养本年级学生良好的学习风尚,努力建设一支团结协作,努力进取,敢于创新的教师团队.年级情况&#xff0e;五年级组共有十名教师,其中四个班…

python3 for循环_从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列

《从零开始PYTHON3》第六讲 几乎但凡接触过一点编程的人都知道for循环&#xff0c;在大多数语言的学习中&#xff0c;这也是第一个要学习的循环模式。 但是在Python中&#xff0c;我们把for循环放到了while循环的后面。原因是&#xff0c;Python中的for循环已经完全不是你知道的…

Yahoo Mail,慢功出细活〔转载〕

Yahoo Mail&#xff0c;慢功出细活2007年08月31日13:59 原文链接&#xff1a;http://chinese.wsj.com/gb/20070831/ptk141709.asp?sourcechannel用两年时间测试一款软件可真算费功夫&#xff0c;但雅虎公司(Yahoo! Inc.)开发完成新版本的电子邮箱软件Yahoo Mail就花了这么长…

浅谈如何理解领域驱动设计

本文作者为长沙.NET社区开发者微笑刺客&#xff0c;转载已获得作者授权。前言什么是领域&#xff0c;我习惯描述的是制药领域、环境领域、建筑领域、金融领域等&#xff0c;而在领域内&#xff0c;各种业务规则、业务知识盛行&#xff0c;如何有效的把控规则的变化&#xff0c;…

lol战绩查询接口_LOL:莫名其妙被封号?3把躺赢局被说是代打

Hello&#xff0c;大家好&#xff0c;这里是小皮说电竞&#xff0c;每天都会为大家带来LOL有趣的资讯&#xff0c;喜欢的话记得点个关注哦~英雄联盟已经发展至S10了&#xff0c;这么久以来&#xff0c;许多小伙伴都碰到过一个问题&#xff0c;那就是封号。封号的原因有很多&…

计算机cnc键代表啥,计算器上的cnc键表示啥

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。计算器上的cnc键代表清除。计算器是现代人发明的可以进行数字运算的电子机器。现代的电子计算器能进行数学运算的手持电子机器&#xff0c;拥有集成电路芯片&#xff0c;但结构比电脑…

apk源码查看工具_如何查看Linux命令工具的源码?

点击上方「嵌入式大杂烩」&#xff0c;「星标公众号」第一时间查看精彩文章&#xff01;上一篇分享了两个使用的小工具&#xff1a;《如何同时输出调试信息到终端及文件&#xff1f;》。有位小伙伴留言问道tee工具的代码在哪&#xff1a;这篇文章我们就来简单分享一下。首先&am…

final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了

什么是代理模式为其他对象提供一种代理以控制对这个对象的访问。为什么使用代理模式中介隔离&#xff1a;在某些情况下&#xff0c;一个客户类不想或者不能直接引用一个委托对象&#xff0c;而代理类对象可以在客户类和委托对象之间起到中介的作用&#xff0c;其特征是代理类和…

《The C++ Standard Library》第50页 关于传递auto_ptr的问题

第50页最后一段话: 我怎么没记得在第43页里说不能传递auto_ptr. 可是我在第43页没有找到”不要用任何方式来传递auto_ptr”类似的语句啊。 而且里面讲的是source和sink,说的就是该如何传递auto_ptr和转移auto_ptr的ownership啊。 倒是在第44页中找到了这样的话&#xff1a; 第4…