![](https://img-blog.csdnimg.cn/20210625130654118.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法和数据结构
算法题
infralan
Major in:linux内核 虚拟化 云原生,熟悉:分布式、网络、存储,感兴趣:计算、数据库、机器学习系统。
展开
-
bfs拓扑排序
拓扑排序bfs做法我们使用一个队列来进行广度优先搜索。初始时,所有入度为 0 的节点都被放入队列中,它们就是可以作为拓扑排序最前面的节点,并且它们之间的相对顺序是无关紧要的。在广度优先搜索的每一步中,我们取出队首的节点 u:我们将 u 放入答案中;我们移除 u 的所有出边,也就是将 u 的所有相邻节点的入度减少 1。如果某个相邻节点 v 的入度变为 00,那么我们就将 v 放入队列中。在广度优先搜索的过程结束后。如果答案中包含了这 n 个节点,那么我们就找到了一种拓扑排序,否则说明图中存在环,也原创 2021-07-27 14:53:10 · 648 阅读 · 0 评论 -
生成子集笔记
生成子集笔记给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]代码如下dfsclass Solution {public: vector<vector<int>> combine(int n, int k) { vector<vector<int>>原创 2021-07-26 17:43:46 · 72 阅读 · 0 评论 -
生成排列详解
生成排列生成[1,2,3]的全排列dfs用来生成排列,但是不彻底理解就完全是在凑巧。wrong case下面代码class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; vector<int> path; dfs(nums,0原创 2021-07-22 11:42:01 · 183 阅读 · 0 评论 -
位运算规律
移位有符号数的移位运算要注意。移位运算可能会丢弃超出的位数。有符号数二进制数1111 1111,先左移2位再右移三位为1111 1111,反之先右移三位再左移二位就是1111 1100。因为要在高位补上符号位。移位运算也是以下标0开始计数的。比如1<<j实际位数有j+1位。优先级还有个注意点:^ & | 位运算优先级比比较大小包括判断等于的优先级低。基础位运算v&(v-1)去除掉v最后一个1,其实理解还是好理解,因为v的最后一个1肯定要变成0,而这个0后面的全是1原创 2021-06-28 16:30:05 · 264 阅读 · 0 评论 -
dijstra精髓
跟prim结构上很像,也是有个全局更新,甚至完全是同构的。到最后可以发现,一定都是n个点访问完了。划分成两个集合,这是一种很通用但不容易注意到的手法,究其原因,在于更容易证明算法的上下界和可停机。这个更新带有动态规划的味道,但更多的是枚举刷新的感觉,有一个默认的起点,所以称为单源。而且也有一个默认的假设,距离的更新是由新加入的点导致的。所以 vis[k] = true;//以k为跳板 for (int i = 0; i < n; i++) {原创 2021-06-26 13:34:37 · 63 阅读 · 0 评论 -
prim算法精髓
prim算法的精髓不在于点的距离更新,这样永远把握不住要领,而在于生成树的更新,每次都要把剩余点和生成树的最小距离重新求出来。所以我们首先会需要一个访问数组,表示当前点是否在生成树里面,一方面是因为既然在生成树里面了,我们就不需要考虑了。另一方面也可以认为这个距离已经变成0了。在加入节点后,如何更新其余节点到我们的生成树的最小距离?策略很重要,当树里面只有初始节点的时候,这个最小距离就是到这个初始点的距离。加入了新的节点之后,这里不一定会导致原来的最短距离失效,只是,我们必须重新枚举,这样相当于每次最后原创 2021-06-26 13:33:04 · 105 阅读 · 0 评论 -
bfs精髓
主要的就是记step是一个模拟器,相当于有多条分叉可以走,全都一起走,为了保证不重复访问其他分叉走过的,那就有一个标记数组,表示是否已经访问。在实现模型上是队列来实现,但这不是本质的,队列只是模拟一个离散化的时间,此刻这个队列是哪些流到达了。step就像time一样,各个水流按着同样的速率向前流动,一般是一个step。我是觉得只有理解了网络流才能真正理解bfs。其他简化的bfs都不是本质重要的。其次就是流会遇到阻塞,包括不允许的状态,越界状态。甚至可以认为访问过的也是一种阻塞。如果不是阻塞就可以继续流原创 2021-06-26 13:31:47 · 69 阅读 · 0 评论