测试算法性能肯定不能自己手动声明创建数组了,在现代计算机上,对于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 测...
1、数组生成器测试算法性能肯定不能自己手动声明创建数组了,在现代计算机上,对于O(n)级别的算法,都需要10W级别以上的数据才能看到性能,我
天天速讯:南昌一市民反映商家占用公摊违章搭建 红谷滩区城管及时核实整改
来源|都市现场原创未经允许不得转载上周六(4月14日),江西都市频道公布了赣问·好差评榜第8期,南昌市红谷滩区一条帖文被纳入差评榜。...
环球快讯:助力上海智慧城市建设 打造先进制造业实践基地 华建集团华东院原创...
日前,华建集团华东建筑设计研究院有限公司(下文简称”华东院“)原创中标金桥南区WH7-3、WH2-3西块金谷通用厂房项目。设计充分考虑灵...
【全球热闻】折叠屏手机,接下来拼什么?
撰文|文林编辑|杨博丞题图|ICPhoto不久前,国外市调机构Canalys公布了2022年全球折叠屏手机榜单。榜单显示,在全球手机
精彩看点:数字化新技术赋能新能源汽车产业向高质量发展
数字化新技术赋能新能源汽车产业向高质量发展---正在举办的2023上海国际车展,全面展示当今汽车工业的最新技术、汽车工业发展的最新趋势。不仅
瓜州:“守窟”夫妻的平凡坚守
位于瓜州县境内由敦煌研究院榆林窟文物保护研究所负责保护管理的小千佛洞(下洞子),是敦煌石窟群的组成部分。只不过,与莫高窟、榆林...
微资讯!熊猫乳品营业收入7年连增 奶酪奶油板块成新增长点
4月20日,熊猫乳品(300898)发布202...
当前最新:梅安森:2022年经营业绩稳步增长 今年首季净利增长13.75%
证券时报网讯,4月20日晚间,梅安...
世界观天下!创新型可变径斜井掘进机长沙下线
证券时报e公司讯,4月20日,一台可...
当前视讯!公告精选:宁德时代一季度净利同比增逾5倍;合盛硅业拟合计425.86亿投建...
证券时报e公司讯,4月20日晚间公告...
南网科技:一季度净利3036.63万元 同比增长570.93%
证券时报e公司讯,南网科技(688248...
公告精选:宁德时代一季度净利同比增长557.97%;中国移动一季度净利281亿元
【热点】合盛硅业:拟合计425 86...
英飞拓:下修业绩预期 2022年预亏10亿元-12亿元
证券时报e公司讯,英飞拓(002528)4...
天天消息!申港证券公募基金销售资格获批
证券时报券中社讯,证监会官网信息...
通讯!蔚来总裁秦力洪:坚持“一步到位”的定价策略!
近日,2023年上海国际车展正式开幕...
全球观热点:最新出炉!“宁王”一季度净利增超500%!外资大幅加仓
宁德时代(300750)上海车展上接连推...
帅丰电器:2022年净利同比降13.08% 拟10派6.97元
证券时报e公司讯,帅丰电器(605336...
合盛硅业:2022年净利同比降37.39% 拟10派8.8元
证券时报e公司讯,合盛硅业(603260...
今日聚焦!寒武纪:不直接从事人工智能最终应用产品开发和销售
证券时报e公司讯,寒武纪(688256)4...
华东医药:一季度净利7.55亿元 同比增长7.23%
证券时报e公司讯,华东医药(000963...
刚刚,沸腾了!深圳大新闻,真相究竟是什么?
就在刚才,深圳来了个大新闻!今日...
【科普宣传】反邪教知识科普,请查收!
邪教组织是当今世界的三大毒瘤之一...
全球球精选!狄龙:我正在为自己打出名声 我会在G3等着詹姆斯和我说话
直播吧4月20日讯 今日NBA季后赛,...
润达医疗(603108.SH)业绩快报:2022年净利润4.18亿元 同比增长9.87%
格隆汇4月19日丨润达医疗603108603...
怎样让五官变得精致漂亮_怎么让五官越长越精致
1、第一,不要一直眯着眼睛看东西...