Java 给定排序数组,如果数组A包含元素A[i],且A[i]=i(递归和分治),则返回索引i
所以我有作业要做一个递归方法,使用分治算法来搜索一个排序的数组,并检查a[i]==i(如果值匹配数组的当前索引)。现在我不明白为什么我们会使用分而治之的算法,因为我们没有寻找一个特定的值 在我的头脑中(我是一个初学者),我只想做一个线性递归方法。给定长度为n的数组A,我们可以Java 给定排序数组,如果数组A包含元素A[i],且A[i]=i(递归和分治),则返回索引i,java,arrays,recursion,binary,divide-and-conquer,Java,Arrays,Recursion,Binary,Divide And Conquer,所以我有作业要做一个递归方法,使用分治算法来搜索一个排序的数组,并检查a[i]==i(如果值匹配数组的当前索引)。现在我不明白为什么我们会使用分而治之的算法,因为我们没有寻找一个特定的值 在我的头脑中(我是一个初学者),我只想做一个线性递归方法。给定长度为n的数组A,我们可以 if(n<0){ return -1;} if(A[n] == n){ return n;} else{ return recursiveMethod(Array A, n-1); } if(谢谢你承认
if(n<0){
return -1;}
if(A[n] == n){
return n;}
else{
return recursiveMethod(Array A, n-1);
}
if(谢谢你承认这是一个家庭作业问题:)。人们不太可能完全为你回答这个问题,但他们往往非常有趣,以至于人们无法避免发表评论。如果你注意格式和清晰正确的语言等细节,你总能得到更好的答案。例如,如果包含函数定义(function recursiveMethod(数组a,整数开始){
),并缩进函数体,代码将更容易理解
现在让我们来讨论这个问题:对于一个大小为n
的数组,你的函数需要进行精确的n
比较(我想你已经知道这部分了,它是线性函数中的线性,也是O(n))
我们能做得更好吗
要解决这样的问题,试着做一个懒惰的算法,总是寻找不需要做的工作。在这里,我们可以利用这样一个事实:数组被排序为可以跳过的工作的原因:当a[i]>i
时,所有值j=i..a[i]
也必须满足a[j]>j
。这是假设A可能包含重复的值。如果A中的所有值都必须是不同的,则可以排除比我上面所做的多一点的值