首页 > 要闻 >

世界聚焦:扎实打牢数据结构算法根基,从此不怕算法面试系列之week01 02-09 测试算法时间复杂度性能的方式方法

2023-04-21 03:21:09 来源:博客园
1、数组生成器

测试算法性能肯定不能自己手动声明创建数组了,在现代计算机上,对于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,到这里,我们的测试方法讲解结束了,后续我们都可以用这样的方式来对不同的算法做测试。

x

世界聚焦:扎实打牢数据结构算法根基,从此不怕算法面试系列之week01 02-09 测试算法时间复杂度性能的方式方法

每日精选:新西兰举办“儿童猎杀野猫”比赛?主办方:收到许多恐吓信息,被迫取消

高标准严规范 建设新时代党支部——区人社局召开2023年党务干部培训会|全球新动态

全球微资讯!杭州萧山国际机场临时乘机证明办理指南(时间+地点+材料)

每日时讯!2023年大亚湾第一中学高中特长生考试时间

概念动态|光库科技新增“共封装光学(CPO)”概念

实时焦点:俄罗斯央行行长纳比乌利娜:在俄罗斯交易美国国防公司的股票是不合适的

银行一季报纷至沓来 净息差成关注点 环球聚焦

冯远征:建议年轻演员增加阅读量

中国联通业绩持续向好,三大运营商为何被市场热捧?-天天通讯

坦克500 Hi4-T预售 坦克SUV携旗下“越野新能源家族”亮相上海

看点:每日视点!冲突爆发400多天,俄罗斯亮出核武器

自提柜行业现状及发展前景分析2023-每日消息

i7-4770配RTX 3060?华纳《魔戒:咕噜》配置要求离谱|天天新视野

世界热点评!汇通能源:公司没有风力发电业务

【全球新要闻】beyond长城被禁原因 长城beyond为什么被禁

全球看点:《大使来喝茶》栏目走进云南勐海

热点聚焦:2499跌至1469,荣耀中端5G,120Hz屏+66W快充

薄雾的读音和组词(薄雾的读音)

2023年消防器材相关上市公司有哪些?(4月19日)

天天新消息丨巴萨主帅科曼谈了他对两大新援阿圭罗和德佩的看法

侠客风云传大地图怎么练功_侠客风云传大地图

今日热文:32项!2023年青浦区文化科技卫生“三下乡”正式启动

大数据50ETF(516000)年初至今累计上涨43.38%,太极股份今日领涨8.91%

【天天聚看点】联动共享淬经验 如切如磋共发展

全球今亮点!拭目以待!国王队记:目前在主场举办的G3观赛票已全部售罄

焦点速看:多因素叠加推动糖价上涨

全球最新:2022年地方医疗器械抽验不合格率5.24%

《白夜极光》芭芭拉三觉材料一览|焦点日报

传苹果(AAPL.US)为首款头显开发大量软件 覆盖游戏、健身和iPad应用 独家

最终幻想起源天堂的陌生人机械遗迹的紫色回忆在哪里|天天观察

今日看点:狼牙山五壮士的电影 中国狼牙特种部队

建安区全淑祺——当好技术先行者 践行时代工匠精神 世界球精选

动力电池产业链深陷产能过剩危机

武汉三角湖教育集团送教安居二小|看热讯

2022年中国网络安全硬件产品市场规模36.5亿美金 同比减少3.3%|世界热资讯

全球看点:硬核快报丨比亚迪云辇大猜想 这到底是个什么高科技?

当前播报:久祺股份:公司电助车的外采电机有4-5家供应商

微头条丨智美城市 ·“净”启新程 | 盈峰环境亮相第24届中国环博会

当前视点!净身房去势卵蛋_净身房

【世界报资讯】无锡市梁溪区:城管进社区 为群众办实事

我国就业整体形势改善 就业市场劳动参与率稳步提升

居民养老保险的缴费最高是多少?每年2000元是什么水平?

世界即时看!药明生物主要股东配股套现近40亿港元

万科高第在合肥的地理位置怎么样?_全球播报

视频|印度一颁奖礼百万人暴晒5小时,热死11人

慕容婉儿和林凡的小说_慕容婉儿

人大研究生招生网_人大研究生院 焦点速讯

当前报道:中老铁路国际旅客列车为跨境游注入新活力

圆圈符号里面有差号_差号符号怎么打

Copyright ©  2015-2022 南方创投网版权所有  备案号:粤ICP备18023326号-21   联系邮箱:855 729 8@qq.com