面试复习-算法

算法

排序

  1. 冒泡(双重循环)外层是趟数,内层是比较的位置,然后两两交换
  2. 选择排序(双重循环)外层是趟数,内层找到当前趟数的最大值放到最后面
  3. 插入排序 一个数插入有序数组,从第一个数开始比较
  4. 快速排序 每趟找一个数,比它小的放前面,比它大的放后面,不断减小范围
  5. 归并排序 将两个有序数组合并成一个有序数组
  6. 堆排序 建立一个堆的过程
  7. 希尔排序 数组分隔成n组,然后插入排序
  8. 桶排序

哈夫曼树

  1. 定义:带权路径长度最小的数
  2. 每次取权值最小的两个结点生成树,新的父节点为两结点之和

A*算法

  1. 寻路时维护open list和close list,每次从open list中找F值最小的那个
  2. F=G+H=移动到当前位置的代价+估计出的当前位置到终点的代价

并查集

  1. 实际上是一棵树,初始每个结点的父亲是自己
  2. 只有并和查两种操作,查就是递归的查找自己的父结点,直到一个结点的父结点是自己;并就是把一个结点的父亲换成另一个结点
  3. 路径压缩:先找到根结点,再把根节点以下的所有结点的父亲设置成根节点

KMP

  1. next数组 if(j==-1)或匹配 j=next[i-1]+1 else j=next[i]
  2. 不匹配时根据next数组滑动

最小生成树

  1. 加点法 最小的边对应的点,放入集合中,直到有n-1条边或n个顶点
  2. 加边法 最小的边加入边集,保证这个边在两棵树上

最短路径

  1. 弗洛伊德(动态规划思想)
  2. 迪杰斯特拉 定义起点sv,定义点集S-已经求到最短路径的点,U-还未求到最短路径的点;从U中找到最短的路径加入S

拓扑排序

每次选择入度为0的点,即为拓扑排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值