首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
算法
奕翎
创建于2023-02-22
订阅专栏
这里是我的算法笔记
暂无订阅
共55篇文章
创建于2023-02-22
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
线性DP - 数字三角形
问题背景 Dp分析 状态表示 二维状态表示f(i,j) f(i,j)表示的是哪一个集合:所有满足如下条件的集合 所有从起点出发,走到 (i, j) 的路径 f(i,j)存的是什么属性:Max, Min
分组背包问题
问题背景 一个容量是V的背包和N组物品,每组物品有si个,每件物品的体积是vij,价值是wij,同一组内的物品最多只能选一个,求能装走物品的最大价值 Dp分析 状态表示 二维状态表示f(i,j) f(
多重背包问题
问题背景 一个容量是V的背包和N种物品,每种物品的体积是vi,价值是wi,每种物品最多有si个,求能装走物品的最大价值 Dp分析 状态表示 二维状态表示f(i,j) f(i,j)表示的是哪一个集合:所
完全背包问题
完全背包问题 问题背景 一个容量是V的背包和N种物品,每种物品的体积是vi,价值是wi,每种物品能无限使用,求能装走物品的最大价值 Dp分析 状态表示 二维状态表示f(i,j) f(i,j)表示的是哪
匈牙利算法
时间复杂度是 O(nm),实际情况远小于O(nm), n表示点数,m表示边数 匈牙利算法主要用来求二分图的最大匹配 模板 C++ Java 练习 01 二分图的最大匹配 题目 题解
染色法判别二分图
时间复杂度是 O(n+m), n表示点数,m 表示边数 模板 C++ Java 练习 01 染色法判定二分图 题目 题解
最小生成树
最小生成树 最小生成树问题对应的图一般都是无向图 朴素prim 时间复杂度是 O(n^2^+m),n表示点数,m表示边数 适用于稠密图 C++ Java 堆优化版prim 时间复杂度O(mlogn)
最短路
最短路 朴素dijkstra 适用于稠密图(m~n^2^) 时间复杂度O(n^2^+m),n表示点数,m表示边数 C++ Java 01 Dijkstra求最短路 I 题目 题解 堆优化版dijkst
拓扑排序
只有有向无环图才有拓扑序 时间复杂度O(n + m),n表示点数,m表示边数 模板 C++ Java 练习 01 有向图的拓扑序列 题目 题解
树与图的存储与遍历
树与图的存储 数是一种特殊的图(无环连通图) 对于无向图中的边ab,存储两条有向边a->b, b->a 因此我们可以只考虑有向图的存储 邻接矩阵存储 二维数组g[a][b]来存储边a->b 如果有权重
宽度优先搜索BFS
宽度优先搜索BFS 搜索方式:一层一层搜索 数据结构:队列queue 空间:O(2^h^) 搜索到的一定是最短路 练习 01 走迷宫 题目 题解 02 八数码 题目 题解1 题解2 使用StringB
深度优先搜索DFS
搜索方式:一条路走到底,前面没有路才回头 数据结构:栈stack 空间:O(h) 不具有最短性 在dfs的过程中,最重要的就是两个操作:回溯和剪枝 练习 01 排列数字 题目 题解 02 n-皇后问题
哈希表
哈希表 哈希表一般用于将一个大的空间映射成一个比较小的空间,在映射的时候总会有元素冲突(哈希碰撞),这时候如何解决这种元素冲突的问题呢,有两种方法,一种是拉链法,一种是开放寻址法,这也就是哈希表的两种
堆
堆的结构是一棵完全二叉树 上面一棵满二叉树 最后一层的节点从左到右依次排布 小根堆 每个点都小于等于左右子节点 存储:使用一维数组存储 根节点:1 x的左子节点:2x x的右子节点:2x+1 基本操作
并查集
将两个集合合并 询问两个元素是否在一个集合当中 并查集可以在近乎O(1)的时间内完成这两个操作 基本原理:每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示x的
Trie树
Trie字典树又叫前缀树(prefix tree) 高效地存储和查找字符串集合的数据结构 在每个字符串的结尾打上标记 模板 C++ Java 练习 01 Trie字符串统计 题目 题解 02 最大异或
KMP
在BF算法中,正常的回退操作应该是 j 指针回退到1并且 i 指针也要回退一部分,但是这里不用,这就KMP算法的妙处,通过预处理算出模式串中不与s匹配的那个字符之前的字符串(不包括这个没有匹配上的字符
单调队列
常见模型:找出滑动窗口中的最大值/最小值 模板 C++ Java 练习 01 滑动窗口 题目 题解 1
队列
先进先出 这里用数组来模拟栈 模板 普通队列 C++ 循环队列 C++ 练习 01 模拟队列 题目 题解
单调栈
常见模型:找出每个数左边离它最近的比它大/小的数 模板 C++ Java 练习 01 单调栈 题目 题解
下一页