草庐IT

algorithm

全部标签

c++ - 处理大量规则(条件和约束)CEP 系统

我正在开发一个接受100k+唯一输入的应用程序——为简单起见,我们假设每个输入都是一个浮点值(a、b、c等)——尽管它们也可以是字符串等。该应用程序有许多与这些输入相关的规则/事件/触发器。示例1:Rule[(a>b)and(c[executeEventX]定义1:上面的规则说:当输入'a'的值大于'b'并且输入'c'的值小于或等于'时d'执行EventX例子2:Rule[x!=x.prev]-->[executeEventZ]定义2:上面的规则说:如果在值更新后,如果输入'x'的当前值不等于它以前的值(值已经改变)。执行EventZ我发现随着输入数量的增加和规则数量的增加,评估“特定

c++ - 均匀填充大小不一的 "buckets"未排序列表的最有效方法是什么

假设我有一个bucket的未排序列表秒。(每个桶都有一个size属性。)假设我有一个数量Q我必须尽可能均匀地分布在桶列表中(即最小化最大值)。如果桶排序的大小越来越大,那么解决方案就很明显了:完全填满每个桶,比如buckets[i],直到Q/(buckets.length-i)size,然后用相同数量的Q/(buckets.length-i)填充剩余的桶,如图:如果桶未排序,解决此问题的最有效方法是什么?我只能想到这样迭代(伪代码):whileQ>0foriin0..buckets.length-1q=Q/(buckets.length-i)ifq>buckets[i]->sizeq=

c++ - OCaml 中的快速位数组

另一个综合基准:SieveofEratosthenesC++#include#includevoidfind_primes(intn,std::vector&out){std::vectoris_prime(n+1,true);intlast=sqrt(n);for(inti=2;iOCaml(使用JaneStreet'sCore和Res库)openCore.StdmoduleBits=Res.BitsmoduleVect=Res.Arrayletfind_primesn=letis_prime=Bits.make(n+1)trueinletlast=floatn|!sqrt|!Flo

c++ - 旋转任意角度后,如何找到多边形在 X 轴上的最小可能投影?

给定二维多边形的顶点,我必须找到多边形在X轴上的最小可能投影。我可以任意角度旋转多边形。起初我想到的是最小的情况,多边形的至少一条边将与X轴对齐,这是不正确的。多边形可以是凹的也可以是凸的。 最佳答案 您正在寻找的是所谓的“旋转卡尺算法”。https://en.wikipedia.org/wiki/Rotating_calipers关于此算法的维基百科页面甚至有针对您的问题的伪代码。https://en.wikipedia.org/wiki/Rotating_calipers#Minimum_width_of_a_convex_po

c++ - 必须有一种非常快速的方法来计算这个按位表达式吗?

令v和w为两个位串。在当前应用中,它们由8位组成。我正在寻找计算以下表达式的最快方法。x=(v[1]&w[0])^(v[2]&w[1])^(v[2]&w[0])^(v[3]&w[2])^(v[3])&w[1])^(v[3]&w[0])^...关于这个主题的一些想法:我注意到的一件事是这个表达式也可以写成下面这样。让P(w[k])=w[k]^w[k-1]^...^w[0]表示w的最低k+1位的奇偶性。然后x=(v[1]&P(w[0]))^(v[2]&P(w[1]))^(v[3]&P(w[2]))^...^(v[7]&P(w[6]))现在如果Pw是一个位串,其中每个位表示低位的奇偶校验,即

c++ - 有理函数级数展开的最佳算法

我需要用C++编写函数代码,它可以有效地找到给定有理函数(P(x)/Q(x))的泰勒级数系数。函数参数将是多项式的幂(分母和分母相等),两个具有多项式系数和展开项数的数组。我的想法如下。考虑身份P(x)/Q(x)=R(x)+...其中R(x)是一个多项式,其项数等于我需要找到的系数数。然后我可以将两边与Q(x)相乘并得到P(x)=R(x)*Q(x)R(x)*Q(x)-P(x)=0因此,所有系数都应为零。这是用O(n^3)算法求解的方程组。O(n^3)没有我想要的那么快。有没有更快的算法?我知道级数的系数满足线性递推关系。这让我觉得O(n)算法是可能的。 最佳

c++ - 使用最少的内部内存资源有效地对进出磁盘的字符串进行排序的算法

我有一个非常(多个TB)存储在磁盘上的大量字符串,我需要按字母顺序排序并尽快存储在另一个文件中(最好是在C/C++中)并用作尽可能少的内部存储器。预先对字符串进行预索引不是一种选择,因此我需要在需要时以接近实时的方式对字符串进行排序。在我的案例中,最好的算法是什么?我更喜欢线性算法的建议,而不是像Lucene这样的现有软件库的链接。 最佳答案 您通常通过将大量外部数据分块分成更小的部分,对它们进行操作并最终将它们合并回来,从而对大量外部数据进行排序。在选择排序算法时,您通常会看一下您的要求:如果您需要时间复杂度保证且稳定,您可以选择

c++ - 一个通用的 STLish contains()

令我恼火的是,STL容器没有contains()方法返回true如果容器包含元素false否则。所以,我坐下来写了这个:templateinlineboolcontains(constC&container,constE&element){returncontainer.find(element)!=container.end();}对于集合和映射来说效果很好,但对于vector就不行了。或列表。我该如何进行?我应该再写一个吗templateinlineboolcontains(constvector&container,constT&element){std::find(vector

c++ - 用于查找多数元素的分而治之算法?

如果超过一半的元素相同,则称数组具有多数元素。是否存在用于确定数组是否具有多数元素的分而治之算法?我通常会执行以下操作,但不会使用分而治之。我不想使用Boyer-Moore算法。intfind(int[]arr,intsize){intcount=0,i,mElement;for(i=0;isize/2)returnmElement;return-1;} 最佳答案 我至少能看到一种分而治之的方法。首先找到中位数,例如使用Hoare的Select算法。如果一个值构成大多数元素,则中位数必须具有该值,因此我们刚刚找到了我们正在寻找的值。

c++ - 改进 malloc() 算法的下一步是什么?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我正在编写我自己的简单malloc()函数,我想创建更快、更高效的变体。我编写的函数使用线性搜索并在内存中按顺序连续分配。改进该算法的下一步是什么?我当前版本的主要缺点是什么?如果有任何反馈和建议,我将不胜感激。typedefstructheap_block{structheap_block*next;size_tsize;boolisfree;}header;#defineHeap_Capacity10