算法与数据结构基本介绍

算法特性

五个特征

  1. 有穷性

    不是死循环,可以执行完

  2. 确定性

    有确定的结果

  3. 可行性

    可以解决问题,可实行的

  4. 有输入

  5. 有输出

设计原则

  1. 正确性

  2. 可读性

  3. 健壮性

    bug少

高效率与低存储

内存占用越小,CPU占用越小,运算速度越快。

重要指标

  1. 时间复杂度

    运行一个算法所需要的时间。 O()

  2. 空间复杂度

    运行算法所需要的内存

基础算法思想

  1. 排序算法
  2. 枚举算法
  3. 基础数论
  4. 递归算法
  5. 分治算法
  6. 回溯算法
  7. 贪心算法
  8. 动态规划

时间复杂度

时间复杂度用来表示一段代码执行所需要的时间,时间复杂度表示方法,大O表示法。

常数级

  1. O(1)

    1表示常数,所有能确定的数字都用O(1)表示,O(100)=O(1)

对数级

O(logn)

int i = 1;
while(i <= n){
    i = i*2;
}
//2^x=n 求x就是运行次数=> x=log2n => 忽略常数 => logn => O(logn)

O(nlogn)

O(nlogn)

int i = 1;
for(int j = 0; j < n;j++)
	while(i <= n){
    	i = i*2;
	}
}

线性级

O(n)

for(int i = 0; i < n;i++){
    a = a+1;
}
//n未知

平方

O(n^2)

for(int i = 0; i < n;i++){
    for(int j = 0; j < n; j++){
    	a = a+1;        
    }
}
//n未知

for(int i = 0; i < n;i++){
    for(int j = i; j < n; j++){
    	a = a+1;        
    }
}
/*运行多少次?n*(n+1))/2 => (n^2+n)/2;
有加减法的时候,找高阶项
O(n^2)
*/

N次方

O(n^n)

怎么找时间复杂度

  1. 找有循环的地方

  2. 找有网络请求的地方

    1. RPC
    2. 数据库请求

    打印log,计算平均时间

时间复杂度效率排序

时间复杂度效率图

效率由高到低:

O(1) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(n^n)

算法优化的目标就是往O(1)方向优化。

数据结构

在计算机科学中,数据结构是计算机中存储、组织数据的方式。
所有的数据结构都是由下面这四种基本数据结构演变而来的:

  1. 数组
  2. 链表

线性结构

  1. 数组
  2. 链表
  3. 队列
  4. 哈希表

树结构

  1. 二叉树
  2. 二叉搜索树
  3. 平衡二叉树(红黑树)
  4. 并查集
  5. 字典树(Trie)

图结构

  1. 邻接表
  2. 邻接矩阵

算法与数据结构

程序 = 数据结构 + 算法
数据结构是算法的基石;
算法围绕数据结构进行操作。

相关书籍

数据结构

  1. 严蔚敏版 数据结构与算法
  2. 大话数据结构

算法

  1. 基础:刘汝佳 算法竞赛入门经典
  2. 进阶级:刘汝佳黑书
  3. 算法导论

刷题网站

  1. 力扣
  2. POJ or HDU

数据结构与算法可视化网站

算法与数据结构可视化网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuidianjay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值