2022年3月19日

摘要: 但是,我们会发现刚刚讲的朴素Dijkstra算法(高情商:朴素 ; 低情商: 低效)的套路不适用于稀疏图,很容易会爆时间; 所以,我们要对其中的一些操作进行优化,首先我们发现找到里起始点最近的点去更新其他的点的时候是O(n)的,又因为是稀疏图我们不能用邻接矩阵来存储,所以我们就会想到用邻接表来存储, 阅读全文

posted @ 2022-03-19 22:24 ZheyuHarry 阅读(295) 评论(0) 推荐(1) 编辑

摘要: 我们之前介绍的求最短路问题,我们通常会考虑到用BFS算法计算,这里我们将这样对于求最短路问题用不同的算法进行分类: 思路介绍:Dijkstra算法的思路究竟是怎么样的,我们这里先介绍一下朴素版Dijkstra算法的思路: 因为我们要去计算的是每个节点到起始点的最短距离,所以我们使用的方法是不断地迭代 阅读全文

posted @ 2022-03-19 16:43 ZheyuHarry 阅读(144) 评论(0) 推荐(1) 编辑

2022年3月15日

摘要: 题目: 农夫约翰的 N 头奶牛排成一排,每头奶牛都用其品种 ID 进行描述。 如果两头相同品种的牛靠得太近,它们就会吵架。 具体的说,如果同一品种的两头奶牛在队列中的位置相差不超过 K,我们就称这是一对拥挤的牛。 请计算品种 ID 最大的拥挤奶牛对的品种 ID。 输入格式 第一行包含两个整数 N 和 阅读全文

posted @ 2022-03-15 20:59 ZheyuHarry 阅读(77) 评论(0) 推荐(1) 编辑

摘要: 拓扑排序是一种新的图论的方式: 什么是拓扑排序?就是把DAG(Directed Acyclic Graph,有向无环图)的结点按照方向的顺序排序存储起来。因为我们这里说了是有向无环图,所以如果这个图中存在有向环,那么就对应的不存在拓扑排序(toposort),所以我们将采用DFS的方法来实现拓扑排序 阅读全文

posted @ 2022-03-15 19:35 ZheyuHarry 阅读(433) 评论(0) 推荐(1) 编辑

摘要: 这里介绍树和图的广度优先搜索,我们要去找到那个到n最近的点,这是最短路问题,当然我们要使用BFS方式来解决这个问题 我们可以因为发现这道题的数据很小,所以我们如果遍历这个图的所有点也是很小的,所以我们利用BFS,去遍历每一个点,然后就是很平常的BFS操作,就无需多讲了,如果数据范围大了一点,我们也可 阅读全文

posted @ 2022-03-15 19:31 ZheyuHarry 阅读(51) 评论(0) 推荐(1) 编辑

摘要: 这里紧承DFS和BFS之后,引出了更加普遍的关于树和图的深度优先搜索和广度优先搜索,在我看来关于树和图的深搜和广搜和前面的深搜和广搜的关系就像是,前者给你一片有限制的空间,你可以往任何地方走,但是你有可能陷入泥潭,此时就需要回溯,我们对于所给定区域的结构是已知的,但我们在走的时候还是义无反顾地去走, 阅读全文

posted @ 2022-03-15 17:38 ZheyuHarry 阅读(103) 评论(0) 推荐(1) 编辑

2022年3月13日

摘要: 题目: 每天,农夫约翰的 N 头奶牛都会穿过农场中间的马路。 考虑约翰的农场在二维平面的地图,马路沿水平方向延伸,马路的一侧由直线 y=0 描述,另一侧由直线 y=1 描述。 奶牛 ii 从马路一侧的位置 (ai,0)沿直线过马路到达另一侧的位置 (bi,1)。 所有 aiai 互不相同,所有 bi 阅读全文

posted @ 2022-03-13 23:08 ZheyuHarry 阅读(172) 评论(0) 推荐(1) 编辑

摘要: 这里要介绍的广度优先搜索也是搜索算法的一种,但是这个和刚刚讲到的深度优先搜索有点不一样的地方在于,深度优先搜索是一次走到底,撞了南墙才回头,而广度优先搜索是每次每个方向都走一步,然后保存起来以便之后在此基础上走。 所以这里很必要的是定义一个新的数据结构,通常是pair来存储当前问题空间的状态,然后把 阅读全文

posted @ 2022-03-13 20:38 ZheyuHarry 阅读(48) 评论(0) 推荐(1) 编辑

摘要: 这里涉及到的知识是属于搜索问题,我们这里的DFS(Depth-First—Search),即深度优先搜索; 这个讨论的是图论的问题,图论的问题是关于边和点的关系 怎么考虑深度优先搜索呢,就是从起点往相邻的节点去走,边界条件是走到了目标节点后退出,搜索的方式是从一条路走到底,如果还是没有找到目标节点那 阅读全文

posted @ 2022-03-13 20:20 ZheyuHarry 阅读(73) 评论(0) 推荐(1) 编辑

摘要: 什么是堆排序呢,这里大概讲讲…… 我们在这里讲到的堆,一般是二叉堆,也就是完全二叉树或者近似完全二叉树的一个数据结构。 如果说每个节点的值都大于他的任意子节点的值就叫做大根堆,反之称作小根堆。 我们通常是通过利用一个一维数组来存储一个堆的,如果说起点是从0开始,那么其左子节点就是2i+1,右子节点就 阅读全文

posted @ 2022-03-13 17:52 ZheyuHarry 阅读(44) 评论(0) 推荐(1) 编辑