Py学习  »  Python

暴力测试也疯狂——论Python代码优化

Python小屋 • 6 年前 • 294 次点击  

问题描述:在123456789这9个数字中间插入任意多个+和-的组合,使得表达式的值为100,输出所有符合条件的表达式。

对于该问题,前天推送了一个暴力测试的代码,通过itertools标准库的combinations()函数获得插入位置,然后通过itertools标准库的permutations()函数获得+和-的排列,最后构造表达式并测试其值是否为100,详见Python查找所有类似于123-45-67+89 = 100的组合

但是第一个版本的代码运行速度太慢,大概需要3.5小时。于是昨天推送了中国传媒大学胡凤国老师提出后我来实现的一个三进制算法,使用三进制加法来生成运算符的插入位置,其实也是一种暴力测试,但是由于大幅度减少了无效运算符排列,使得代码运行速度很快,瞬间就能输出结果,详见Python使用超高效算法查找所有类似123-45-67+89=100的组合

后经热心屋友@G_C提醒,第一个版本的暴力测试代码其实是可以优化提速的,于是有了今天的第三个版本的代码。

核心思路:减少不必要的计算。

参考代码与优化要点:


----------相关阅读----------

1900页Python系列PPT分享一:基础知识(106页)

1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)

1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)

1900页Python系列PPT分享四:字符串与正则表达式(109页)

1900页Python系列PPT分享五:函数设计与应用(134页)

1900页Python系列PPT分享六:面向对象程序设计(86页)

1900页Python系列PPT分享七:文件操作(132页)

报告PPT(163页):基于Python语言的课程群建设探讨与实践

1000道Python题库系列分享四(40道)

1000道Python题库系列分享三(30道)

1000道Python题库系列分享二(48道)

1000道Python题库系列分享一(17道)


Python计算序列中数字最大差值(美团2016校招笔试题)

Python正则表达式查找最长数字子串(好未来2017笔试题)

Python多种方法实现句子中单词倒置(好未来2017笔试题)

Python查找任意字符串中只出现一次的字符(2016奇虎笔试题)

Python求解进制问题(阿里巴巴2015笔试题)

Python列表模拟页面调度LRU算法(京东2016笔试题)

妙用Python集合求解啤酒问题(携程2016笔试题)

Python两种方法求解登楼梯问题(京东2016笔试题)


又一个学期结束了,送给在校大学生几句话

淡定!不要因为纳入了高考和二级考试甚至极个别小学课程就盲目夸大Python!

全国计算机等级考试二级Python考试大纲预测和分析

大家都在学Python,你和别人的差距在哪?

大学生们颤抖吧,中学生已经开始学Python了!

祝所有程序员1024节日快乐

学会提问,你就成功了一大半!

盘点那些让人上火的提问方式(论如何让交流更高效)



----------喜大普奔----------

1、董付国老师Python系列教材:

《Python程序设计基础》(2018年2月第6次印刷)

《Python程序设计(第2版)》(2018年2月第5次印刷)

《Python可以这样学》(2018年2月第5次印刷)(本书已被引入台湾发行繁体版)

《Python程序设计开发宝典》(2018年2月第3次印刷)

《中学生可以这样学Python》

《Python程序设计基础(第2版)》(2018年3月隆重上市)

董付国老师6本Python系列图书阅读指南

董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材

热烈庆祝《Python可以这样学》在台湾发行繁体版


2、董老师免费视频地址: https://pan.baidu.com/s/1jJeAs8Q 密码: px59


3、董老师CSDN学院9套“Python可以这样学”收费视频课程汇总地址:https://edu.csdn.net/search?keywords=%E8%91%A3%E4%BB%98%E5%9B%BD&type=0



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/eO8rXit0y7
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/7930
 
294 次点击