parewise算法性能优化
2024-08-28 23:05:45
在《接口自动化测试框架-AIM》这篇博客中,提到了parewise算法。
这次对其进行性能优化,共3点。
一、
因为笛卡尔积和两两拆分,是有序的。
就保证了两两拆分后的每列都是相同位置的元素。
所以在比较时,不用跨列去比较。
只需要比较同一列的值就可以了。
flag = False for j2 in range(len(s2[i2])): if s[i][j] == s2[i2][j2] and j == j2: t = t + 1 flag = True break if flag: break
简化为
if s[i][j] == s2[i2][j]: t = t + 1 break
笛卡尔积2187条,优化前60s,优化后45s。
二、
如果某一列没有出现重复的元素,那就不用继续找后面的列了。
说明这一行用例是需要保留的。
for j in range(len(s[i])): # 对每行用例的两两拆分进行判断,是否出现在其他行 flag = False for i2 in [x for x in range(len(s2)) if s2[x] != s[i]]: # 找同一列 if s[i][j] == s2[i2][j]: t = t + 1 flag = True break if not flag: # 同一列没找到,不用找剩余列了 break
笛卡尔积2187条,优化前45s,优化后40s。
三、
优化到这里,逐段代码研究,发现没多少优化余地了。
最外层的for循环是笛卡尔积2187次。
每次循环平均0.02s。
40.85s是2187次累加起来的。
无可奈何。
只能优化用户体验了,哈哈哈。
加了个进度条。
过程也有些曲折。
1.
按网上例子print \r end=
c = int(i / 10) jd = '\r %2d%% [%s%s]' a = '■' * c b = '□' * (10 - c) print(jd % (i, a, b), end='')
单独的py文件跑没问题,pycharm用unittest跑显示不出来。
2.
那就百度,换sys.stdout.write
c = int(i / 10) jd = '\r %2d%% [%s%s]' a = '■' * c b = '□' * (10 - c) sys.stdout.write(jd % (i, a, b)) sys.stdout.flush()
成功显示了。但是在用HTMLTestRunner跑的时候,又显示不出来进度条了!
3.
再百度,无果。
看源码,发现是输出重定向了。
联想到log日志是能打印控制台的。
于是“偷奸耍滑”,在Log里面复用了一下。
搞定。
最新文章
- Dapper ORM VS SqlSugar ORM的 8场对决
- C程序中常见的内存操作错误
- AutoCAD安装失败
- 转载:JProfiler远程监控LINUX上的Tomcat过程细讲
- Java--解决java compiler level does not match the version of the installed java project facet错误
- ASP.NET Core1.0 带来的新特性
- sp转dp dp转px
- 前端攻城狮学习笔记九:让你彻底弄清offset
- hdu 4068 SanguoSHA
- 对比C++中的指针和引用
- 命令cd
- Egret的第一个2048游戏
- [简历] PHP 技能关键字列表
- Ncurses <;一>;
- Codeforces Round #306 (Div. 2) C
- region URL请求数据
- 超详细的 Linux CentOS yum 源的配置与使用【转发+新增】
- 【Alpha】阶段总结报告
- 阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经
- DirectX11--实现一个3D魔方(2)
热门文章
- kudu安装部署
- 【问题记录】centos 开机启动命令未执行
- Angular总结一:环境搭建
- FTP response 421 received. Server closed connection
- 3192: [JLOI2013]删除物品
- Python学习之路 (三)爬虫(二)
- Java基础加强之并发(一)基本概念介绍
- Apache去掉index.php
- virtualbox+vagrant学习-2(command cli)-5-vagrant halt命令
- ls: Call From hdoop2/192.168.18.87 to hdoop2:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see