首页 > 编程知识 正文

复杂度(平均时间复杂度)

时间:2023-05-04 19:02:21 阅读:86530 作者:3240

作者: 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;

加装多种排序的时间复杂度

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。