算法导论小序

1、数据结构

应对算法相关,没有思想,最暴力的穷举

1.1 数组

普通数组
顺序数组
数据的稳定性
边界,循环变量
数值变量的范围

优化思路
  1. 处理特殊情况
  2. 特殊标记位
相关算法
  1. 双指针
  2. 快慢指针[最小公倍数,最公约数]
  3. 滑动窗口
  4. 多路合并
  5. 引入Map结构
  6. 索引与数据的关系

1.2 链表

穿针引线
虚拟节点
归并排序
链表的双&多指针

1.3 栈&队列

遍历:

  • DFS(Deepth First Search 深度优先搜索)
  • BFS (Breadth First Search 广度优先搜索)
  • FIFO,LIFO
  • 逆波兰表达式,中缀——前缀——后缀

1.4 树&堆

树相关概念:满二叉树,完全二叉树(树每层都是满的,或者只有最下一层逐步成为满树),平衡二叉树(左右子树高度差值不超过1),斜树,搜索树
树的深度
树的遍历

  • 深度优先
    1. DRL(前序)
    2. RDL(中序)
    3. RLD(后序)
  • 广度优先

堆一定是完成二叉树,大根堆,小根堆,解决top排序的问题

  • 构建堆(堆新增节点)
  • 堆节点删除

2、算法

2.1 排序算法

  • 冒泡排序 O(N*N) o(1)
  • 选择排序 O(N*N) o(1)
  • 插入排序 O(N*N) o(1)
  • 快速排序 O(NLog(n)) o(1)
  • 希尔排序 分段插入排序
  • 归并排序 两路归并排序
  • 堆排序 构建堆
  • 计数排序 O(N) O(M)
  • 桶排序
  • 基数排序

2.2 查找算法

  • 二分查找
  • 剪枝算法

2.3 递归

递归:终止条件(函数能够退出),递归条件
二维平面的回溯:floodfill
N皇后的问题

递归优化
  • 借助栈,将递归调用修改非递归调用
  • 减少递归调用中重复计算(剪枝优化)
  • 使用空间来记录重复计算的结果

2.4 动态规划

问题之间存在关联关系,相互影响,通过动态转移方程来求出最优解
背包问题
递归解法——动态规划的相互转换
LIS:动态规划
dijkstra 就是动态规划
动态规划的回溯

优化操作

记忆化搜索,最优子结构+重叠子结构

2.5 贪心算法

局部最优 OR 全局最优
贪心算法:确定是否可以使用贪心算法,每一次都要去最大值或者最小值
贪心选择性:最贪心的结果,不会剩下的结果产生影响
数学归纳法:
反正法:

2.6 字符串

  • BF(Brute Force)算法
  • BM(Boyer-Moore)算法
 H E R E O I S O A O S I M P L E O E X A M P L E  | E X A M P L E
1、坏字符,没有出现,直接移动len(demo),出现移动最后一个与坏字符相等的位置len(demo)-lastIndex(demo,demo[len])
2、 好后缀,同样的,好后缀已经好后缀子串在demo从后向前出现的位置
  • KMP(Knuth-Morris-Pratt)算法
待了解

2.7 位操作:

与或非 亦或 同或

  • 取模
  • 奇偶数、除2
  • 交换
  • n和n-1的关系

2.7 模拟

通过模式事物的操作,来完成问题求解

算法优化

4、验证

对数器
如何验证你算法是正确的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值