草庐IT

algorithm

全部标签

c++ - 给定一个字符串,找到它在字典中的所有排列

这是一道面试题:Givenastring,findallitspermutationsthatareawordindictionary.我的解决方案:将字典中的所有单词放入后缀树中,然后在树中搜索字符串的每个排列。搜索时间是O(n),其中n是字符串的大小。但是字符串可能有n!排列。如何提高效率? 最佳答案 您的一般方法还不错。但是,您可以通过重新排列单词使其所有字符按字母顺序排列,然后在字典中搜索,其中每个单词都按字母顺序类似地重新排列并映射到原始单词,从而避免搜索每个排列.我意识到这可能有点难以理解,所以这里有一个例子。说你的话是

c++ - 在数组中查找 y 的 x 个连续值的最有效方法是什么?

通过callgrind运行我的应用程序表明,这条线使其他一切相形见绌约10,000倍。我可能会围绕它重新设计,但这让我想知道;有更好的方法吗?这是我目前正在做的事情:inti=1;while(((*(buffer++)==0xffffffff&&++i)||(i=1))&&i它正在寻找32位无符号整数数组中desiredLength0xffffffff值的第一个block的偏移量。它比我想出的涉及内部循环的任何实现都要快得多。但它仍然太慢了。 最佳答案 我也会采纳search_n建议,因为我很确定它能正确地做到这一点。这实际上很容易

c++ - 一个数字,因为它是质数部分

我必须打印表示给定数字的方式的数量,因为它是质数部分。让我澄清一下:假设我得到了这个数字7。现在,首先,我必须找到所有小于7的素数,即2、3和5。现在,有多少个有什么方法可以汇总这些数字(我可以根据需要多次使用一个数字),以便结果等于7?例如,数字7有五种方式:2+2+32+3+22+53+2+25+2我完全迷失了这项任务。首先,我想我会像这样制作一个可用元素数组:{2,2,2,3,3,5}(7/2=3,所以2必须出现三次。3也是如此,它有两个发生)。之后,遍历数组并选择一个“领导者”来确定我们在数组中的距离。我知道解释很糟糕,所以这是代码:#include#includeintpri

c++ - 在矩阵中,在不使用额外空间的情况下,将 0 放入包含 0 的单元格的行和列中

给定一个矩阵,如果一个单元格包含0,那么我们就让这个单元格对应的整行整列都为0。例如,如果123M=045420那么输出应该是020000000我想到的方法如下制作辅助数组row[]和col[]。如果单元格(i,j)包含0,则将row[i]和col[j]标记为0。(最初是row[]和col[]包含全1)。再次遍历整个矩阵,如果对于cell(i,j),row[i]或col[j]中有一个为0,则将cell(i,j)为0。这需要O(m*n)时间和O(m+n)空间。如何在空间方面进一步优化它。也欢迎任何改进时间复杂度的建议。 最佳答案 啊哈

c++ - 给定 (a, b) 计算 k 的最大值,使得 a^{1/k} 和 b^{1/k} 是整数

我正在编写一个程序,试图找到k>1的最小值,使得a和b(均已给定)的第k个根等于整数。这是我的代码片段,我已对其进行评论以进行说明。intmain(){//Declarethevariablesaandb.doublea;doubleb;//Readinvariablesaandb.while(cin>>a>>b){intk=2;//Werequirethekthrootofaandbtobothbewholenumbers.//"whilea^{1/k}andb^{1/k}arenotbothwholenumbers..."while((fmod(pow(a,1.0/k),1)!=1

c++ - "contains string"的快速索引

在我的应用程序中,我有多达数百万个短字符串(大多数短于32个字符)。我想实现一个带有附加列表的搜索框,该列表仅包含包含在搜索框中输入的整个字符串的元素。我怎样才能预先建立一个索引来快速找到这样的字符串?所有排序的STL容器检查整个字符串。对于输入的搜索字符串“str”,我需要找到所有包含“str”的字符串:“mainstreet”、“struve”、“ustr”等。 最佳答案 您可以构建一个Permutermindexes.对于“struve”,您将插入Radixtree(或通用搜索树):struve$truve$sruve$stu

c++ - 使用网格中的顶点(2D 和 3D)查找边的算法

我有一个网格,其中包含某些类型的元素(例如三角形、四边形)。对于每个元素,我知道它的所有顶点,即三角形2D元素将有3个顶点v1、v2和v3,它们的x、y、z坐标是已知的。问题一我正在寻找一种将返回所有边的算法...在这种情况下:边缘(v1,v2),边缘(v1,v3),边缘(v2,v3)。根据每个元素有多少个顶点,该算法应该有效地确定边。问题二我正在使用C++,那么,存储上述算法返回的边信息的最有效方法是什么?例如,我只对一个元组(v1,v2)感兴趣,我想将其用于某些计算然后忘记它。谢谢 最佳答案 可以使用半边数据结构。基本上你的网格

c++ - 求解 D 给定 A、B、C 和 C-D 的长度,平行于 A-B

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭12年前。Improvethisquestion我正在尝试弄清楚如何做到这一点。基本上我有A点和B点,我知道它们的位置。然后我有C点和D点,我只知道C的坐标。我知道C-D的长度并且知道C-D必须平行于A-B。给定A、B、C和C-D的长度,我通常如何求解D。alttexthttp://img706.imageshack.us/img706/4494/imgclr.png

c++ - 如何使用 std::mem_fun 传递参数

我想知道是否可以使用std::mem_fun传递参数?我想准确地说,我可以有尽可能多的参数和很多成员函数。问题是我使用的是旧标准,我正在寻找一种完整的STL方式,因此即使我知道我可以轻松做到,也不允许将boost作为答案=/这是我想如何使用它的一个小例子:#include#include//Classdeclaration//structInterface{virtualvoidrun()=0;virtualvoiddo_something(int)=0;virtualvoiddo_func(int,int)=0;};structA:publicInterface{voidrun(){

c++ - <algorithm> 用对象进行 vector 排序?

因此,在标题中的c++文档中,有一个很好的函数可以让您对vector进行排序。我有一个类Person.我有一个指向该类对象的指针vector(vector),我想通过不同的参数比较人,例如年龄、姓名长度等。我已经有了返回所需变量的函数,但我不确定该怎么做。这是c++引用中排序vector函数的链接http://www.cplusplus.com/reference/algorithm/sort/ 最佳答案 就这么简单:structstudent{stringname;stringgrade;};boolcmd(conststuden