算法学习笔记

这篇博客详细记录了算法学习的过程,包括二叉树的增删查、哈夫曼编码、排序算法、图论算法如欧拉回路、最短路径等。还涵盖了堆、散列、AVL树、红黑树、动态规划和回溯算法等,并讨论了分治、动态规划、贪婪算法等设计技巧。同时提到了一些实际应用,如毒药检测和一致性Hash问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

18.5.5 二叉树的删除新增查找最小最大

哈夫曼编码 排序 斐波那契数列 栈实现计算器 栈实现中序表达式转后序。

18.5.6

堆(优先队列) 散列 图论 深度优先 红黑树

18.5.26

图论算法:

{

欧拉回路:用一只笔画出不重复的线通过所有的顶点。

深度广度优先算法。

无向有向图无圈有圈图 拓扑排序

网络流问题:对应交通流量或者水管里的流水,是可以通过边来传递的

最短路径算法:dijkstra算法

最小生成树:kruskal算法、prim算法。对应房子里用最短路径铺电线。

np-完全性问题

}

18.6.28

{

树、

avl树、

二叉树、

B树、

红黑树、

伸展树

}

二叉树节点的增删操作

 平衡树的初步了解

avl树的增加删除细节编写

 树的常见算法题:树的深度, 树的(叶子)节点数,两个节点的最低公共节点

开始学习堆——优先队列。目前概念是主要用来计算出优先级(排序?),和树有点类似。但是不适合用来查找某个具体的值,因为需要使用线性遍历来查找。

{

二叉堆的基本操作

左式堆

斜堆

二项队列

}

堆的应用和基本操作了解。

堆的上滤和下滤的操作。

算法设计技巧:

1、分治算法

2、动态规划

3、随机化算法

4、回溯算法

5、贪婪算法 :哈法曼编码、装箱问题

17:40 - 18:10 对常用的算法设计有个大概的理解。

18:15 - 18:40 最小点对问题-分治初步理解

24:00 - 1:15 算是理解了一维的最近点

 

2018. 7.17

10:20 - 11:00 最近点算法

14:30 - 15:15 了解了二维的最近点距离的算法思路,还有个点不懂,为什么strip区域带中的点最多为√n

15:20 - 16:20 分治算法解决 ----求n个元素中第k个大小的值,

16:30 - 18:00 最长序列和问题 , 各种时间复杂度,n3 n2

 

2018. 7.18

动态规划

----------矩阵

-----------catalan 数:

17:00 -- 20:00 动态规划 ☞ 最优二叉搜索树。原问题分解为子问题,保存子问题的解,避免重复计算。

 

2018.8.5

11:40- 12:30 回溯算法:收费公路问题 ,自己的想法:难点在于程序的回溯实现,需要保存最开始可能的分支,

一旦一个分支走不下去就需要往回走,错误分支里数据的处理也需要回滚

 

 

 

 

19.5.8

1、二进制开关算法

n瓶毒药,最少需要使用多少只小白鼠才能知道那瓶药有毒

将n瓶药以01的形式编号,然后组合(如何组合:按照每位数值是否为1来组合)不同的药给小白鼠喝。

2、一致性hash问题(分布式一致性)

一致性hash算法解决分布式存储。

将服务器和key通过自定义的hash算法分布在0~2^32次方的圆环上,key存储在最近的一个服务器上,这样新增了一个服务器之后,相比余数分布式算法,只会影响在添加的节点到沿逆时针方向第一台服务器之间的key,影响的比较小。

通过增加虚拟节点来保证数据的分散性。

20.5.5

常见的算法:

时间复杂度和空间复杂度的解释:随着问题规模的变大,一个程序所花费的时间,或者说需要运行的次数;空间复杂度是,一个程序需要的内存大小。递归中需要保存递归栈的数据,这就需要空间。

首先是利用基本的数据机构比如栈、队列、树、堆,图论实现的一些算法,

栈可以实现计算器的+-*/的运算。还可以实现二叉树的中序遍历操作(非递归实现)。

树的一些知识,平衡二叉树,avl树的增加删除节点操作,树的左右节点的高度差最多不超过2。

队列的应用:在图的广度优先搜索非递归中实现,将图的某一个节点的所有邻接节点放到队列中,依次出队列,当遍历第一个节点的时候,再将该节点的邻接节点放到队列中,这样可以实现。

堆,也叫做优先队列。应用有堆排序。

还有一些比较常见的有意思的算法:斐波那契,汉诺塔,卡特兰数。

深度优先广度优先搜索:是对图的节点进行遍历的操作。递归。

 

排序算法:

1、最直观:选择排序(依次选择最大最小,两层循环,第二次循环从原来基础上+1)

经典:冒泡排序(相比选择排序,内存循环的时候两两比较直接到位,控制好内层循环)

插入排序:(将未排序的往前面已经排好的队列中比较插入,控制好内层循环)

平均效率比较好的算法:快排(基准值选择后,两边递归,难点是如何将元素分到基准值的两边(思路是这样的:循环队列和基准值进行比较,满足条件则将当前值放到自己设置的那个点),这个解决了,余下的就剩下递归了)

插入排序的改进:希尔排序(缩小增量进行插入排序,三层循环,第一层循环增量,第二次循环数据,第三次循环比较交互位置)

(效率比较好的排序)堆排序:思路是将所有的数据放到堆中,这样可以得到第一个最大的值(堆的最上面是最大值或最下值),排序的思路转化为调整堆为有序堆。巧妙。(递归的运用,构造堆时用到递归,交换位置后也需要使用递归)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值