算法 review

复杂度
          —>区别 数组/链表(单双向)
          —>递归(种类)
                       —>堆/栈+队列(顺序)/集合(唯一)/哈希表(分布)
                       —>二叉树(遍历+平衡+旋转)/图(顶点和边+遍历)数据结构-->复杂度

 

 

 

遍历

          -->排序(插入 快排 归并 计数 基数 二分法)

          -->图(最小生成树 最短路径 旅行商)

          -->压缩 (霍夫曼树 LZ77)

 

 

递归:普通递归和尾递归,递归包含递归、回归和终止条件,普通递归会在栈顶传参数并申请空间,占用时间和空间,尾递归多了一个判断条件,避免了占用

-哈希:一致性哈希是key逆向查找server,一旦大于server的哈希就映射上去;拉链发是递归存取key值相同的hash;hash的方法有直接取余,乘积取整和time33;随机访问,解决冲突和平均分布是哈希算法效率的标准,链式哈希--桶和开地址哈希--槽位(线性探查和双散列)

复杂度:O 1  lgn   n   nlgn   n方   2的n次方   n!

 

链表:数组适合访问O(1),链表是O(n)链表适合增删,单向链表不能依指定元素删,因为没有prev,而且尾部是null,双向可以删,尾部是prev

集合:并交补 从属 个数 | 覆盖集合算法|访问、插入和删除是On,所以推荐使用链表O1 | 栈是后进先出,队列是先进先出

 

二叉树 遍历-先中后 | 旋转-ll lr rl rr|平衡-右子树-左子数 的值是0 -1 +1 | 删除用后序 搜索大则右 小则左子树,

http://kimibob.blog.163.com/blog/static/163873051201153093851369/  left是逆时针,right是顺时针

 

搜索和排序:插入-遍历两个比大小 快排(两头比较并交换)-归并(新内存) 计数(offset) 基数(单个位数比较) 二分法(两段内各自比较)

图:广度优先--从前往后涂黑(最小生成树和最短路径)  深度优先--从后往前涂黑 | 二叉树,是一种有向无环图,除了根节点,每个节点最多只能是两条边的点,一条边的终点,每个顶点的邻接表都包含自己的子节点 | 广度优先+贪心算法=最小生成树(两个点 Prims算法和Kruskal算法。) 最短路径(基础点到所有点 dijkstra) 旅行商(所有顶点最短距离,最后的顶点与初始顶点连接形成闭环,也就是哈密顿圈)

加密(压缩)算法:霍夫曼树每次要计算最小频率,然后生成二叉树,所以较慢,适合网络通信频繁交互;LZ77通过滑块计算出现次数,每次做标记为,压缩较慢,但解压很快,适合大软件一次性发布

 

算法有:随机法(快速排序)  分治法(归并排序,分解、求解和合并) 动态规划(递归,较大问题分解为子问题再合并) 贪心法(霍夫曼树,局部最优解) 近似法(图算法,足够好的解)

 

 

堆是一颗左平衡的二叉树,能迅速确定最大/小值的节点,维持一棵树的代价低于维持一个有序数据集的代价,常用的有排序、任务调度、包裹分拣、霍夫曼编码和负载均衡,相比复杂度为O(n)的两两比较,用堆来实现就能把复杂度降低到O(lgn),堆顶部的节点优先级最高,包裹分拣就是通过插入和获取节点的优先级来实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值