草庐IT

递归算法

全部标签

java - QuickSort分区算法

我正在尝试编写Cormen算法教科书中的快速排序算法。下面是我的代码。classQuicksort{publicvoidqSort(int[]a,intp,intr){if(p但是,当我执行这段代码时,我得到了一个错误的输出。OriginalArray:54721936108SortedArray:14526738910谁能解释一下哪里出了问题。我已经完全按照“算法简介”一书中给出的方式实现了这段代码。谢谢。 最佳答案 不,你没有直接复制它:)我有它......for(intj=p;j应该是for(intj=p;j或for(intj

c# - Java中递归和非递归函数的效率比较

据我了解,由于函数调用的开销,递归函数的效率通常低于等效的非递归函数。但是,我最近遇到一本教科书,说这对于Java(和C#)不是必需的。它没有说明原因,但我认为这可能是因为Java编译器以某种方式优化了递归函数。有人知道为什么会这样吗? 最佳答案 教科书可能指的是尾调用优化;有关详细信息,请参阅@Travis的回答。但是,教科书在Java上下文中是不正确的。当前的Java编译器没有实现尾调用优化,显然是因为它会干扰Java安全实现,并且会改变出于各种目的对调用堆栈进行内省(introspection)的应用程序的行为。引用资料:Do

java - 递归搜索Java中的目录

在Java中查找具有特定名称的目录的最佳方法是什么?我要查找的目录可以位于当前目录或其子目录之一中。 最佳答案 在Java8中通过streamsAPI:Optionalhit=Files.walk(myPath).filter(file->file.getFileName().equals(myName)).findAny();#walk是懒惰的,所以任何short-circuitingterminaloperation将优化所需的IO。 关于java-递归搜索Java中的目录,我们在S

java - 递归 isPalindrome 函数如何工作?

我正在研究一些介绍性的递归问题,我有一个需要澄清的问题希望得到解答。我最烦心的问题是这个递归如何在下面解决的问题中运行?尽管解决了问题,但我只是不明白递归调用是如何进入字符串内部的。从代码来看,似乎这种方法只会检查给定字符串两端的两个字符,而不会检查其余部分。我的教科书给出了一个非常令人不满意的答案,基本上,只要您的return语句改进了问题,就不必担心递归的工作原理。但是,如果不了解如何以跟踪循环的方式跟踪递归方法,我就很难知道如何处理后续递归问题。任何智慧的话将不胜感激。谢谢!publicclassisPalindrome{publicstaticbooleanisPalindro

强一致共识算法-BFT/CFT

区块链中共识机制的目的:使所有节点获得一致的区块链视图。一致性视图包含两个含义:1、一致性:区块链的每次更新后,每个节点都能获得相同的视图;2、有效性(可审查特性):由任一诚实节点在区块链发布的信息都最终被其它节点承认并记录。(如果一笔交易被发送到N−fN-fN−f个诚实节点了,那么最终每个诚实节点都会确认这笔交易。这就是可审查特性。)在区块链系统中达成以上两个特性的算法就是一致性算法。分布式系统一般通过状态复制机原理来实现一致性。其核心思想是系统中所有副本运行着相同的状态机,只要所有副本都以相同的初始状态开始,并基于相同的初始状态执行一组相同顺序的操作,那么所有的状态最终会收敛一致,即整个系

代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和。

代码随想录算法训练营第六天|454.四数相加II,383.赎金信,15.三数之和,18.四数之和。454.四数相加II383.赎金信15.三数之和18.四数之和454.四数相加II题目链接:454.四数相加II,难度:中等【实现代码】classSolution{public:intfourSumCount(vectorint>&nums1,vectorint>&nums2,vectorint>&nums3,vectorint>&nums4){intn=nums1.size();intresult=0;unordered_mapint,int>m;intsum;for(inti=0;in;i++

java - 算法:合并重叠片段

我有以下ADT(未排序):List//directionisfrom0to2piclassSegment{intstart;intend;}例如,他们代表这种情况:如何制作合并阶段(示例中的绿色箭头)?显然我需要遍历列表并将每个段与所有其他段进行比较,并且如果可能的话对每对夫妇进行简单合并(这很容易)。但是在第二次迭代中我需要以某种方式返回到列表的开头并重新开始等等......所以我很难找到这个算法将如何收敛。编辑:线段可以是圆形的——从1.75pi到0.5pi等等...... 最佳答案 按开始时间对片段进行排序。创建一个堆栈来存储

java - 通过递归查找数组中最大的正整数

我决定递归地实现一个非常简单的程序,看看Java如何处理递归*,结果有点短。这就是我最后写的:publicclasslargestInIntArray{publicstaticvoidmain(String[]args){//Thesethreelinesjustsetupanarrayofints:int[]ints=newint[100];java.util.Randomr=newjava.util.Random();for(inti=0;ilargest)largest=i;returnlargest;}privatestaticintrecursive(int[]ints,in

java - 递归二叉搜索树插入

所以这是我的第一个java程序,但我已经做了几年的c++。我写了我认为应该起作用的东西,但实际上并没有。所以我规定必须为此调用编写一个方法:tree.insertNode(value);其中值是一个整数。出于显而易见的原因,我想递归地编写它,所以我不得不做一个变通:publicvoidinsertNode(intkey){Nodetemp=newNode(key);if(root==null)root=temp;elseinsertNode(temp);}publicvoidinsertNode(Nodetemp){if(root==null)root=temp;elseif(temp

java - Java中Levenshtein算法的问题

我想使用Levenshteinalgorithm对于以下任务:如果我网站上的用户搜索某个值(他在输入中输入字符),我想立即使用AJAX检查建议,就像GoogleInstant一样。我的印象是Levenshtein算法对于这样的任务来说太慢了。为了检查它的行为,我首先用Java实现它,在方法的每次递归调用中打印出两个String。publicclassLevenshtein{publicstaticvoidmain(String[]arg){Stringa="HalloZusammen";Stringb="jfdssZusammen";intres=levenshtein(a,b);Sy