【算法•日更•第一期】查找算法:简单实现二分
▎二分 ☞ 『算法思想』 二分也就是 二分查找 ,又叫 折半查找 。这种算法正如其名,每一次都要分一半。废话不多说,直接抛砖引玉: Q:现在来思考一个问题:在一千以内我已经心中想好了一个数(不耍赖),你可以随意询问我一个数,我只会说大了、小了和猜对了,想必你一定玩过,那么请问怎样询问才能使用次数最少? Answer: 其实有常识的人都知道,第一次说500;第二次说(第一次大了)250或(第一次小了)750;第三次125、375、625或875……以此类推。每一次都要砍一半询问,这样无疑不需要每个数都被查找一遍。如果你这样干过,那么可以说你已经会了二分的思想了。可能我没有说清楚,那么就再举个例子吧:(我心里想着666) A:500? B:小了 A:750? B:大了 A:625? B:小了 A:687? B:大了 A:656? B:小了 A:671? B:大了 A:663? B:小了 A:667? B:大了 A:665? B:小了 A:666? B:猜对了 ☞ 『算法复杂度分析』 由于每一次都会分掉一半,因此时间复杂度就是O(log n)。 形象一些说明就是最多查找n以2为底数的 对数 次。 对数 : 在数学中,对数是对求幂的逆运算,正如除法是乘法的倒数,反之亦然。 (copy自百度)比如说n=1024,log 1024= 10 ,因为2 10 =1024。