草庐IT

algorithm

全部标签

c++ - 什么算法会混合具有相同场景的多张图像,除了每张图像中不同位置的一个对象?

我想混契约(Contract)一场景的多张照片,但每次拍摄时只有一个物体处于不同的位置。我想知道什么样的算法会给出预期的结果。这是一个例子 最佳答案 嗯,你要找的是ImageFusion.有很多方法可以做到这一点,但它仍然是一个相当活跃的研究想法。根据您拥有的图像,您应该选择表现最佳的图像。因为您的图像会有瑕疵和光照、阴影差异,这远远超出了简单的剪切和粘贴。这里有更多信息和一些算法解释:ImageFusionbyImageBlending. 关于c++-什么算法会混合具有相同场景的多张图

c++ - 在 C++ 中创建 trie/suffix 树时减少内存使用

我正尝试在C++中创建一个trie,现在我的基本数据结构看起来像..structnode{intcount;nooftimesthisnodehasbeenvisited.structnode*child[ALPHABET_SIZE];//LetALPHABET_SIZEbe26}当字符串变大时,会浪费大量分配的内存。就像我们插入"he"我们的树将是root---->h--->e|--->e我们看到在根目录下,只有2/26th分配的内存被使用。如何改进??。 最佳答案 一些非常基本的建议:如果预计您的分支因子较低,请考虑为子项使用数

c++ - 使用 map 的 Trie 实现

实现Trie数据结构的简单方法是使用std::map.如果我使用它会发生什么错误。我需要序列化和反序列化Trie。所以节点中的每个映射都是AVL树。也许我会有开销?但是在map中我可以更快地搜索,如果我使用列表。templatestructNodeTrie{std::map`boolisWord;T&val;}; 最佳答案 我喜欢你的想法。尝试是重要的数据结构,我对map作为高效容器有愉快的体验。只是一些评论:如果您的编译器支持它,您可以通过为每个节点单独分配来避免浪费内存。templatestructNodeTrie{NodeTr

c++ - 如何更新某些子集的排名?

我输入了一些比赛(比方说马拉松)中的排名,其值在[0,N)范围内。有几个子竞赛(例如基于年龄、性别等)只对子集team感兴趣,而另一个子集not_eligible不符合条件。我正在寻找一种可以更新排名的高效算法(最好是根据标准库编写的)。示例:autoteam=std::vector{1,2,9,13};autonot_eligible=std::vector{8,10,12};std::vectorresult;//somealgorithmassert(result==std::vector{1,2,8,10});因为只有1名低于#9(即#8)的参赛者不合格,#9的排名下降1,并且

python - MPI Newbie - 关于 'mpirun' 工作原理和进程管理的一些问题

首先,我不是专业的程序员,但我必须为我的项目编写代码(尽管我对C++和python有一定的熟练程度)。当我遇到困难时,我经常来这里,大多数时候从这里得到很好的解决方案,但现在我有关于MPI编程的基本问题,否则在我了解它的概念之前我无法真正继续。这是我对问题的描述,我想为科学计算的算法创建代码。代码可以分为两部分。A.)矩阵vector乘法和矩阵求逆。这部分相对简单,我什至有自己的MPI代码用于这部分B.)调用外部MPI-ready程序进行更复杂的计算(这部分应该也很简单,因为它只是调用UNIX命令行)。我遇到的问题是如何将这两个部分连接在一起?我的算法是这样的,forkinspecif

c++ - 查找 MST 的关键边缘 : possible with modified Prim's algorithm?

我在寻找“临界边缘”问题的解决方案时遇到了这个问题。我已经解决的原始(C++)问题是:ConsideragraphG=(V,E).FindhowmanyedgesbelongtoallMSTs,howmanyedgesdonotbelongtoanyMSTandhowmanyedgesbelongtosomeMSTs,butnotall.我们分别称“绿色”、“红色”和“黄色”为上述3种情况中的边缘。在进行研究后,我遇到了FindallcriticaledgesofanMST,这解决了问题。一个人会运行Kruskal算法的修改版本:如果相同权重的两条或更多条边连接相同的组件,从而形成一个

c++ - 这个程序的复杂度是多少

我在HackerEarth上解决了一个问题。问题是Phineas正在他的后院build一座城堡来打动Isabella(很奇怪,不是吗?)。他已经把所有东西都准备好了。甚至一楼也已经完工。现在是时候制作上半部分了。这就是事情变得有趣的地方。由于Ferb在粉刷栅栏一整天后正在屋子里sleep(你们帮了他,不是吗!),Phineas必须自己完成所有工作。他很擅长这个,他要你做的就是操作迷你起重机来吊起石头。围墙的石头已经切割好了,等着你去搬。现在我们没有Ferb来操作小型起重机,他是这方面的专家,我们必须尽快完成这项工作。我们给出了起重机的最大起重能力,以及每block石头的重量。由于它是一

c++ - STL RBTree 是有序迭代 O(N ln N) 吗?

这个问题在这里已经有了答案:What'sthetimecomplexityofiteratingthroughastd::set/std::map?(2个答案)关闭7年前。问题:STL红黑树(STL_tree.h)中序迭代时间复杂度是O(NlnN)吗?我在网上搜索,找不到答案。我认为任何ADT的有序迭代的时间复杂度应该是O(N)。如果我错了,请告诉我。我从这段代码中查看了STLRB树(https://www.sgi.com/tech/stl/stl_tree.h)看来迭代器的++运算符不是O(1)而是O(lnN)。void_M_increment(){if(_M_node->_M_ri

c++ - 数组折叠成单个元素

这是一道面试题,不是作业。给定一个1到2^N的数组。例如:12345678(2^3)。假设这个数组写在纸上,我们需要把它对折,这样左半部分就会被镜像,然后移动到右半部分下面,就像这个12345678left|righthalf|half成为56784321下一次折叠我们取右一半,镜像它并将其移动到左半部分下方,56438712纸张必须折叠,每次都改变方向(左-对-右),直到我们拥有像这样的单列中的所有元素63725481我的解决方案,第一步:将原数组的后半部分创建一个链表,将前半部分反转并用头指针连接起来,5678||||4321并将链表的头指针存储在一个名为headarray的数组中

c++ - 创建一个函数,检查数组是否具有两个相反的元素,复杂度小于 n^2。 (C++)

创建一个函数来检查一个数组是否有两个相反的元素,复杂度小于n^2。让我们使用数字。显然最简单的方法是:boolopposite(int*arr,intn)//n-arraylength{for(inti=0;i请问各位有没有想出一个复杂度小于n^2的算法。我的第一个想法如下:1)排序数组(最坏情况复杂度算法:n.log(n))2)创建两个新数组,填充原始数组中的负数和正数(到目前为止我们有->n.log(n)+n+n=n.log(n))3)...以某种方式比较两个新数组以确定它们是否具有相反的数字我不太确定我的想法是否正确,但我愿意接受建议。 最佳答案