算法学习笔记
文章平均质量分 92
算法
knoci
Hello World!
展开
-
算法学习(7)-树
第一步选取任意3个数, 比如说是前3个, 将这3个数建成最小堆, 然后从第4个数开始, 与堆顶的数比较, 如果比堆顶的数要小, 那么这个数就不要, 如果比堆顶的数要大, 则舍弃当前堆顶而将这个数做为新的堆顶, 并再去维护堆, 用同样的方法去处理第5~10个数)从小到大排序的时候不建立最小堆而建立最大堆, 最大堆建立好后, 最大的元素在h[1],因为我们的需求是从小到大排序, 希望最大的放在最后。二叉树的特点是每个结点最多有两个儿子, 左边的叫做左儿子,右边的叫做右儿子, 或者说每个结点最多有两棵于树。原创 2024-05-15 22:16:26 · 989 阅读 · 0 评论 -
算法学习(6)-最短路径
现在回到问题:如何求任意两点之间的最短路径呢?通过之前的学习, 我们知道通过深度或广度优先搜索可以求出两点之间的最短路径。所以进行n^2遍深度或广度优先搜索, 即对每两个点都进行一次深度或广度优先搜索, 便可以求得任慈两点之间的最短路径。可是还有没有别的方法呢?当任意两点之间不允许经过第三个点时, 这些城市之间的最短路程就是初始路程,如下。接下来继续求在只允许经过1和2号两个顶点的情况下任意两点之间的最短路程。如何做呢?原创 2024-05-08 22:32:00 · 974 阅读 · 0 评论 -
算法学习(5)-图的遍历
使用深度优先搜索来遍历这个图的过程具体是:首先从一个未走到过的顶点作为起始顶点, 比如以1号顶点作为起点。沿1号顶点的边去尝试访问其它未走到过的顶点, 首先发现2 号顶点还没有走到过, 于是来到了2 号顶点。再以2 号顶点作为出发点继续尝试访问其它未走到过的顶点, 这样又来到了4号顶点。再以4 号顶点作为出发点继续尝试访问其它未走到过的顶点。但是, 此时沿4号顶点的边, 已经不能访问到其它未走到过的顶点了, 所以要返回到2号顶点。原创 2024-04-28 22:07:42 · 1012 阅读 · 0 评论 -
算法学习(4)-搜索
具体的算法是:查找种子点周边的点, 将与种子点颜色相近的点(可以设置一个阙值)入队作为新种子, 并对新入队的种于也进行同样的扩展操作, 这样就选取了和最初种子相近颜色的区域。因为等于0的点是海洋, 小于0的点是已经被染色的小岛, 我们可以从(1,1)开始, 一直枚举到(n, m), 对每个点进行尝试染色。如果这个点符合所有的要求, 就对这个点进行下一步的扩展, 即dfs(tx,ty,step+1),注意这里是step+1, 因为一旦你从这个点开始继续往下尝试, 就意味着你的步数已经增加了1。原创 2024-04-25 21:09:10 · 1011 阅读 · 1 评论 -
算法学习(3)-枚举
枚举算法又叫做穷举绊法, 光听这名字是不是就觉得很暴力很暴力呢。首先还是从一个小学三年级的奥数题开始吧。小哼在数学课上遇到一道奥数题是这样的, 口3x6528=3口x8256, 在两个口内填入相同的数字使得等式成立。你可能觉得这个太简单了!用3行代码就可以搞定。这就是最简单的枚举算法。枚举算法的基本思想就是“ 有序地去尝试每一种可能“。现在小哼又遇到一个稍微复杂一点的奥数题, 口口口+口口口=口口口,将数字1~9分别。原创 2024-04-23 20:40:14 · 316 阅读 · 0 评论 -
算法学习(2)-栈、队列、链表
游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。在这个队列当中,新来的人总是站在队列的最后面,来得越早的人越靠前,也就越早能买到票,就是先来的人先服务,我们称为“先进先出”(First In First Out,FIFO)原则。队列是一种特 殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列 的尾部(tail)进行插入操作,这称为“入队”。原创 2024-04-21 21:44:09 · 953 阅读 · 1 评论 -
算法学习(1)-排序
假设我们要从大到小排序5个同学的分数,分别是2分,3分,5分,5分和8分,满分10分,因此我们需要10个桶,不难得到桶排序中,桶的大小就是MaxSize+1,如果MaxSize很大,桶排序其实是很浪费空间的。这种排序方法我们暂且叫它“桶排序”。因为其实真正的桶排序要比这个复杂一些,,目前此算法已经能够满足我们的需求了。这个算法就好比有 11 个桶,编号从 0~10。每出现一个数,就在对应编号的桶中放一个 小旗子,最后只要数数每个桶中有几个小旗子就 OK 了。原创 2024-04-19 19:14:28 · 798 阅读 · 1 评论