草庐IT

algorithm

全部标签

c++ - 返回同时存在于列表 A 和列表 B 中的 x,y 坐标的最快方法是什么?

我有两个x,y坐标列表(列表A和列表B),其中0我一直在考虑将列表表示为两个位网格,并可能按位进行?列表A大约有1000个条目,并且可能每10,000个请求更改一次。列表B的长度会有很大差异,并且每次运行时都会有所不同。编辑:我应该提到没有坐标会出现在列表中两次;例如,1,1不能多次出现在列表A中。 最佳答案 如注释中所述,将(x,y)表示为单个24位数字。按数字顺序维护A(你说它变化不大,所以这应该几乎没有任何成本)。对每个B在列表中进行二分查找。由于A大约有1000个项目,因此您最多需要10次整数比较(在最坏的情况下)来检查成员

c++ - 如何通过一组线段找到最大交点数

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭11年前。假设我在笛卡尔坐标系中给出了线段的数量。每条线被指定为[x0,y0]和[x1,y1]。算法应该找到与最大线数相交的垂线。在此示例中,它跨越四行:什么算法可以用最小的复杂度做到这一点?(我更喜欢c++,但某种伪代码也可以)P.S需要考虑的一点是当几条线在同一个x坐标中开始/结束时谢谢。

c++ - 交换两个序列的元素,使得元素和的差异最小。

一道面试题:Giventwonon-orderedintegersequencesaandb,theirsizeisn,allnumbersarerandomlychosen:Exchangetheelementsofaandb,suchthatthesumoftheelementsofaminusthesumoftheelementsofbisminimal.举个例子:a=[513]b=[249]结果是(1+2+3)-(4+5+9)=-12。我的算法:将它们排序在一起,然后将第一个最小的n整数放在a中,剩下的放在b中。它在时间上是O(nlgn),在空间上是O(n)。我不知道如何将其改

c++ - 100% 确定性的快速素数测试?

我对任意大小的数据类型使用GMP(带有MPIR)。我也用了它的素性检验功能,用的是Miller-Rabin方法,但是不准确。这就是我要解决的问题。我能够通过sqrt方法使用蛮力确认数字18446744073709551253是素数。是否有任何方法可以100%准确地检查大数是否为素数?它不应该使用太多的内存/存储空间,几兆字节是可以接受的。应该比我用的sqrt方法快它应该适用于大小至少为64位或更大的数字。最后,它应该是100%准确的,没有可能!我有哪些选择?尽管我可以接受蛮力法(对于64位数字),但出于兴趣,我想要更快更大。此外,64位数字检查速度太慢:总共43秒!

c++ - 标准库分区算法

我写了这个分区函数:templateIpartition(Ibeg,Iend,Pp){Ifirst=beg;while(beg!=end){if(!p(*beg))beg++;else{//if(beg!=first)-EDIT:addconditionaltopreventswappingidenticalelementsstd::swap(*beg,*first);first++;beg++;}}returnfirst;}我已经用一些输出对其进行了测试,但我没有发现任何问题。标准库分区函数等同于:templateBidirectionalIteratorpartition(Bidi

c++ - 为什么这个 "reduction factor"算法在做 "+ div/2"

所以我正在浏览RobertLaganiere的“OpenCV2计算机视觉应用程序编程指南”。在第42页左右,它正在谈论一种图像缩小算法。我理解算法(我认为)但我不明白为什么要放入一个部分。我想我知道为什么但如果我错了我想纠正。我将在此处复制并粘贴其中的一些内容:"Colorimagesarecomposedof3-channelpixels.Eachofthesechannelscorrespondstotheintensityvalueofoneofthethreeprimarycolors(red,green,blue).Sinceeachofthesevaluesisan8-bi

c++ - 在 C++ 中生成 N 选择 K 排列

这个问题在这里已经有了答案:ImplementationofPermutation,CombinationsandPowerSetinC++[duplicate](2个答案)关闭7年前。我有一个函数接收n和k以创建n选择k的所有可能排列,虽然它适用于大多数组合,如5选择3或3选择2,但不适用于其他组合,如4选择2.我需要一些帮助来查找和理解错误。感谢您的关注。函数:voidPermGenerator(intn,intk){intd[]={1,2,3,4,5,6,7,8,9};sort(d,d+n);cout我正在使用next_permutation函数。cplusplus当我尝试4选2

c++ - 如何获得 vector 的排序索引?

我有一个vector。它没有排序。现在我想得到它的索引,它将对vector进行排序。例如vectorv{1,3,2},排序索引为{0,2,1}因为v[0].如果两个相等,哪个先走并不重要。 最佳答案 您正在寻找的称为标记排序(或索引排序)。这是在C++11中使用lambda的最小示例:#include#include#include#includetemplatestd::vectortag_sort(conststd::vector&v){std::vectorresult(v.size());std::iota(std::beg

c++ - 如何找到覆盖有向循环图中所有节点的最短路径?

我需要一个从一个节点到有向循环图的最短路径的例子(它应该从将成为输入的节点到达图中的所有节点)。如果有示例,我需要用C++编写的,或者算法。 最佳答案 编辑:糟糕,误读了问题。感谢@jfclavette选择这个。旧答案在最后。您要解决的问题称为Travellingsalesmanproblem.有很多potentialsolutions,但它是NP完全的,因此您无法求解大型图。旧答案:您要查找的是girth的图表。可以通过将节点到自身的距离设置为无穷大并使用Floyd-Warshall来解决。算法。从节点i开始的最短循环的长度就是位

c++ - 在基数树/patricia trie 中进行前缀搜索

我目前正在实现一个基数树/patriciatrie(随便你怎么调用它)。我想用它在一个功能严重不足的硬件上的字典中进行前缀搜索。它应该或多或少像自动完成一样工作,我。e.显示输入的前缀匹配的单词列表。我的实现基于onthisarticle,但其中的代码不包括前缀搜索,尽管作者说:[...]Sayyouwanttoenumerateallthenodesthathavekeyswithacommonprefix"AB".Youcanperformadepthfirstsearchstartingatthatroot,stoppingwheneveryouencounterbackedge