ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

数据结构笔记整理(1)算法概述

2021-10-19 14:02:50  阅读:194  来源: 互联网

标签:count int 复杂度 ++ 算法 概述 n0 数据结构


本笔记整理为方便自行复习,若有他人需求亦可参考。

1.算法基础
(1)算法定义:由有限条指令构成,规定了解决特定问题的一系列操作。

(2)程序定义:程序是算法用某种程序设计语言的具体实现。

(3)区别:程序可以不满足算法的性质:有限性。

(4)算法的评价准则:正确性、时间复杂性、空间复杂性、可读性、健壮性。

2.时间复杂度及渐进表示法

(1)基本运算(关键运算)
算法中起主要作用且耗时最多的操作。

例:矩阵运算中的*与+;
排序算法中的比较;
数组插入/删除操作的赋值(移动)。

(2)时间复杂度
算法中基本运算的次数
问题规模的函数

渐进表示方法:随着规模的增长,算法执行时间T(n)的变化趋势。
O表示法、Ω表示法、Θ表示法。
O:上限
Ω:下限
Θ:上限和下限

例:
T(n)=3logn+loglogn,g(n)=logn
存在C=4,n0=2 当n>n0时,有
3logn+loglogn<=4logn
于是有:T(n)=O(logn)
存在C=3,n0=2 当n>n0时,有
3logn+loglogn>=4logn
于是有:T(n)=Ω(logn)
存在C1=3,C2=4,n0=2 当n>n0时,有
3logn<=3logn+loglogn<=4logn
于是有:T(n)=Θ(logn)

O(n)理解:
T(n)=O(g(n )):存在C,当n足够大,T(n)不会超过g(n)的C倍。

常见时间复杂度:
请添加图片描述

大小关系:
在这里插入图片描述

大O标记常用性质与结果:
忽略常系数、低次项、对数底、对数常数次幂。
级数:请添加图片描述
调和级数:
请添加图片描述

3.典型例题
1.count=0;
for(i=1; i<=n; i++)
for(j=1; j<=i; j++)
count++;`
T(n)=n(n+1)/2
O(n²)

2.`count=0;
for(i=1; i<n; i*=2)
count++;
O(logn)

3.count=0;
for(k=1; k<=n; k*=2)
for(j=1; j<=n; j++)
count++;
O(nlogn)

4.void f ( int n )
{ int i , j;
for ( i = 0; i < n; i++ )
{ j =1;
while ( j<n ) j = j*2;
}
}
O(nlogn)

5.n >=3
for( i=0; i<n-1; i++)
for(j=1; j<n; j=j+ n/3)
for(k=1; k<n; k=k2)
x=x
5;
O(nlogn)

6.count=0;
for( i=1; i<=n; i++)
for(j=0; j<n; j+=i)
count++;
O(nlogn)

7.int func(int n){
int i=0, sum=0;
while(sum<n)
sum += ++i;
return i;
}

8.int f (int a[ ], int n, int K){ int i, mid, result=1, s=0, e=n-1; while (s<e){ for(i = s; i <= e; i++) result = result*a[i]; mid = (s+e)/2; if (K < a[mid]) e=mid-1; else if (K > a[mid]) s=mid+1; else break; } return result; }

请添加图片描述

void f (int a[ ], int n)
{
int i;
int *temp = new int [n];
for(i = 0; i < n; i++)
temp[i] = a[n-i-1];
for(i = 0; i < n; i++)
a[i] = temp[i];
}
空间复杂度:O(n)

4.均摊时间复杂度
分析一个操作序列的总时间而非单个操作的时间。请添加图片描述
应用场景:
➢ 对一个数据结构进行一组连续操作;
➢ 大部分情况时间复杂度都很低,只有个别情
况时间复杂度比较高。这些操作之间存在前
后连贯的时序关系;
➢ 这时可以看能否让高时间复杂度的操作的执
行时间平摊到其他低时间复杂度的操作上。

标签:count,int,复杂度,++,算法,概述,n0,数据结构
来源: https://blog.csdn.net/m0_52685630/article/details/120844000

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有