草庐IT

algorithm

全部标签

java - 二进制搜索 O(log n) 算法在顺序列表中查找重复项?

有谁知道在连续数字列表中查找重复项的比线性算法更快的算法?我现在在Java工作,但任何语言或伪代码都可以。例如,给定这个int[]输入:0|1|2|3|4|5|6|7|7|8|9输出将是索引或值“7”。我知道在O(n)线性时间内进行明显的遍历,但我正在尝试通过O(logn)的二进制搜索来查看这是否可能时间。 最佳答案 如果您假设数字必须从0开始并以1递增,您可以将中间值与索引进行比较。如果中间相同就走高,如果中间不一样就走低。这将为您提供二进制搜索时间O(log2N)。唯一的区别是您是在与索引进行比较,而不是与固定值进行比较。pub

java - 如何生成一个完整的数独板?算法错误

我正在尝试生成一个完整的(即每个单元格都填有一个数字)类数独棋盘。这是为了与数独无关的其他事情,所以我对达到可以解决的白色方block的数独或任何与数独有关的事情不感兴趣。不知道你明白我的意思吗。我用java做了这个:privateintsudokuNumberSelector(intx,inty,int[][]sudoku){booleanvalid=true;StringvalidNumbers=newString();int[]aValidNumbers;intsquarexstart=0;intsquareystart=0;intb=0;//ForrandomnumbersRa

java - 从下往上扫描树结构?

如果给定以下树结构或类似结构:我想要返回字符串ZYXWVUT。我知道如何用一棵二叉树来做到这一点,但不知道如何使用可以有多个子节点的二叉树。任何帮助将不胜感激。 最佳答案 这叫做post-ordertraversalofatree:在打印节点本身的内容之前打印树的所有子树的内容。这可以递归完成,像这样(伪代码):functionpost_order(Treenode)foreachninnode.childrenpost_order(n)print(node.text) 关于java-从

java - HPC(主要基于 Java)

除了使用目标机器拥有的多核之外,我正在寻找某种方法来使用GPU的数字运算能力(也许是Java?)。我将致力于实现(目前)A*算法,但将来我希望用某种遗传算法代替它。我看过ProjectFortress但是当我在JavaFX中构建我的GUI时,我不想偏离JVM太远。当然,如果没有可用的可行解决方案,我将迁移到最容易实现的解决方案。 最佳答案 如果您对使用GPU的HPC感兴趣,那么也许您可以查看jCuda.这为CUDA提供了Java绑定(bind),以及对CUDAFFT、CUDABLAS和CUDADPP的访问。我还没有看到关于这个库的任

java - 在潜在语义索引方面需要帮助

对不起,如果我的问题听起来很愚蠢:)你能给我推荐任何伪代码或在java中实现LSI的好算法吗?我不是数学专家。我试着阅读维基百科和其他网站上的一些文章LSI(潜在语义索引)他们充满了数学。我知道LSI充满了数学。但是如果我看到一些源代码或算法。我更懂事容易地。这就是我在这里问的原因,因为这里有很多GURU!提前致谢 最佳答案 LSA的想法基于一个假设:在同一文档中出现的两个词越多,它们就越相似。事实上,我们可以预期“编程”和“算法”这两个词在同一文档中的出现频率要远高于“编程”和“狗繁殖”。同样适用于文档:两个文档的常用词/相似词越

java - 给定一个包含多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

我们得到了一个大小为N的数组,其中包含0到N-2范围内的整数,包括两者。数组可以有多个重复项。我们需要在O(N)时间和常数空间中找到重复条目之一。我正在考虑取数组中所有整数的乘积和总和,以及0到N-2范围内所有数字的乘积和总和。然后,总和的差和乘积的除法将给出两个方程。如果假设只有两个重复条目,则此方法会起作用,但由于可以有两个以上,我认为我的方法失败了。有什么建议吗?编辑:数组是不可变的。我意识到这是一条重要的信息,我很抱歉之前忘记包含它。 最佳答案 这是一个不错的治疗方法。在解决这个问题之前,它会先解决一些更简单的问题。http

java - 当 hashcode() 实现返回常量值时,为什么哈希表会退化为链表?

//Theworstpossiblelegalhashfunction-neveruse!@OverridepublicinthashCode(){return42;}It’slegalbecauseitensuresthatequalobjectshavethesamehashcode.It’satrociousbecauseitensuresthateveryobjecthasthesamehashcode.Therefore,everyobjecthashestothesamebucket,andhashtablesdegeneratetolinkedlists.Programs

java - 算法将数字转换为字符串

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion我需要设计一个算法,将每个数字编码成一个字母表,例如:1=A,2=B,3=C...26=Z给定一组数字,我必须将它们转换为字符串组合。例如:123canbetranslatedto-ABC(123),AW(123)andLC(123)编写一个算法来查找数字-123123123的组合。现在这是我写的,我发现它由于多个“for”循环而效率低下。有没有更好的方法可以重写这个算法?publiccl

java - 字符串反向操作最佳时间复杂度: Is it O(n) or O(n/2)?

下面是字符串反转的代码片段privatestaticStringreverseString(StringoriginalString){chararr[]=originalString.toCharArray();chartemp;for(inti=0,j=arr.length-1;i我看到很多关于上述字符串反转的时间复杂度的讨论,其中一些提到复杂度为O(n/2)和一些O(n)。我想了解哪个实际上是字符串反转的正确时间复杂度。任何见解都将真正有助于缓解这里的困惑。 最佳答案 O(n)和O(n/2)之间没有什么区别。两者之间的差异是恒

java - 添加号码的数字

这个问题在这里已经有了答案:Fastestmethodforadding/summingtheindividualdigitcomponentsofanumber(4个答案)关闭6年前。我必须构建一个方法来添加参数中给出的字符串的每个数字,直到只剩下1个数字,例如1234=(1+2+3+4)=10=(1+0)=1。起初,我认为递归调用或while循环应该没问题。但是有更聪明的方法吗?也许使用模数?1234%9=1这似乎可行...但不是:9%9不等于9但它是到0。有没有办法不用递归/for/while来构建这个函数?