
二分法
文章平均质量分 72
binling
这个作者很懒,什么都没留下…
展开
-
代数思维训练之一:二分查找
代数思维要点identify变量确定变量之间的关系状态如何转移,驱动变量(自变量),因变量循环不变式有界,收敛二分问题输入是一个区间和一个值,要收敛到区间一个具体位置1 标准二分变量:区间[l, r], 查找值x。衍生变量mid循环不变式:如果有解,必在[l, r]中状态转移:进行状态转移的条件:[l,r]不为空: l <= r驱动变量: x, A[mid]规则:x和A[mid]比较大小收敛:[l, r]每次都变小int search(vector<in原创 2021-10-19 10:50:21 · 140 阅读 · 0 评论 -
倍增搜索
二分搜索适合既有下界也有上界,对于只知道一边的界情况,可以用倍增搜索法int search(vector A, int x) { for (int i = 0; A[i] <= x;) { if (A[i] == x) return i; if (i + 1 == A.size() || A[i + 1] > x) return -1;原创 2015-06-29 12:49:14 · 640 阅读 · 0 评论 -
lower_bound, upper_bound的写法——两种收敛逼近
一种写法是保证解在区间内,while条件是l 还有一种写法是解肯能被排除在区间外,两侧都不包含mid:l = mid + 1, r = mid - 1,while条件是 l r 解是l, 如果解在左侧,最后一次判断之后 l > r, 解是r。靠垫是最后区间溢出后的位置,所以while 条件必须是 l原创 2015-07-06 20:53:19 · 889 阅读 · 0 评论 -
二分(二分答案、二分搜索)与单调性
经典二分搜索是二分空间范围。二分答案又叫二分猜值,是二分解的值空间。其实可以统一,普通的二分搜索也是二分答案值域——下标空间,也是猜值。二分必须满足单调性,最直观的,二分搜索只能在有序数组上进行。单调性体现在,下标和元素值时单调的,也就是 if (j > i) 有 A[j] > A[i]一般二分答案解决的问题是最优解问题,单调性体现在:如果x 是可行解,则所有y原创 2015-08-04 23:46:19 · 2126 阅读 · 0 评论 -
非排序数组的二分法(找peak)
基于这样一个性质:若一个区间两头原创 2014-10-16 16:30:38 · 675 阅读 · 0 评论 -
lower_bound二分的三种写法
给定一个排序数组和一个数target,找出target在数组中第一次出现的位置,如不存在返回-1写法一:int binarySearch(vector &array, int target) { int l = 0, r = array.size() - 1; while (l <= r) { int mid = l原创 2015-01-03 20:41:16 · 2698 阅读 · 0 评论 -
quick select 问题
思路一1)partition,轴为i,i是相对于传进来的数组的2) 如果 i == k - 1, A[i]就是所求;如果i > k - 1, 说明第k在前半部分,并且仍然是前半部分的第k;如果 i int findK(int A[], int n, int k) { if (!A || n n) throw invalid_argument("invalid argume原创 2015-01-04 16:44:22 · 794 阅读 · 0 评论 -
Find Minimum in Rotated Sorted Array II
算法正确性证明的三要素1)invariant property 是什么,每步循环保证了invariant property2)证明循环可以退出:(比如,在循环体的每个分支,循环的界都是在收敛)3)根据循环退出的condition和 invariant property 得出answer/* invariant property: the min is within原创 2014-12-30 12:36:43 · 466 阅读 · 0 评论 -
二分查找题目汇总
1)Search In Rotated Array2) Search In Rotated Array ||3)原创 2014-08-28 12:25:49 · 1168 阅读 · 0 评论 -
二分搜索
二分sou'suo除了经典的原创 2014-09-26 01:24:49 · 544 阅读 · 0 评论