草庐IT

algorithm

全部标签

c++ - 使用快速排序对可能包含无穷大的容器进行排序是否安全?

我已经意识到,为了快速排序,所有无穷大都必须相等。换句话说,这样的标准是不够的:classEntity{public:floatvalue()const;boolvalueIsInfinite()const;};classCriterium{booloperator()(Entityleft,Entityright)const{if(left.valueIsInfinite())returnfalse;returnleft.value()container;qSort此排序失败,因为根据标准并非所有无穷大都相等。不等式取决于实体进入运算符的顺序。我发现,这样的排序失败了。我需要这样的东

c++ - 排序算法 - 方法

我必须使用面向对象的方法实现三种不同的排序算法,并且我一直在思考解决这个问题的最佳方法。基本上,我认为它应该是这样的:->排序(类、接口(interface)、多态)继承:->冒泡排序->插入排序->快速排序如果每个排序都有相同的接口(interface),那么访问不同的排序方法会更容易,因此,这意味着当我要添加其他排序算法时,我可以轻松地将它们实现到当前的设计和类结构中.我的问题是:这种方法好用吗?我可以使用模板吗?IE。如果我想使用冒泡,它会调用冒泡排序,如果我想使用插入,它会调用插入? 最佳答案 Sort应该是接口(inter

java - 最大值的预期数量

我有一个算法,它接受一个数组作为参数,并返回它的最大值。find_max(as):=max=as[0]fori=1...len(as){ifmax我的问题是:鉴于数组最初处于(均匀)随机排列并且其所有元素都是不同的,max变量更新的预期次数是多少(忽略初始值)作业)。例如,如果as=[1,3,2],则max的更新次数将为1(读取值3时)。 最佳答案 假设原始数组包含值1、2、...、N。令X_i,i=1..N为取值1的随机变量,如果i在算法过程中的某个时刻是最大值。那么算法取最大值的个数就是随机变量:M=X_1+X_2+...+X_

c++ - 如何跟踪整数变化 vector 的中位数?

试图在http://www.hackerearth.com/problem/algorithm/sum-of-medians-1/解决问题并考虑使用多重集来解决它,因为它可能包含重复值。我尝试编写如下代码:#include#include#includeusingnamespacestd;intmain(){intn,k,med_sum=0,p;cin>>n;multisetm;multiset::iteratoritr;for(inti=0;i>k;m.insert(k);p=k;if(pSampleInput:n=51051215SampleOutput:27Explanation

c++ - 将二叉树保存到文件

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。关于您编写​​的代码问题的问题必须在问题本身中描述具体问题—并且包括有效代码以重现它。参见SSCCE.org寻求指导。关闭9年前。社区在2天前审查了是否重新打开这个问题,然后将其关闭:原始关闭原因未解决Improvethisquestion我有一个非平衡(不是二进制搜索)二叉树需要将其编码(稍后解码)到txt文件。我怎样才能有效地做到这一点?我找到了这个link它谈论类似(相同)的问题,但对我来说很明显

c++ - std::stack<int> 具有最大功能?

如何实现stack使用最大操作,最大函数的复杂度为O(1)并且它使用O(n)额外内存? 最佳答案 想法是通过在堆栈中使用对来跟踪最大值。如果你向堆栈中插入一些东西,你会相应地更新最大值。classStack{private:stack>s;public:boolempty()const{returns.empty();}intmax()const{assert(empty()==false);returns.top().second;}intpop(){intans=s.top().first;s.pop();returnans;}

c++ - 如何在不使用递归的情况下找到字符串的所有排列?

谁能帮我解决这个问题:这是一个查找任意长度字符串的所有排列的程序。需要相同的非递归形式。(最好是C语言实现)usingnamespacestd;stringswtch(stringtopermute,intx,inty){stringnewstring=topermute;newstring[x]=newstring[y];newstring[y]=topermute[x];//avoidstempvariablereturnnewstring;}voidpermute(stringtopermute,intplace){if(place==topermute.length()-1){

c++ - STL - 在 <algorithm> 中使用成员函数或函数?

我想到这个问题是因为我得到了以下问题的一些答案,表明我可以使用vector::assign或copy用back_insert_iteratorhere.我的问题是,使用一种方法相对于另一种方法的优缺点是什么? 最佳答案 assign覆盖vector的内容,其中copywithback_insert_iterator执行push_back在vector上,从而保留其内容。编辑:如果问题是通用的(即是使用容器中定义的成员函数还是算法),我更喜欢使用成员函数,因为它可能已针对特定问题进行了优化与通用算法相比的容器。

c++ - 更快的 C#(或其他 .NET)Levenshtein 距离实现

晚安我从事模糊字符串匹配已有一段时间了,使用带有一些指针的C,我可以非常快速地(满足我的需要)实现两个字符串之间的Levenshtein距离。我尝试使用不安全代码和fixed关键字将代码移植到C#,但性能很慢。所以我选择构建一个C++dll并使用C#中的[DllImport],自动编码每个字符串。问题是,在分析之后,这一直是我程序中最耗时的部分,占程序总运行时间的50-57%。因为我认为我需要对来自大约300万条数据库记录的文本字段的大量子字符串进行一些繁重的工作,所以我认为Levenshtein距离所花费的时间几乎是NotAcceptable。也就是说,我想知道您是否对下面的代码有任

c++ - 如何将 13 位值映射到 4 位代码?

我有一些数据包处理程序的std::map。我在分析之前没有注意到,但不幸的是,这个map查找本身就消耗了大约10%的CPU时间(调用的时间太多)。输入数据中通常最多只存在10个键。所以我试图在map前实现一种键缓存。键值为13位整数。我知道只有8192个可能的键和8192个项目的数组可以提供持续的时间查找,但我已经感到羞愧并且不想使用这种天真的方法:(现在,我只是猜测一些散列方法可以非常快速地为13位整数生成4位代码值。有什么好主意吗?提前致谢。更新除了我的耻辱之外,我无法完全控制源代码,而且几乎禁止为此目的创建新数组。项目经理说(运行探查器的人)链表显示出小的性能提升,并建议使用st