簡體   English   中英

以下搜索算法的時間復雜度是多少

[英]What will be the time complexity of below search algorithm

我正在嘗試通過將數組分成兩半來創建一個遞歸搜索元素的程序,你能說出下面代碼的時間復雜度嗎?

public  boolean search(List<Integer> A, int B,int l,int r) {
        if(l==r) {
            if(A.get(l)==B) {
                System.out.println("Found at index : "+l);
                return true;
            }else {
                return false;
            }
        }
        int mid = (l+r)/2;
        boolean a = search(A, B,l,mid);
        boolean b = search(A, B,mid+1,r);
        return a||b;
    }

上面的代碼,例如 l 是最左邊的索引,r 是最右邊的索引

列表 A = new ArrayList<>(Arrays.asList(2,5,1,65,8,4));

對於上述 arraylist,我們正在搜索元素 4,因此該方法將是-

search(A, 4,0,A.size()-1)

該算法的時間復雜度為 O(n),因為它將 go 遍歷列表中的每個元素。

空間復雜度為 O(log(n)),因為遞歸調用在回溯之前最多放入堆棧 log(n) 遞歸調用。 為什么? 因為每個遞歸調用都會將列表“分成”兩半,直到該搜索(子列表)中的最后一個元素被處理。 然后它將返回/回溯並繼續搜索列表的另一部分。 由於它在減半時回溯,直到該子列表中剩下一個元素,所以它永遠不會一次將所有元素放入遞歸調用的堆棧中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM