【问题标题】:Recurrence Relation For Linear Search Using Recursion使用递归的线性搜索的递归关系
【发布时间】:2020-11-08 07:14:04
【问题描述】:

以下代码的递归关系是什么以及如何解决它们?

public class LinearSearchUsingRecursion
{
    public static int linearSearch(int array[], int i, int n, int k)
    {
        if(i == n)
        {
            return -1;
        }
        
        if(array[i] == k)
        {
            return i;
        }
        
        i = i + 1;
        
        return linearSearch(array, i, n, k);        
    }

    public static void main(String[] args) 
    {
        
        int array[] = {5,8,7,9,6,0};
        int n = array.length;
        
        int k = 9;
        
        int pos = linearSearch(array, 0, n, k);
        System.out.println("Position : " + pos);

    }

}

我试过了,我得到了:-

T(n) = T(i+1) + 1
T(1) = 1

正确吗? 我们如何用 n 表示 i 并解决它?

【问题讨论】:

    标签: java algorithm recursion time-complexity linear-search


    【解决方案1】:

    应该是

    T(n) = T(n-1) + 1

    T(1) = 1

    时间应该是输入大小的函数,即n,而不是数组的索引。

    您将第一个元素做一个恒定的工作,即将其与k 进行比较,然后继续处理剩余的大小n-1

    如果你只有一个元素,那就是T(1) = 1只有一个比较。

    【讨论】:

    • 是的,一般情况下似乎没问题。但是在这里,我提供了程序,并且基于这种方法,我们必须形成递归关系。从程序中可以明显看出,在每次递归调用中 i 都会递增。因此,考虑到我们必须通过将 i 转换为 n 来形成关系。
    • 重复关系不依赖于实现细节。递归实现还是迭代实现都没有关系。
    • 我认为,递归关系完全取决于代码。给定一段代码,我们必须根据代码构造我们的递归关系。假设上面的代码不是线性搜索的,那么从哪一行你可以说我们正在处理每个递归调用的剩余 n-1 个元素。我是否在每个递归调用中递减 n..
    • 我的意思是递归关系取决于算法而不是实现。
    • 我不这么认为。为了解决一个问题,可以有一种算法可以使用不同的数据结构来实现。不同的实现可以给出不同的递归关系,从而产生不同的时间复杂度。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多