例子:假設(shè)要在電話簿中找一個(gè)名字以K打頭的人,可以從A開(kāi)始看,直到進(jìn)入以K開(kāi)頭的部分。但我們很可能不這樣做,而是從中間開(kāi)始,因?yàn)槲覀冎酪訩開(kāi)頭的名字在電話簿中間。這是一個(gè)查找的問(wèn)題,在上述情況下,可以使用一種算法來(lái)解決問(wèn)題,這種算法就是二分查找。
概述:二分查找是一種算法,其輸入是一個(gè)有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否則返回null。
示例題目:我隨便想一個(gè)1-100之間的數(shù)字,你猜我想的是哪個(gè)。目標(biāo):是以最少的次數(shù)猜對(duì)這個(gè)數(shù)字,你每次猜,我都會(huì)說(shuō)是小了或者大了或?qū)α?。笨辦法解題:從一開(kāi)始猜,一直往上猜,每次只能排除一個(gè)數(shù)。假如,我想的是99,你需要猜99次。更佳的查找方式:從50開(kāi)始猜,小了,但排除了一半的數(shù)字;接下來(lái),猜75,大了,那余下的一半又排除掉了。你猜測(cè)的是中間的數(shù)字,每次都將余下的數(shù)字排除一半。接下來(lái)你猜63->69->72->73->74不管我心里想的是哪個(gè)數(shù)字,在7次之內(nèi),你都能猜到。總結(jié):對(duì)于包含n個(gè)元素的列表,用二分查找最多要log2n步,而簡(jiǎn)單查找需要n步。對(duì)數(shù):log10 100相當(dāng)于->將多少個(gè)10相乘能得到100,答案很顯然是2,所以log 10 100=2