• 首页
  • 粮食
  • 蔬菜
  • 果品
  • 水产
  • 酒水
  • 饮料
  • 茶叶
  • 畜禽
  • 食用油
  • 资讯
logo
  • 首页>
  • 资讯 >
  • 正文

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

2023-04-21 00:44:26 来源:博客园
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,到这里,我们的测试方法讲解结束了,后续我们都可以用这样的方式来对不同的算法做测试。

关键词:

    为您推荐

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

    资讯2023-04-21
  • 全球速看:临潼区新丰街道举办“老年人读书会”活动

    资讯2023-04-21
  • 全球快播:软通动力:目前AI+RPA一体机产品已取得某大型通讯设备企业及鲲鹏技术认证

    资讯2023-04-20
  • 巴克利:勇士要尽可能多用年轻球员 因为他们的老将无法阻挡国王-全球即时看

    资讯2023-04-20
  • 最资讯丨我的世界全力出击成就怎么解锁

    资讯2023-04-20
  • 企业如何解决产品知识培训问题?

    资讯2023-04-20
  • 国产新车报道:2019广州车展:东风启辰 星正式发布_新动态

    资讯2023-04-20
  • 人民财评:金融“及时雨”灌溉春耕田

    资讯2023-04-20
  • 12分钟!平顶山高速交警将重度烧伤儿童送到医院 环球关注

    资讯2023-04-20
  • “征服者康”暴力伤人官司升级,伤害者正配合曼哈顿地区检察院工作 热点评

    资讯2023-04-20
  • 被喷了!邓超给女儿扎辫子,才9岁就戴钻石耳环,教育方式有问题|全球快报

    资讯2023-04-20
  • 消息!国家文创实验区启动知识产权宣传周系列活动中新社北京分社

    资讯2023-04-20
  • ROHM开发出具有业界超低导通电阻的Nch MOSFET, 有助于提高应用设备工作效率-环球观点

    资讯2023-04-20
  • 教育部:教师入职前严格查询性侵违法犯罪信息

    资讯2023-04-20
  • 5G、物联网、人工智能,仙桃大岭村村民用上科技装备新家当 天天微头条

    资讯2023-04-20
  • 瓷砖怎么做美缝效果更好看(瓷砖怎么做美缝)

    资讯2023-04-20
  • “奔跑吧·少年”亲子体验赛下月昌平开跑_焦点热议

    资讯2023-04-20
  • 银保监会:从未批准设立“中国时间银行” 相关投资活动涉嫌违法犯罪 _全球观点

    资讯2023-04-20
  • 天天热文:道高一尺魔高一丈的意思解释 道高一尺魔高一丈的意思

    资讯2023-04-20
  • 美国佛州对迪士尼出手,计划取消包括土地开发合同在内的发展协议

    资讯2023-04-20

果品

  • 北京2022年冬奥会、冬残奥会奖牌“同心”正式发布
  • 冬奥故事会丨一图了解冬奥会历届奖牌
  • 冰雪之约 中国之邀 | 9种语言祝福冬奥倒计时100天
  • 同心筑梦向未来——写在北京冬奥会开幕倒计时100天之际
  • 外交部:美国针对亚裔仇恨犯罪数字令人痛心

蔬菜

  • 说好“一梯一户”却成了“两梯两户”,买方能否解除合同?
  • 更高水平开放合作助力中国东盟经贸发展迎新机遇
  • 9被告人犯侵犯著作权罪被判刑罚
  • 玉渊谭天丨中美再通话,“建设性”很重要
  • 环球时报社评:中美经贸需要建设性对话
  • 俄媒:莫斯科扩大新冠感染新疗法试点范围
  • 冰雪之约 中国之邀 | 追赶的勇气
  • 中国第20批赴黎维和建筑工兵分队完成“VA-2”道路排水系统修缮任务
  • 中国常驻联合国代表团举办恢复联合国合法席位50周年图片展
  • 美专家认为三大原因导致美国供应链危机

Copyright   2015-2022 青年食品网 版权所有  备案号:皖ICP备2022009963号-20   联系邮箱:39 60 291 42@qq.com