分治法-二分搜索
2017-11-06 16:11
309 查看
1、二分搜索技术
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
解析:
(1)该问题的规模缩小到一定的程度就可以容易地解决;
(2)该问题可以分解为若干个规模较小的相同问题;
(3)分解出的子问题的解可以合并为原问题的解;
(4)分解出的各个子问题是相互独立的。
算法实现:
总结:
每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)。
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
解析:
(1)该问题的规模缩小到一定的程度就可以容易地解决;
(2)该问题可以分解为若干个规模较小的相同问题;
(3)分解出的子问题的解可以合并为原问题的解;
(4)分解出的各个子问题是相互独立的。
算法实现:
#include<stdio.h> int binarySearch(int a[], int x, int n) { // 在a[0] <= a[1] <= ... <= a[n-1]中搜索x // 找到x时返回其在数组中的位置,否则返回-1 int left = 0; int right = n - 1; int middle; while(left <= right) { middle = (left + right)/2; if (x == a[middle]) return middle; if (x > a[middle]) left = middle + 1; else right = middle - 1; } // 未找到x return -1; } void main() { int value, length, result; int array[6] = {1, 3, 5, 7, 9, 11}; length = sizeof(array)/sizeof(int); printf("please input the object value: \n"); scanf_s("%d", &value); result = binarySearch(array, value, length); printf("%d\n", result); }结果输出:
总结:
每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)。
相关文章推荐
- 算法笔记——【分治法】分治法与二分搜索
- 分治法——二分搜索
- 分治法:二分搜索
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 分治法--二分搜索技术
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 005-二分搜索-分治法-《算法设计技巧与分析》M.H.A学习笔记
- 分治法---二分搜索技术
- 【分治法】分治法与二分搜索,棋盘覆盖问题
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 03算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- LightOJ-1138 Trailing Zeroes (III) (二分搜索)
- leetcode 二分搜索树
- uvalive 3635 - Pie(二分搜索)
- 4 Values whose Sum is 0 --CSU-ACM2017暑假集训2-二分搜索
- CSU-ACM2017暑假集训2-二分搜索 poj-3258- River Hopscotch
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
- 二分搜索(2)
- K Best poj 3111 (01分数规划---二分搜索)
- 一天一道算法题--6.19--二分搜索