草庐IT

algorithm

全部标签

c++ - 以下函数的时间复杂度是多少?

intfunc(intn){if(n==1)return0;elsereturnsqrt(n);}其中sqrt(n)是Cmath.h库函数。O(1)O(lgn)O(lglgn)O(n)我认为运行时间完全取决于sqrt(n)。但是,我不知道这个功能实际上是如何实现的。附言据我所知,求一个数的平方根的一般方法是使用牛顿法。如果我没记错的话,使用牛顿法的时间复杂度原来是O(lgn)。那么答案应该是O(lgn)吗?附言在我参加的最近一次测试中得到了这个问题。 最佳答案 我将给出一些更一般的案例答案,而不假设int的大小不变。答案是Theta

c++ - 如何计算最小公共(public)祖先算法的时间复杂度?

我进入了一篇讲LCA算法的文章,代码很简单http://leetcode.com/2011/07/lowest-common-ancestor-of-a-binary-tree-part-i.html//Return#nodesthatmatchesPorQinthesubtree.intcountMatchesPQ(Node*root,Node*p,Node*q){if(!root)return0;intmatches=countMatchesPQ(root->left,p,q)+countMatchesPQ(root->right,p,q);if(root==p||root==q)

c++ - 填充闭合二维曲线的算法

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion我需要找到一种绘制封闭二维曲线内部的方法。这条曲线实际上是使用双三次贝塞尔曲线创建的,但我认为这并不重要。目前绘制的形状内不应有“孔”。所以它会被完全填满。似乎约束德劳内三角剖分是可行的方法吗?但是似乎有不同的方法可以做到这一点。我正在寻找一个快速简单的解决方案(但会实现使其正常工作所需的内容)。Illustrator等程序具有这种功能(或SVG——带有填充选项)。我正在寻找:做到这一点的技巧给我

c++ - 在巴比伦算法中为 C++ 中的平方根获取无限循环

我已经在整个Internet上彻底搜索了这个主题,线程要么死了,要么使用了与我书中描述的方法不同的方法。例如,http://www.geeksforgeeks.org/square-root-of-a-perfect-square/.这对我不起作用,因为我的算法需要循环直到达到最后“猜测”的1%。这是文本中的问题。TheBabylonianalgorithmtocomputethesquarerootofanumbernisasfollows:Makeaguessatthenumber(youcanpickn/2asyourinitialguess).Computer=n/guessS

c++ - 从连续的单词序列中提取任意范围的位的最有效方法是什么?

假设我们有一个std::vector,或任何其他序列容器(有时是双端队列),它存储uint64_t元素。现在,让我们将此vector视为size()*64的序列连续位。我需要找到由给定[begin,end)中的位组成的单词范围,鉴于end-begin所以它适合一个词。我现在的解决方案是找到其部分将构成结果的两个词,并将它们分别屏蔽和组合。因为我需要它尽可能高效,所以我尝试在没有任何if的情况下编写所有代码。分支不会导致分支预测错误,因此例如,当整个范围适合一个词或跨越两个词时,代码在两种情况下都有效,而不采用不同的路径。为此,我需要对这些shiftl进行编码和shiftr函数,除了将单

c++ - 查找字符串的所有可能排列

我有以下程序用于查找字符串的所有可能排列。#include/*Functiontoswapvaluesattwopointers*/voidswap(char*x,char*y){chartemp;temp=*x;*x=*y;*y=temp;}/*FunctiontoprintpermutationsofstringThisfunctiontakesthreeparameters:1.String2.Startingindexofthestring3.Endingindexofthestring.*/voidpermute(char*a,inti,intn){intj;if(i==n)

c++ - 找出不相交集的数量

对于那些不熟悉Disjoint-set数据结构的人。https://en.wikipedia.org/wiki/Disjoint-set_data_structure我正在努力寻找不。来自给定friend组及其关系的friend组。当然,毫无疑问,这可以使用BFS/DFS轻松实现。但我选择使用disjointset,我也倾向于查找该人所属的friend组等,而disjoint-set听起来当然适合这种情况。我已经实现了不相交集数据结构,现在我需要找到它包含的不相交集的数量(这将给我组数)。现在,我一直致力于实现如何有效地找到不相交集的数量,因为friend的数量可能大到100000。我

c++ - std::transform 的泛化

考虑一下我为N个输入迭代器编写的std::transform的这个简单概括:#include#include#includetemplateOutputIteratortransform(InputIteratorfirst,InputIteratorlast,OutputIteratorresult,NaryOperatorop,InputIterators...iterators){while(first!=last){*result=op(*first,*iterators++...);++result;++first;}returnresult;}intmain(){const

c++ - 检查相邻网格的最有效方法

假设我有一个由大小为NxN的二维数组A表示的大方形网格,并且通过其坐标将一个点分配给其中一个网格。每个网格都被八个相邻的网格包围(想想键盘上的数字键盘,5号被1、2、3、4、6、7、8、9包围)。现在我会为每个相邻的网格做一些事情,但是数组中的一些元素可能没有八个相邻的网格。如果它在寄宿生之一,那么它只有五个邻居(比如2号只被1、3、4、5、6包围),如果它在四个角之一,那么它只被包围三个邻居。给定数组A的一个元素,如何以最有效的方式检查它的邻居?我可以设置很多if语句来查看它的数组索引是否大于0或小于N-1,但是如何对这些if语句进行分组(嵌套)以便需要最少的步骤?谢谢

c++ - OpenCV:是否可以从角落检测矩形?

我有一张照片,其中一个人拿着一张纸。我想检测那张纸的矩形。我尝试按照OpenCV的不同教程以及各种SO答案和示例代码来检测正方形/矩形,但问题是它们都依赖于某种轮廓。如果我按照squares.cpp示例,我会从等高线得到以下结果:如您所见,手指是轮廓的一部分,因此算法找不到正方形。我也尝试过使用HoughLines()方法,但我得到的结果与上面类似:不过我可以可靠地检测到角点:图像中还有其他角,但我将发现的角总数限制在总是被发现。是否有某种算法可以从图像的多个角中找到一个矩形?我似乎找不到现有的方法。 最佳答案 您可以应用形态过滤器