Java中二进制搜索的时间复杂度

时间:2016-03-30 17:59:22

标签: algorithm time-complexity binary-search

我们如何通过逐行分析来计算以下java代码的复杂性

1    int[] data;
2    int size;
3
4    public boolean binarySearch(int key) 
5    {
6         int low = 0;
7         int high = size - 1;
8          
9         while(high >= low) {
10             int middle = (low + high) / 2;
11             if(data[middle] == key) {
12                 return true;
13             }
14             if(data[middle] < key) {
15                 low = middle + 1;
16             }
17             if(data[middle] > key) {
18                 high = middle - 1;
19             }
20        }
21        return false;
22   }

1 个答案:

答案 0 :(得分:1)

基本思想是要注意,在每一步我们要么将我们正在搜索的区间的大小减半,要么我们突破了while循环,因为我们找到了我们一直在寻找的元素。如果初始大小为n,那么我们通过对数的定义将它最多减半log_2 n。在每次迭代中,我们花费O(1)时间,因此总运行时间为O(log n),其中n是我们搜索的时间间隔的大小。

更正式地说,您可以将T(n) = T(n/2)+O(1) n>1T(1) = O(1)写为T(n) = O(log n)来解决... <div id="page-content"> <div id="search-results-main" class="wide"> <table class="search-results"> <thead>...</thead> <tbody> <tr id="ad-123123"> <td class="thumbnail">...</td> </tr> ... </tbody> </table> </div> </div> ...