我们如何通过逐行分析来计算以下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 }
答案 0 :(得分:1)
基本思想是要注意,在每一步我们要么将我们正在搜索的区间的大小减半,要么我们突破了while循环,因为我们找到了我们一直在寻找的元素。如果初始大小为n
,那么我们通过对数的定义将它最多减半log_2 n
。在每次迭代中,我们花费O(1)
时间,因此总运行时间为O(log n)
,其中n
是我们搜索的时间间隔的大小。
更正式地说,您可以将T(n) = T(n/2)+O(1)
n>1
和T(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>
...
。