binary search 中止条件 | Lxming's Weblog



binary search 中止条件 | Lxming's Weblog

binary search 中止条件

Binary search问题通常包含三个指针:lower, upper, mid. mid = (lower+upper)/2. 在每个循环调整upper/lower, 例如:

while(lower<=upper) {
mid = (lower+upper)/2;
if condition 1: lower=m+1;
if condition 2: upper = m-1;
}

但这个问题有很多变种,例如查找元素,查找Insert location, 有时候需要做lower=m, upper=m, 在这种情况下,如何保证loop能结束?

我终结了三种情况:
1)lower <= upper, lower=m+1, upper=m-1, 因为每次lower/upper都会改变,所以一定能结束。
2)lower <upper, lower=m+1, upper=m, 会结束循环。
3)lower <upper, m=(lower+upper+1)/2, lower=m, upper=m, 会结束循环。

以下情况不能结束:
4)lower <=upper, lower=m+1, upper=m. 在这种情况下,如果upper==lower, mid也会变成lower,下一步upper还是lower, 所以是dead loop.
5) lower < upper, lower=m, upper=m-1. 在这种情况下,程序可能进入死循环。

一般问题的思考方式是在边界条件下(upper==lower, upper==lower+1), 循环是否能够结束。


Read full article from binary search 中止条件 | Lxming's Weblog


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts