草庐IT

algorithm

全部标签

java - 给定一个数字检查数字是否形成加法方程?

给定一个字符串S,我想找出是否存在不重叠的子串A、B和C在S中,因此当子字符串被解释为十进制数时,等式A+B=C成立。示例:对于S=17512,答案是肯定的,因为12+5=17成立。这不是作业题,我已经尝试过构建后缀数组来解决这个问题175127512512122但后来我意识到给定132,1+2=3在选择时是否需要其他形式的排列?如何有效地解决这个问题? 最佳答案 令S为数字的十进制表示。如果n=|S|足够小(让我们从等式A+B=C中枚举A和C(我们假设w.l.o.g.A>B)。我们知道它们的大小必须大致相同(加/减一位数),因此枚

c++ - 查找字符串中不存在的最小子字符串

我有一个仅包含数字0-9的字符串。字符串的长度可以介于1到1,000,000个字符之间。我需要在线性时间内找到字符串中不存在的最小数字。以下是一些示例:1023456789//Smallestnumbernotinstringis111023479//Smallestnumbernotinstringis5112131405678910//Smallestnumbernotinstringis15对于1,000,000的大小,我认为字符串中不存在的最小数字最多为6位数字。我的方法是生成从0到999,999的所有数字,并将它们全部插入一个vector(按顺序)。然后制作一张map,标记哪

c++ - 在网格中找到最佳路径的最大长度

给定一个N*N的网格,现在我们需要找到一条最大长度的好路径,好路径定义如下:好的路径总是从标记为0的单元格开始我们只能向左、向右、向上或向下移动如果第i个单元格的值为A,则路径中下一个单元格的值必须为A+1。现在给定这几个条件,我需要找出可以走的最大路径的长度。我还需要计算最大长度的路径。例子:设N=3,我们有3*3矩阵如下:032301210那么这里的最大好路径长度是3,这样好路径的数量是4。032301210032301210032301210032301210 最佳答案 此问题是LongestPathProblem的变体,但是

c++ - xorshift128+ 算法的真正定义是什么?

我需要一个好的伪随机数生成器(PRNG),目前最先进的似乎是xorshift128+算法。不幸的是,我发现了2个不同的版本。维基百科上的那个:Xorshift显示为:uint64_ts[2];uint64_txorshift128plus(void){uint64_tx=s[0];uint64_tconsty=s[1];s[0]=y;x^=x>17)^(y>>26);//b,creturns[1]+y;}这看起来很简单。更重要的是,编辑日志似乎显示该代码片段是由名为“Vigna”的用户添加的,该用户可能是“SebastianoVigna”,他是关于xorshift128+的论文的作者:

c++ - 从一组集合中找到所有不相交集合的算法是什么?

我有“n”组(nA={2,5,6,7},B={5,1}andC={5,7}.那么输出将是{{5},{2,6},{1},{7}}。这可以是什么算法?我考虑过找到成对的不相交集,然后使用这些新的(不相交的)集再次从剩下的集合中找到不相交的集。但这不会很好地扩展。希望这会有所帮助:DiagramExample 最佳答案 您可以将您的问题视为一个bool值二项映射,元素是行,集合是列,bool值是问题的答案是集合中包含的元素。例如你的例子是:tABC21005111610071011010然后为每个元素创建一个键,描述它所在的不同集合,并将

C++-如何增加堆栈大小以允许 Kosaraju 算法进行更多递归以计算强连通分量

我使用的是mac、4GBRAM和CLionIDE。编译器是Clang。我需要在这个深度优先搜索的递归实现中允许更多的递归(目前在具有80k节点的图上失败)。typedefunordered_map>graph;voidDFS(graph&G,inti,vector&visited){visited[i]=true;for(intj=0;i这是为了实现Kosaraju算法以计算图中的强连通分量。https://en.wikipedia.org/wiki/Kosaraju%27s_algorithm我知道可以将DFS实现为迭代,但最后一步很重要,我找不到使用迭代来包含它的方法。这是因为该步

c++ - 子三角形中最大元素的总和

我试过了lastquestion来自今年的CCC2019S5。问题陈述:在平行宇宙中,计算机科学中最重要的数据结构是三角形。大小为M的三角形由M行组成,第i行包含i个元素。此外,这些行必须排列成等边三角形的形状。也就是说,每一行都以通过三角形中间的垂直对称线为中心。例如,下图显示了一个大小为4的三角形:一个三角形包含子三角形。例如,上面的三角形包含十个大小为1的子三角形,六个大小为2的子三角形(其中两个是包含(3,1,2)的三角形和包含(4,6,1)的三角形),三个大小为3的子三角形(其中一个包含(2,2,1,1,4,2))。请注意,每个三角形都是其自身的子三角形。给定一个大小为N的三

c++ - 如何在给定前两个数字的级数中找到大于 x 的第 n 个最小子数组和?

我有一个级数“a”,其中给出了前两个数字(a1和a2),每个下一个数字是大于前一个数字的子数组的最小总和。例如,如果我有a1=2和a2=3,那么进度将是2,3,5(=2+3),8(=3+5),10(=2+3+5),13(=​​5+8),16(=3+5+8),18(=2+3+5+8=8+10),23(=5+8+10=10+13),26(=3+5+8+10),28(=2+3+5+8+10),29(=13+16)...我需要找到这个级数中的第N个数字。(限时0.7秒)(a1小于a2,a2小于1000,N小于100000)我尝试了优先级队列、集合、映射、https://www.geeksfor

c++ - 如何加快计算最长公共(public)子串的长度?

我有两个非常大的字符串,我想找出它们的LongestCommonSubstring.一种方法是使用后缀树(应该有很好的复杂性,虽然实现起来很复杂),另一种是动态规划方法(都提到了在上面链接的维基百科页面上)。使用动态规划问题在于动态规划方法运行时间巨大(复杂度为O(n*m),其中n和m是两个字符串的长度)。我想知道的(在跳转到实现后缀树之前):如果我只想知道公共(public)子串的长度(而不是公共(public)子串本身),是否可以加快算法速度? 最佳答案 这些将使它运行得更快,尽管它仍然是O(nm)。空间优化(这可能会为您节省一

c++ - 保留有关访问状态的信息的想法

我现在正在制作15拼图求解器(在C++中),但我的程序必须解决3x4拼图、8x8拼图等,而不是只有15个拼图...->XxY拼图。我必须以某种方式保留有关访问状态的信息,我的第一个想法是制作树,例如:谜题:State11230State21302我在我的树上:root->1->2->3->0       \_         \->3->0->2这也适用于5x3、6x6等拼图,适用于所有拼图这个想法可行,但是浪费了很多内存,而且添加节点需要一些时间:/所以效率很低。下一个想法是在STL的std::map中保留访问过的状态,但我不知道如何制作好的散列函数——从拼图状态创建快捷方式(因为我