草庐IT

algorithm

全部标签

c++ - 深度优先图遍历

我正在尝试打印深度优先遍历。我有以下代码继续给我一个段错误。当我尝试打印图中的最后一个顶点时,它似乎正在发生。我从顶点“A”开始的第一次遍历按预期工作。但是当我尝试从D开始进行深度优先打印时,我遇到了段错误。这是我的源代码:这是我的原始源代码:voidwdigraph::depth_first(intu)const{boolfound=false;vectorvisited;//createabooleanvectorfor(inti=0;idepth_first;//usedtoholdverticesthathavebeenvisitedvisited[u]=true;//mark

c++ - 在整数输入流中遇到的先前较小元素的计数?

给定一个从1到10^5(不重复)的数字输入流,我们需要能够在每个点上判断出之前遇到过多少比这个数字小的数字。我尝试使用C++中的集合来维护已经遇到的元素,然后在集合上取upper_bound作为当前数字。但是upper_bound给了我元素的迭代器,然后我必须再次遍历集合或使用std::distance,这又是线性时间。我是否可以维护一些其他数据结构或遵循一些其他算法以更有效地完成此任务?编辑:发现了一个与芬威克树相关的旧问题,在这里很有帮助。顺便说一句,我现在已经使用从@doynax评论中获取提示的线段树解决了这个问题。HowtouseBinaryIndexedtreetocount

c++ - 快速排序的最大元素交换次数

我正在通过阅读RobertSedgewick的“算法”一书并完成练习来提高我的算法知识。这是我遇到的困难:WhatisthemaximumnumberoftimesduringtheexecutionofQuick.sort()thatthelargestitemcanbeexchanged,foranarrayoflengthN?我已经通过实验确定,最大项目的最大交换次数是floor(N/2),假设数组中的所有元素都是不同的。我如何从数学上证明这一点?如果我错了,我的错是什么?我发现有好几处提到了这个问题(例如thisone),但是,答案与我的结果不符。这个答案表明最大数量是N-1,

c++ - 他贪心吗?

我正在解决来自LeetCode.com的问题:Givenanarrayofnon-negativeintegers,youareinitiallypositionedatthefirstindexofthearray.Eachelementinthearrayrepresentsyourmaximumjumplengthatthatposition.Determineifyouareabletoreachthelastindex.Forexample:A=[2,3,1,1,4],returntrue.A=[3,2,1,0,4],returnfalse.投票最多的解决方案之一(here)

c++ - 在完美图中寻找最大团

一种快速算法,用于查找具有大约100个顶点的完美图中最大团的大小(该图具有奇数圈,至少有1个弦)??有没有比蛮力更简单的方法,因为这是一个完美的图,应该有一个多项式时间解。但是我找不到算法。贪婪着色是否在所有完美图中给出最佳着色?? 最佳答案 100个顶点?噗。使用Cliquer在几秒钟内(可能是几分之一秒)暴力破解它。http://users.tkk.fi/pat/cliquer.html 关于c++-在完美图中寻找最大团,我们在StackOverflow上找到一个类似的问题:

c++ - 寻找最大子数组的分而治之算法 - 如何同时提供结果子数组索引?

打扰一下,我有一个任务要解决MaximumSubArrayProblem使用BruteForceAlgorithmO(n^2),DivideandConquerO(nlogn)和Kadane'sAlgorithmO(n).(我的代码不同)。"Forexample,forthesequenceofvalues{−2,1,−3,4,−1,2,1,−5,4},thecontiguoussub-arraywiththelargestsumis[4,−1,2,1]withsum6."-FromtheWikiPage.我已经完成了Kadane和BruteForce,我需要的输出不仅仅是找到总和,还

c++ - 根据公共(public)元素组合成对的整数

假设我有一对整数,例如(1,3)、(5,6)、(7,8)、(3,9),然后我想根据它们之间的共同元素将这些对组合成独特的集合即我可以组合(1,3)和(3,9)因为3在它们之间是通用的,所以上面输入的最终输出应该是这样的(1,3,9),(5,6),(7,8)一种方法可能是遍历此数组并基于公共(public)元素将其组合并从数组中删除第二对,我认为这很耗时。在C/C++中执行此操作的有效方法是什么? 最佳答案 执行此操作的一种有效方法是将其视为图形连接问题。创建一个图,其中节点是整数对,如果它们对应的对具有公共(public)元素,则在

c++ - 如何理解频率图像中描述的平均像素数?

我正在尝试实现AnilJainetal提出的广泛使用的指纹图像增强算法.在执行第2.5节中脊频率图像计算的步骤时,我在理解某些描述时遇到了困难。步骤说明如下:获取归一化图像G。将G分成大小为wxw(16x16)的block。对于以像素(i,j)为中心的每个block,计算在脊坐标系中定义的大小为lxw(32x16)的定向窗口。对于以像素(i,j)为中心的每个block,计算x签名,X[0],X1,...,X[l-1],定向窗口内的脊和谷,其中如果定向窗口中没有出现细节和奇异点,则x特征形成一个离散的正弦波,其频率与定向窗口中的脊和谷的频率相同。因此,可以从x特征估计脊和谷的频率。设T(

c++ - 任意多边形中最大的内接矩形

我使用OpenCV拼接已有一段时间了。现在我想做拼接的最后一步:裁剪图像。这导致在一般多边形中找到最大的内接轴平行矩形。我已经用谷歌搜索并找到了一些答案(HowdoIcroptolargestinteriorboundingboxinOpenCV?)。尽管程序运行缓慢,但输出图像的质量很好(裁剪图像需要15秒,而将36张1600x1200图片拼接成1幅全景图只需要47秒),因为使用的算法时间复杂度很差(对于轮廓中的每个点,它扫描同一行/列中的所有点)。有什么办法可以改善吗?谢谢。P/S:我也找到了这本书:FindingtheLargestAreaAxis-ParallelRectang

C++ set_intersection 比较函数

使用中的功能时,通常有一个额外的参数来自定义比较。但是我不太明白关于参数的描述(Documentationofset_intersection)。Binaryfunctionthatacceptstwoargumentsofthetypespointedbytheinputiterators,andreturnsavalueconvertibletobool.Thevaluereturnedindicateswhetherthefirstargumentisconsideredtogobeforethesecondinthespecificstrictweakorderingitdef