扎实打牢数据结构算法根基,从此不怕算法面试系列之week01 02-09 测试算法时间复杂度性能的方式方法_当前简讯
测试算法性能肯定不能自己手动声明创建数组了,在现代计算机上,对于O(n)级别的算法,都需要10W级别以上的数据才能看到性能,我们肯定不能手动声明10W个元素的数组吧?
所以,创建数组生成器。这里,自己创建一个数组生成器——ArrayGenerator。
package com.mosesmin.datastructure.week01.chap02;/** * @Misson&Goal 代码以交朋友、传福音 * @ClassName ArrayGenerator * @Description TODO 数组生成器 * @Author MosesMin * @Date 2023/4/14 * @Version 1.0 */public class ArrayGenerator { private ArrayGenerator() {} public static Integer[] generatedOrderedArray(int n){ Integer[] arr = new Integer[n]; for (int i = 0; i < n; i++) arr[i] = i; return arr; }}
2、使用数组生成器进行测试详细代码如注释:package com.mosesmin.datastructure.week01.chap02;
(资料图)
/** * @Misson&Goal 代码以交朋友、传福音 * @ClassName LinearSearch03 * @Description TODO * @Author MosesMin * @Date 2023/4/14 * @Version 1.0 */public class LinearSearch09 { private LinearSearch09(){} public static int search(E [] data,E target){ for (int i = 0; i < data.length; i++) if (data[i].equals(target)) return i; return -1; } public static void main(String[] args) { int n = 1000000; Integer[] data = ArrayGenerator.generatedOrderedArray(n);// 10w的数据规模 long startTime = System.nanoTime();//单位是纳秒 纳秒-微妙-毫秒-秒 差距都是1000倍 for (int k=0;k<100;k++) LinearSearch09.search(data,n);//这里为了验证最差的情况,就传一个找不到的目标元素100000 long endTime = System.nanoTime(); double time = (endTime-startTime)/(1000*1000*1000.0);// 最后1000.0,因为我们希望结果是个浮点数 System.out.println(time + " s"); }}
10W的数据规模,运行一次,在我的电脑(CPU为:Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz 3.20 GHz)运行时间约为0.0027秒,即2.7毫秒。3毫秒,可能不够稳定,不一定是线性查找法运行的时间结果,因为操作系统也在运行,我们可以再试下使用更大的数据,比如使用100W的数据规模,看看它们运行的时间差是否为10倍左右。
运行结果:10W数据规模:
我们看到100W的运行结果约为6.6毫秒;几毫秒的运行结果还是不够稳。
100W数据规模:
我们再试下1000W的数据规模。我们看到1000w约为26毫秒;注:对于一般的计算机而言,1000W的数据规模已经是个够量的规模了。1000W数据规模:
我们还可以看一下1亿的规模,但是运行1亿的数据规模时,我的电脑运行了很久,将近20s时间,最终显示结果约为182毫秒。为什么实际上运行了20s时间呢?因为对于一般的计算机来说,开1亿个整型空间,尤其时1亿个连续的整型空间时需要一些时间的,特别是我的电脑配置不太高,i5的4代cpu(Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz 3.20 GHz)。
1亿数据规模:
如果我们希望得到的时间更长一些,一个简单方法是,多做几次,这里,我们就用100W的数据规模,然后测试100次。100W的规模,执行100次,约为218毫秒。
100W数据规模运行100次:
3、一些测试优化1、优化一下输出log主要改动的语句为:
System.out.println("数据规模n为:"+n+",运行次数:"+ num +"次,运行时间为:" + time + " s.");
优化后的代码如下:package com.mosesmin.datastructure.week01.chap02;
/** * @Misson&Goal 代码以交朋友、传福音 * @ClassName LinearSearch03 * @Description TODO * @Author MosesMin * @Date 2023/4/14 * @Version 1.0 */public class LinearSearch09 { private LinearSearch09(){} public static int search(E [] data,E target){ for (int i = 0; i < data.length; i++) if (data[i].equals(target)) return i; return -1; } public static void main(String[] args) { int n = 1000000; Integer[] data = ArrayGenerator.generatedOrderedArray(n);// 10w的数据规模 long startTime = System.nanoTime();//单位是纳秒 纳秒-微妙-毫秒-秒 差距都是1000倍 int num = 100; for (int k=0;k
2、创建数据规模数组,利用循环一次测试多个数据规模
int [] dataSize = {100000,1000000,10000000};for (int n:dataSize) {……}
添加数据规模数组后的代码如下:
package com.mosesmin.datastructure.week01.chap02;/** * @Misson&Goal 代码以交朋友、传福音 * @ClassName LinearSearch03 * @Description TODO * @Author MosesMin * @Date 2023/4/14 * @Version 1.0 */public class LinearSearch09 { private LinearSearch09(){} public static int search(E [] data,E target){ for (int i = 0; i < data.length; i++) if (data[i].equals(target)) return i; return -1; } public static void main(String[] args) { int [] dataSize = {100000,1000000,10000000}; for (int n:dataSize) { Integer[] data = ArrayGenerator.generatedOrderedArray(n);// 10w的数据规模 long startTime = System.nanoTime();//单位是纳秒 纳秒-微妙-毫秒-秒 差距都是1000倍 int num = 100; for (int k=0;k
创建一个数据规模数组,循环执行,可以看是10W、100W、1000W的运行时间差异确实约为10倍的差距。
ok,到这里,我们的测试方法讲解结束了,后续我们都可以用这样的方式来对不同的算法做测试。
标签:
为您推荐
广告
- 扎实打牢数据结构算法根基,从此不怕算法面试系列之week01 02-09 测试算法时间复杂度性能的方式方法_当前简讯
- 最新消息:关于第33届中国新闻奖重大主题报道自荐、他荐作品的公示
- 环球今日报丨新大正:股价下跌乃受行业、环境等因素影响 公司暂无回购计划
- 国网沈丘县供电公司: 春季安全检查 筑牢用电安全网
- 满帮集团推出同城货运新品牌省省:将运满满快车和省省回头车合二为一 称不靠补贴抢市场
- 低级失误+补时绝平!三镇国安谱写神奇一战,卫冕冠军2轮不胜|焦点滚动
- 巴西火柴上尉官网在哪下载 最新官方下载安装地址
- 舞阳县自然资源局:不动产非公证继承让登记工作再提速_每日快报
- 当前速讯:谷子是什么意思?
- 杀鸭子为什么放盐 杀鸭子加盐的原理
- 次新股回调多少可以买入?如何买入?
- 诺诚健华宣布奥布替尼成为中国首个且唯一获批针对边缘区淋巴瘤的BTK抑制剂
- Socket编程基础-Socket编程基础
- 环球聚焦:“五防三要”,毕业生求职需警惕陷阱,避免踩“坑”
- 环球快看点丨一季度我国经济发展实现良好开局
- 基辅上空现神秘亮光,美国卫星坠落所致? NASA:造谣!
- 男子入住电竞酒店盗窃显卡 石鼓公安火速破案抓嫌犯
- 宿州市在省金融服务平台完成首笔“节水贷”授信工作
- 天天关注:找养老院护士 找养老院
- 专访:巴中地球资源卫星新协议印证了两国科技合作的成功——访巴西科技部长桑托斯
- 1世界看热讯:今年一季度全国移民管理机构查破万克以上毒品案件60起
- 2当前热门:中国品牌已不再做看客 上海车展必看豪华车
- 3使用 Spring Cloud Bus 和 Spring Cloud Stream 集成实现基于消息的事件驱动 当前速讯
- 4局中人 | 揭秘国王“库里终结者”:曾险去勇士 自曝防萌神秘诀
- 5河南省许昌市市场监督管理局魏都区分局扎实开展医疗器械抽检工作
- 6焦点快看:FORVIA佛瑞亚集团亮相2023 上海车展 期待与中国携手共进同发展
- 7全球播报:专题学习、交流互动、实地视察……梅陇镇人大代表第一季度小组活动用心用情
- 8每日消息!华工科技:预计800G光模块出货量将在今年下半年快速增长
- 9消费如何更优质?随着全国各地政策激发 消费活力逐步显现 焦点日报
- 10环球看点!近期难得的不矫情说人话的青春片,让我们看笑话一样看着左坤,也像是在看s13的自己
广告
- 当前时讯:捷豹路虎宣布将于五年内投资150亿英镑,加速电动汽车发展
- 泗水车祸致7死10伤 警方通报来了
- 巩固企稳回升态势 推动经济运行持续整体好转 当前看点
- 传奇歌词意思(传奇歌词)
- 党报荐读丨信贷优惠、消费折扣……低碳生活能“变现”! 世界快看
- 深 V 回归、狂瘦 60 斤,谁敢相信她 50 了?-环球即时看
- 永达1780mm热线预计6月底实现试投产
- 复写纸的蓝印如何消除_复写纸
- 热议:促进双方交往合作再上新台阶
- 四个赛区、五大主题,第五届河北省文创和旅游商品创意设计大赛启动
- 环境影响评价制度_关于环境影响评价制度介绍 环球今亮点
- 尚贤教育集团:走进神奇的3D世界|天天报道
- 天天微头条丨塔图姆29分绿衫军再胜老鹰,一数据凸显凯尔特人防守真强悍
- 超第二代骁龙8跑分136万+ vivo天玑9200+机型曝光GPU性能提升明显
- 秦皇岛海港区:畅通“微”循环 连接大市场|天天要闻
- 看似强大的美国已没钱,卢拉:我每晚自问,世界为什么用美元结算
- 今亮点!中国交建4月19日加速下跌
- 世界观速讯丨盘点全球票房最高的五部电影 你都看过吗?
- 天天最资讯丨中老铁路国际旅客列车为跨境游注入新活力
- 【热闻】塔图姆:怀特坚持自我&打球果断有侵略性 这使我们球队充满活力