草庐IT

algorithm

全部标签

c++ - 复杂形状匹配的最佳方法是什么

我需要知道什么是匹配图像中特定形状(模板)的最佳方法。我知道有几种方法,但是其中一些方法并没有取得很好的结果,而另一种方法则需要大量的处理时间,因此有人尝试了一种很好的快速方法以较短的处理时间进行匹配。例如,这是模板...我有一个样本,我想将样本与模板进行比较,如果样本与模板相似,则返回true,否则返回false。注意:我尝试了轮廓匹配,级联分类和SURF,但是它们都不是很好,或者处理时间也不是很好。 最佳答案 相互匹配是一项相当困难的任务,主要是由于以下事实:不同的技术具有非常不同的特征,并且在某些类别上可以产生几乎完美的结果,

c++ - 让老鼠走出迷宫

一只老鼠被放在迷宫中的某个未知位置。我们只能向上、向下、向右或向左移动。我们有两种方法:tryMove()如果有墙则返回false,如果我们可以移动则返回true。boolhasLadder():如果有梯子可以逃脱,则返回true。我们必须编写一个函数explore,如果找到出路则返回true,如果找不到出路则返回false。这是一个简单的图问题,如果我们能找到标记这些地方,就可以使用bfs或dfs算法来解决。如果我们不能标记这些地方,我们可以循环移动访问相同的地方。如果没有标记,有人可以帮我把老鼠从迷宫中弄出来吗?可能吗? 最佳答案

c++ - 二维中的所有 k 个最近邻居,C++

我需要为数据集中的每个点找到所有最近的邻居。该数据集包含约。1000万个二维点。数据接近网格,但没有形成精确的网格...此选项排除(在我看来)KD树的使用,其中基本假设是没有点具有相同的x坐标和y坐标。我需要一个O(n)或更好的快速算法(但实现起来不太困难:-)))来解决这个问题......由于boost没有标准化,我不想使用它...感谢您的回答或代码示例... 最佳答案 我会做以下事情:在点之上创建一个更大的网格。线性遍历这些点,并针对其中的每一个点,找出它属于哪个大“单元格”(并将这些点添加到与该单元格关联的列表中)。(这可以对

c++ - 改进分配器算法实现的建议

我有一个VisualStudio2008C++应用程序,我在其中为标准容器使用自定义分配器,以便它们的内存来自内存映射文件而不是堆。此分配器用于4种不同的用例:104字节固定大小结构std::vector>foo;200字节的固定大小结构304字节固定大小结构n字节字符串std::basic_string,MyAllocator>strn;我需要能够为其中的每一个分配大约32MB的空间。分配器使用std::map跟踪内存使用情况指向分配大小的指针。typedefstd::mapSuperBlock;每个SuperBlock代表4MB内存。有一个std::vector以防一个SuperB

c++ - 找到一组点的中心以顺时针排序?

我想按顺时针顺序对点vector进行排序以形成多边形,但我需要适当的中心才能这样做。我试过平均法,但有几个点根本没有正确排序。以顺时针方式对点进行排序时,找到中心的正确方法是什么?它在凹陷部分失败谢谢这是一张图片:绿色圆圈是中心。它应该看起来更像这样: 最佳答案 如果您没有预定义的中心点,则“按顺时针顺序排序”的概念没有明确定义。如果你只有一堆需要排序的点,而你事先不知道中心点,那么这个问题通常没有单一的解决方案。该问题有许多替代解决方案,每个解决方案都会为您提供不同的多边形作为结果。此外,找到一个允许您通过CW(或CCW)排序重新

c++ - 快速排序代码解释

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。这是我在实现快速排序算法时遇到的代码。你能在这里解释一下递归是如何工作的吗?voidquickSort(intarr[],intleft,intright){inti=left,j=right;inttmp;intpivot=arr[(left+right)/2];/*partition*/while(ipivot)j--;if(i请注意,这不是家庭作业。

c++ - 在 C++ 中从给定的未排序整数 vector 中获取最长排序元素序列的最简单方法

我有一个未排序的数组,需要提取最长的已排序元素序列。例如A=2,4,1,7,4,5,0,8,65,4,2,34这里0,8,65是我的目标序列我需要跟踪这个序列开始的索引 最佳答案 您可以使用此算法在线性时间O(N)内完成:构建与原始大小相同的Nvectorlenvector,使得len[i]包含元素seq[i]所属的最长连续上升运行的长度。len[i]的值可以计算如下:len[0]=1;for(inti=1;i!=N;i++){len[i]=seq[i-1]>=seq[i]?1:len[i-1]+1;}有了len,找到max(len

c++ - 在 Windows 7 上使用 SHA2-512 (CALG_SHA_512) 返回 "Invalid Algorithm Specified"

我尝试在Windows7上使用SHA2-512和CryptoAPI,但是,调用CryptCreateHash失败,GetLastError()=2148073480=0x80090008,即“无效算法”指定的”。根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549%28v=vs.85%29.aspxSHA2应该从WindowsXPSP3开始可用。这是我使用的代码:HCRYPTPROVhCryptProv;CryptAcquireContext(&hCryptProv,nullptr,nullptr,PRO

c++ - 如何在 C++ 中以相反的顺序添加一个 vector 与另一个 vector ?

有一个vectorvectorv我想添加另一个vectorvectortemp与这个vector相反的顺序。例如,v={1,5,7}andtemp={11,9,8}我想以相反的顺序添加temp,即{8,9,11}到vectorv.这样,v将是:v={1,5,7,8,9,11}这是我的做法:inta[]={1,5,7};vectorv(a,a+3);intb[]={11,9,8};vectortemp(b,b+3);for(inti=temp.size()-1;i>=0;i--)v.push_back(temp[i]);for(inti=0;iSTL或C++中是否有内置函数来执行此操作?

c++ - 如果有两个 "greatest"索引,我如何找到 vector 中最大值的索引,默认为更大的索引?

我一直在使用std::max_element(vec),但据我所知,如果两个“最大”索引相等,它会返回最小索引。例子:vectorv={1,2,3,4,5,3,3,2,5};std::max_element(v)将引用v[4],但出于我的项目的目的,我需要它引用v[8]代替。执行此操作的最佳方法是什么? 最佳答案 你可以用这个max_element(v.rbegin(),v.rend());引用最大值的最大索引。例如,#include"iostream"#include"vector"#include"algorithm"using