发布于2021-05-29 21:00 阅读(1292) 评论(0) 点赞(8) 收藏(5)
算法时间复杂度分析;算法空间复杂度分析;大O记法
用来计算算法时间损耗情况
将算法执行若干次,并计量执行算法所需要的时间
1.设置循环(如for循环),执行若干次算法
2.利用long start/end = System.currentTimeMills()
timeA = end - start
计算耗费时间
显然,此方法只适用于小型算法
在计算机编写程序前,通过统计方法对算法耗时进行估算
一门高级语言编写的程序在计算机上运行所损耗的时间取决于:
1.算法采用的策略与方案 2.编译产生的代码质量 3.问题的输入规模 4.机器执行指令的速度
用来计算算法内存占用情况
单位:字节(Byte)= 8比特(bit)
类型 | 内存 | 类型 | 内存 | 类型 | 内存 | 类型 | 内存 | 类型 | 内存 | 类型 | 内存 | 类型 | 内存 | 类型 | 内存 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
byte | 1 | short | 2 | int | 4 | long | 8 | float | 4 | double | 8 | boolean | 1 | char | 2 |
计算机访问内存的方式:一次一个字节
Java中数组被先定为对象
Date date = new Date()
对象变量
date
,需要8个字节表示
除了对象内部存储的数据占用内存,对象的自身占用需要16个字节
new Date()
需要16个字节保存对象的头信息
如:现有17字节的数据需要装入16字节内存,装不下,系统将会自动增加8字节内存,也就是24个字节的内存来装着17个字节的数据
一个原始数据类型的数组一般需要24字节的头信息(16字节自身对象开销,4字节保存长度,4字节填充空余的字节)
对于函数f(n)、g(n),存在一个整数N,当n>N时,f(n)>g(n)
随着输入规模的增大:
1.算法的常数操作可以忽略不计
2.与最高次项相乘的常数可以忽略
3.算法中n的最高次幂越小,算法效率越高
使用O()表示时间/空间复杂度的记法:O(f(n)) = T(n)
一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法
执行次数=执行时间
对于Java这类在电脑这类拥有较大内存的计算机上运行的高级语言,讨论算法空间复杂度没有多大意义
int n = 999; //执行1次
int m = 0; //执行1次
int n = 999; //执行1次
int m = 0; //执行1次
for (int i=0;i < n;i++){
m += i; //执行n次
}
int n = 999; //执行1次
int m = 0; //执行1次
for (int i=0;i < n;i++){
m += i; //执行n次
for (int j=n;j > 0;j--){
m++; //执行n次
}
}
int n = 999; //执行1次
int m = 0; //执行1次
for (int i=1;i <= n;i*=2){
m+=i; //执行log2(n)次
}
在大O分析时,我们会忽略底数,因为无论底数为多少,当随着n增大时,增长趋势一样
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)
(没做特殊要求时)运行时间都是指在最坏情况下的运行时间
最坏情况
是一种保证,即使在最坏情况下,也能正常提供服务
如:在一个含有n个元素的列表中寻找目标元素
最好情况:第一个元素就是目标元素O(1)
平均情况:O(n/2)
最坏情况:查找的最后一个元素才为目标元素O(n)
原文链接:https://blog.csdn.net/m0_54355172/article/details/117320580
作者:我是小豆丁
链接:http://www.javaheidong.com/blog/article/207328/712b3e665a77809da631/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!