草庐IT

Algorithm

全部标签

c++ - 递归生成给定子集大小的所有组合 (C++)

观察下面的代码:#include#include#includetemplatevoidprint_2d_vector(std::vector>&v){for(inti=0;istructpermcomb2{std::vector>end_set;std::vector*data;permcomb2(std::vector¶m):data(¶m){}voidhelpfunc(std::vector&seen,intdepth){if(depth==0){end_set.push_back(seen);}else{for(inti=0;istd::vector>permt

c++ - 有向图 - 如何计算图中每个其他顶点可到达的顶点数?

在有向图中如何有效地计算图中每个其他顶点可达的顶点数? 最佳答案 如果图中没有环,则只能有一个这样的顶点,并且它的入度为零,并且没有其他顶点的入度为零。然后你必须运行DFS来检查是否所有其他顶点都可以从它到达。所以答案要么是1,要么是0,这取决于DFS的结果。如果存在环路,则环路中的所有顶点都具有该属性,或者都不具有。如果您检测到一个循环,请用一个顶点替换循环中的所有顶点,并为该顶点保留一个标签,说明它代表了多少个顶点。使用与上述相同的过程。即,检查入度并从新节点运行DFS。答案将是零或标签。可以使用DFS来检测循环。图中可能有多个

c++ - 如何有效地比较相似名称的多个结构 vector ?

我正在为我的妻子编写一个程序,以帮助我们尝试决定她应该申请哪些医学院。但是,我遇到了一个问题,我试图提取在4种不同情况下出现在前20名结果中的学校。例如,在其中一个案例中,我将城市的收入中位数除以城市的平均房价。这会返回一个double,然后我创建一个新vector,然后根据该数字从最高到最低对该vector进行排序。我对池中的其他3个vector执行类似的操作,并应用不同的案例。我知道我可以强制执行此操作并使用嵌套的for循环提取名称,但我很想知道是否有一种方法可以快速有效地完成此操作。到目前为止,这是我的尝试。(注意,这只是一个例子,我的实际代码里面有30所学校)。#include

c++ - 如何使插入排序更快?

所以我得到了这段代码classChild{public:stringcode;floatavg;unsignedintdistance;intmonth;boolisSmallerThan(Childchild,char*ordering_chars);};boolChild::isSmallerThan(Childchild,char*ordering_chars){for(inti=0;i=0)&&array[i].isSmallerThan(temp,ordering);i--){array[i+1]=array[i];}array[i+1]=temp;}}我有一个Child对象

java - 比 o(n) 更快地计算 a^n 的模数

这个问题在这里已经有了答案:Raisinganumbertoahugeexponent(2个答案)关闭4年前。我需要计算(a^n)modb。我使用了这个java代码,但是当n太大时它不够快。for(longi=0;i正如您在上面的代码中看到的,n是一个long数字,因此该算法不够快。你建议任何更快的算法吗?看起来像这个问题但有点不同:Fastwaytocalculaten!modmwheremisprime?

c++ - 用于在链表中查找连接点的生产代码

我在一些采访中被问到这个问题。我被要求为O(1)空间和线性时间的生产环境编写代码以在链表(以Y的形式,双臂不一定相等)中查找连接点。我想出了这个解决方案(我以前在某处看到过):1.Measurelengthsofbothlists,letthembel1andl22.Movethepointeroflargerlistby|(l1-l2)|.3.Nowmovetogetherboththepointers,iftheypointtosamelocation,thatisthejunction.面试官:你的代码将如何处理?Case1.TheY-formatlinkedlisthasloo

c++ - Crypt Kicker 的更好解决方案?

虽然这看起来像是CryptKickerProblem的重复,它不是。我已经解决了这个问题,但我对我的解决方案并不满意。问题陈述是:加密文本的一种常见但不安全的方法是排列字母表中的字母。换句话说,字母表中的每个字母在文本中始终被其他字母替换。为确保加密可逆,不会将两个字母替换为同一个字母。你的任务是解密几行编码的文本,假设每一行都使用一组不同的替换,并且解密文本中的所有单词都来自已知单词的字典。输入输入包含一行,其中包含一个整数n,后跟n个小写单词,每行一个,按字母顺序排列。这n个词组成了解密文本中可能出现的词的字典。字典后面是几行输入。每行都如上所述加密。字典中的单词不超过1,000个

c++ - 什么是正确的 std::set_union 代码?

Thissite声称set_union等效于以下代码:templateOutputIteratorset_union(InputIterator1first1,InputIterator1last1,InputIterator2first2,InputIterator2last2,OutputIteratorresult){while(true){if(*first1但这看起来很奇怪:如果其中一个范围为空,会不会崩溃(或导致其他未定义的行为)?这两个if子句不应该在while循环的开头,而不是结尾吗? 最佳答案 我同意它看起来完全坏

c# - 缓存条目替换算法

我有一个软件项目,可以根据不同大小的对象创建一系列指纹(哈希)值。当然,对象越大,散列的计算成本就越高。哈希用于比较目的。我现在希望缓存哈希值以提高后续比较的性能。对于缓存中的任何给定条目,我有以下可用指标:点击次数最后修改日期/时间散列对象的大小继续我的问题。鉴于需要限制缓存的大小(将其限制为特定数量的条目),什么是替换缓存项的均衡方法?显然,较大的对象的散列成本更高,因此需要尽可能长时间地保存它们。但是,我想避免用大量大对象填充缓存会阻止future(较小的)项目被缓存的情况。因此,根据我可用的指标(见上文),我正在寻找一个很好的通用“公式”,用于在缓存变满时使缓存条目过期(删除)

c++ - 表达式转换问题

假设我们有以下语句:s=3*a*b-2*c,其中s,a,b和c是变量。此外,我们使用了ShuntingYard构建算法RPN表达式,所以现在我们可以为变量a、b和c赋值,并使用简单的方法计算s值RPN评估器。但是,问题是我应该能够计算任何变量a、b或c的值设置了其他变量。因此,我需要以某种方式转换现有表达式以获得一组表达式:a=(s+2*c)/(3*b)b=(s+2*c)/(3*a)c=(3*a*b-s)/2如何根据一个原始语句生成这样的表达式?是否有解决此类问题的标准方法?约束:一组可用的运算符:+、-、*、/,包括一元+和-运算符*、/和=两边不能有相同的变量(例如s=a*a或s=