作者: Runsen
目录
1 .时间复杂度1.1定义1.2导出时间复杂度原则1.3各时间复杂度曲线1.4一般时间复杂度2.1定义2.2一般空间复杂度
1. 时间复杂度
-1010无穷大时,如果函数存在使得极限值不等于0的常数,则称为同数函数,算法
1.1 定义
运行时间为常数级时,用常数1表示; 只保留时间函数的最高项。 例如,在保持最上位项之后; 在存在最上位项情况下,省略最上位项之前的系数;1.2 推导时间复杂度的原则
。
1.3 各时间复杂度曲线
1.4 常见时间复杂度
也就是说,无论执行多少行,都不会影响其他区域。 在这种情况下,代码的复杂性取决于博伊德赛赫尔罗(字符串名称) {
system.out.prinln('Hello,'字符串);
}
在以下二维码中,通过while循环,可以使搜索范围倍增。 假设退出环路需要x次,则有num * 2 * 2 * .=n。 其中,num是常数,乘以n个2后就有了。 因此,时间的复杂度用大o表示intbinarysearch(int[]arr,int目标) {
int左=0;
int right=arr.length - 1;
wile (左=右) {
int middle=左(左)/2;
if (arr==目标)
返回中间;
else if (arr (中间目标) )
right=中间- 1;
}else {
左=中间1;
}
}
返回- 1;
}
由于for循环中的代码执行arr.length次,因此所需时间与数组的长度成正比,可以用于表示时间的复杂性,如以下代码所示intsum (英特尔) {
int总值=0;
for (英制=0; I arr .长度; I ) {2}
总体=arr;
}
返回总体;
}
如果重复执行复杂度代码,代码的复杂度应该如下所示博伊德赫尔洛(Intn ) {
for (英寸=1; i n; I ) {2}
int m=1;
wile(mn ) {
m *=2;
}
}
{ 010 }
如果重复执行时间复杂度代码,时间复杂度可以表示它呈双重循环的形式voidselectionsort (英特尔,英特尔) {
for (英制=0; i n; I ) {2}
int min=i;
for(intj=I1; j-n; j ) {2}
if (Arr Arr ) {2}
int tmp=arr;
arr=arr;
ARR=TMP;
}
}
}
与}
一样,如果将时间复杂度的代码嵌套一次并进行循环,则复杂度为三重循环的嵌套形式音频演示(intn ) {
for (英制=0; i n; I ) {2}
for(intj=0; j-n; j ) {2}
for(intk=0; k n; k ) {2}
系统输出打印(世界);
}
系统输出打印((---- ) );
}
system.out.print('**** ';
}
}
小时复杂度算法理论上是存在的,但在实践中几乎没有遇到,所以在此不展开
2. 空间复杂度
空间复杂度是算法运行期间暂时使用的存储容量的度量。 也就是说,除了原始序列大小的内存之外,算法运行期间使用的额外存储容量。 它反映的是内存的使用趋势,而不是特定的内存。
2.1 定义
2.2 常用空间复杂度
如果执行算法所需的临时空间不随变量n的大小而变化,则算法的空间复杂度为常数如下:int num1=1;
int num2=2;
int总值=1号2; 由于
阵列的占用内存大小为n,之后没有分配新的区域,因此该算法的空间复杂度为:int arr=新int;
加装多种排序的时间复杂度