**
2024/8/9启动,目前更新中
**
数据结构与算法(C++版)学习笔记
一、前言
1.记得:先学后练
2.先学经典,再去拓展延伸
3. C/C++
| 数据结构 | 数组、链表、串、栈、队列… |
|---|---|
| 经典算法 | 冒泡算法、BF算法… |
二、算法练习平台
| 用途 | 网址(点击即可跳转) |
|---|---|
| 基础/新手/初级/中级/高级 | 信息学奥赛一本通 |
| 竞赛练习 | 牛客竞赛 |
| 面试大厂 | 牛客、 力扣 |
三、数据结构与算法的关系
二者相辅相成,不可分割。
根据实际数据的特点选择不同的数据结构来提高XX算法的效率
四、算法的性能指标
1.算法 / 程序:输入、输出、有限步骤结束、程序
2.指标——时间复杂度、空间复杂度、稳定性
3.时间复杂度 O() —— 表现:时长/效率
实质;算法的计算的次数
4.空间复杂度 O() —— 表现:内存
实质:运行时额外产生的空间
5.一般做题目时常常是时间超限
6.时间和空间往往是相对的
&4.3时间复杂度
时间复杂度的表现:时长/效率
时间复杂度的实质;算法的计算的次数
**实际场景中常取n->∞时计算得到的平均复杂度,这就足以评价一个算法的好坏**
考察的时间复杂度其实是指:算法的渐进时间复杂度
常见的算法时间复杂度:O(1)、O(logN)、O(n)、O(n*logN)、O(n^2^)、O(n^3^) ............
例1 并列加法
#include<iostream>
using namespace std;
void test01(){
int n,ans=0;
cin >> n;
//算法时间复杂度: O(n)
//实际计算次数 / 真实时间复杂度: O(n+3)
//理解:实际算法中,n-->∞时的计算次数,‘+3’可以被忽略
//但如果实际中n取的小,比如n=6时,‘+3’就不能被忽略
for (int i = 1; i<= n; i++) {
ans++;
}
ans++;
ans++;
ams++;
cout << ans;
return 0;
}
例2 分辨:算法时间复杂度 和 真实时间复杂度
#include<iostream>
using namespace std;
void test02(){
int n,ans=0;
cin >> n;
//算法时间复杂度: O(n)
//实际计算次数 / 真实时间复杂度: O(n/2)
for (int i = 1; i<= n; i+=2) {
ans++;
}
cout << ans;
return 0;
}
例3 嵌套是乘法
#include<iostream>
using namespace std;
void test03(){
int n,ans=0;
cin >> n;
//算法时间复杂度: O(n^2)
//实际计算次数 / 真实时间复杂度: O(n^2 + n)
//理解:在考量算法时间复杂度时,按n->∞时,比较数量级进行化简,保留最高次项并将最高次项系数改写为“1”
for (int i = 1; i<= n; i++) {
<

3736

被折叠的 条评论
为什么被折叠?



