Loading...
连通块问题(ConnectedComponentProblem)是一个经典的图论问题,通常用来找出图中的所有连通分量。给定一个无向图,连通块问题的目标是确定图中有多少个连通分量(即有多少个互相连通的节点组成的集合)
【算法】计算程序执行时间(C/C++)
在C或C++中计算程序执行时间,可以使用多种方法,下面我介绍几种比较常见且好用的几种方法,大家可以选择适合自己的一种记住就可以了。这个库里面有很多函数,都是与时间有关的,功能非常强大,下面列举一个比较常用的函数。时间测量的场景,适用于对比算法时,不需要计算准确时间。这个函数主要用于测量程序的CPU时间消耗,而不是实际的墙钟时间(即从墙上的时钟测量的时间)。这个方法是博主比较推荐的一个,非常简便,且易懂,它用于测量程序的CPU时间。第一个是递归的程序占用CPU的时间,第二个是非递归的程序占用CPU的时间。
【算法】日期问题(C/C++)
日期问题见名知意,就是有关时间的问题,出题人在时间这一个角度去做文章,现在来看各大刷题网站,什么样的时间问题都有,比如闰年判断、回文日期、日期差值、日期格式化输入输出、时间轮询、时间窗口问题等。可所谓眼花缭乱,但是有的时间问题感觉就是图一乐,但是不排除创新题的可能性,后续也没有什么作用,既不会考也不会出在面试题上,下面我会对几种常见的日期问题进行详解。
【机器学习】朴素贝叶斯算法
朴素贝叶斯算法(NaiveBayesAlgorithm)是一种基于贝叶斯定理的简单概率分类器。它假设所有特征之间相互独立,这个假设虽然在现实中往往不成立,但在很多情况下,朴素贝叶斯分类器仍然能够表现得非常好。朴素贝叶斯算法是基于贝叶斯定理的分类算法。贝叶斯定理是一种描述随机事件A和B的条件概率的公式。在朴素贝叶斯中,我们假设特征之间相互独立,即一个特征的出现不影响其他特征的出现。这个假设被称为“朴素”的假设,也是算法名称的由来。
【机器学习】K近邻算法
K近邻算法(K-NearestNeighbors,KNN)是一种简单但非常实用的监督学习算法,主要用于分类和回归问题。KNN基于相似性度量(如欧几里得距离)来进行预测,核心思想是给定一个样本,找到与其最接近的K个邻居,根据这些邻居的类别或特征对该样本进行分类或预测。
背包九讲——背包问题求具体方案
f[i][j]的上一个状态就是从i+1转移过来的,因为我们定义从第i个物品到最后一个物品,第i+1个物品到最后一个之间的数量是不是比第i个物品到最后一个物品少。f[i+1][j]是不选第i个物品,f[i+1][j-v[i]]+w[i]是选第i个物品。因为我要在所有f[i][j]当中选择一个最大值,所以前面我管不管的先初始化为不选,往后如果背包容量大于体积,那我再看看是选了这个物品总价值是否增大,如果增大就更新,不增大就保持原来。
背包九讲——背包问题求方案数
背包问题涉及到了三种基础的背包:01背包、多重背包、完全背包,我们要根据在这几个背包的基础上去计算在获得最大价值的情况下,有几种方案,并输出方案数。
背包九讲——树形背包问题(有依赖的背包)
树形背包也叫有依赖的背包,是一种背包问题的变体,与传统的背包问题不同的是,物品之间存在一定的层次结构,形成了一棵树。每个节点代表一个物品,节点之间通过边连接,表示层次关系。问题的目标是在遍历这棵树的过程中,选择一些物品放入背包,使得背包中物品的总价值最大。在树形背包问题中,一个节点可以选择放入背包,也可以选择不放入背包。如果选择放入,就需要考虑该节点的子节点;如果选择不放入,可以考虑其他兄弟节点。问题的关键是如何在遍历树的过程中,动态规划地计算每个节点的状态。
背包九讲——分组背包问题
分组背包问题(GroupedKnapsackProblem)是组合优化中的一个问题,它是经典的背包问题的变种。在分组背包问题中,有多个物品组,每组中的物品不可分割,并且每组中的物品数量至少有一个。目标是在不超过背包容量的前提下,选择物品的组合,使得总价值最大。
背包九讲——二维费用背包问题
背包问题是一类经典的组合优化问题,通常涉及在限定容量的背包中选择物品,以最大化某种价值或利益。问题的一般描述是:有一个背包,其容量为C;有一组物品,每个物品有重量w和价值v。目标是选择一些物品放入背包,使得它们的总重量不超过背包容量,同时总价值最大。二维费用背包问题则是背包问题的变体,在背包问题中它只限定物品的重量,二维费用背包会再限定一个维度(体积),在既满足背包容量和既满足背包体积的情况下,使价值最大化。
背包九讲——混合背包问题
混合背包问题是背包问题的另一种变体,结合了0/1背包、多重背包和完全背包的特点。在混合背包问题中,每种物品可以选择放入背包的次数是有限的,而且也可以选择放入的数量是无限的。问题的描述如下:给定一个背包容量为m,有n种物品,每种物品有重量v[i]、价值w[i]、以及数量s[i]。其中,s[i]表示第i种物品的数量限制。目标是选择物品放入背包,使得它们的总重量不超过背包容量,并且总价值最大。
背包九讲——完全背包问题
完全背包问题呢,见名知意,就是所谓的物品无限多,选也选不完的那种,是多重背包的promax版本。完全背包问题是背包问题的一种变体,与0/1背包问题有所不同。在完全背包问题中,每种物品的数量是无限的,可以选择任意数量的某一种物品放入背包中。
背包九讲——多重背包问题
多重背包问题是背包问题的一种扩展,与0/1背包问题和分数背包问题有些不同。在多重背包问题中,每种物品都有限定的数量,不再是仅有一个,而是有多个。问题的描述如下:给定一个背包容量为C,有n种物品,每种物品有重量w[i]、价值v[i]和数量s[i]。目标是选择物品放入背包,使得它们的总重量不超过背包容量,并且总价值最大。
背包九讲——01背包问题
背包问题是一类经典的组合优化问题,通常涉及在限定容量的背包中选择物品,以最大化某种价值或利益。问题的一般描述是:有一个背包,其容量为C;有一组物品,每个物品有重量w和价值v。目标是选择一些物品放入背包,使得它们的总重量不超过背包容量,同时总价值最大。这个问题有两个主要变体:0/1背包问题和分数背包问题。
【机器学习】随机森林算法(看我以弱博强)
随机森林(RandomForest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。
【算法】博弈论(C/C++)
在算法竞赛中,博弈论算法常用于解决涉及对抗、策略选择、最优决策等问题。这类问题通常涉及两名或多名玩家在某种规则下的竞争,而每个玩家试图通过选择最优策略获胜。常见的博弈论问题类型包括零和博弈、格局游戏(如Nim博弈)、棋类游戏以及其他涉及策略选择的问题。
【算法】哈希映射(C/C++)
哈希映射算法是一种通过哈希函数将键映射到数组索引以快速访问数据的数据结构。它的核心思想是利用哈希函数的快速计算能力,将键(Key)转换为数组索引,从而实现对数据的快速访问和存储。哈希映射在现代软件开发中非常重要,它提供了高效的数据查找、插入和删除操作。
【机器学习】ID3、C4.5、CART 算法
它是一种贪心算法,信息增益表示按某特征划分数据集前后信息熵的变化量,变化量越大,表示使用该特征划分的效果越好。:这个实现是为了教学目的而简化的,实际应用中通常会使用更高级的库和算法,如scikit-learn中的DecisionTreeClassifier。C4.5是ID3的改进版,使用信息增益比替代信息增益作为特征选择标准,从而克服了ID3倾向于选择多值特征的缺点。
【机器学习】决策树算法
决策树通过树状图的形式模拟决策过程,每个内部节点代表一个属性上的判断,每个分支代表判断的结果,每个叶节点代表一种决策结果。
【算法】最长公共子序列(C/C++)
简称(LCS),是动态规划里面里面的基础算法它的所解决的问题是,在两个序列中找到一个序列,使得它既是第一个序列的子序列,也是第二个序列的子序列,并且该序列长度最长。由下图中两个序列,我们可以看出来最长公共子序列为[scrg]。我们来举个“”,比如序列A为“abcdef”,序列B为“bcef”,那么它的最长公共子序列为序列B,即:“bcef”,注意最长公共子序列不用保证每一个字符必须连续。那么我们一般的暴力做法是什么呢?