随笔分类 - 算法
摘要:求数组中,连续区间的大小,可使用前缀和相减得到。 进阶变形 若想得到区间大小等于target,暴力枚举 前缀和相减。复杂度O(n^2) 优化算法:将每次求得的前缀和放入hashMap中,S[j] - S[i] == target,(j>i) 求出S[j]后,判断hashMap中是否存在 S[i] =
阅读全文
摘要:格雷编码 当 n=0 时,格雷码序列为 [0]。 将n-1编码翻转,翻转部分的n-1位设置位1, 获得n位编码。 霍夫曼编码 那么为什么通过哈夫曼编码后得到的二进制码不会有前缀的问题呢? 这是因为在哈夫曼树中,每个字母对应的节点都是**叶子节点**,而他们对应的二进制码是由根节点到各自节点的路径所决
阅读全文
摘要:**操作符号栈,数字栈** 遍历字符 * 若是低优先级运算符(加、减),不断地弹出高优先级运算符(乘、除)栈顶运算符,直到栈为空或者栈顶不为高优先级运算符(乘、除) * 若是左括号运算符,加入操作栈,若是右括号运算符,不断地弹出栈顶运算符,直到栈顶为 左括号 * 若是数字,加入数字栈 遍历完成后,若
阅读全文
摘要:排列、组合适合**回溯法**,保存当前状态 什么时候使用 used 数组,什么时候使用 begin 变量 有些朋友可能会疑惑什么时候使用 used 数组,什么时候使用 begin 变量。这里为大家简单总结一下: **排列问题**,讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为不同列表
阅读全文
摘要:**01背包问题** dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]); (j>=w[i]) 一维化(由于递推关系i只和i-1 有关,可进行空间压缩,**遍历j时需要逆序遍历**) for(int i=0;i=w[i];j--){ dp[j] =
阅读全文
摘要:计算机归根结底只会做一件事:**穷举**。 所有的算法都是在让计算机【如何聪明地穷举】而已,动态规划也是如此。 动态规划是自底向上,递归树是自顶向下 为什么动态规划一般都脱离了递归,而是由循环迭代完成计算。 【DP的核心思想】 DP为什么会快? 无论是DP还是暴力,我们的算法都是在可能解空间内,寻找
阅读全文
摘要:暴力贪心算法是一种基于贪心思想的算法,它的主要思想是在问题求解的过程中,尽可能地采取局部最优策略,从而得到全局最优解。 暴力贪心算法的技巧包括: * 确定问题的最优解结构:对于一个问题,如果它具有最优子结构的性质,那么就可以使用贪心算法来求解。最优子结构的性质是指问题的最优解可以通过其子问题的最优解
阅读全文
摘要:回溯和深度优先搜索的区别 回溯是一种更通用的算法。可以用于任何类型的结构,其中可以消除域的部分 ——无论它是否是逻辑树。 深度优先搜索是与搜索树或图结构相关的特定回溯形式。它使用回溯作为其使用树的方法的一部分,但仅限于树/图结构。 回溯和 DFS 之间的区别在于回溯处理隐式树而 DFS 处理显式树。
阅读全文
摘要:``` source 源端, target目的端 1.构造n*n的相邻矩阵, -1表示未相邻 int matrix[n][n] int dist[n] 初始化各节点直接到source的距离, dist[source] = 0; bool visited[n] 是否访问过 dist[source] =
阅读全文
摘要:k-近邻算法(kNN), 它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来
阅读全文
摘要:决策树原理 决策树的一个重要任务是获取数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据集创建规则时,就是机器学习的过程。专家系统中经常使用决策树,而且决策树给出结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。 在构造决策树时,我们需要解决
阅读全文