演算法學習 二分法

2021-10-05 23:33:28 字數 1024 閱讀 3502

二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法,前提是資料結構必須先排好序,可以在資料規模的對數時間複雜度內完成查詢。但是,二分查詢要求線性表具有有隨機訪問的特點(例如陣列),也要求線性表能夠根據中間元素的特點推測它兩側元素的性質,以達到縮減問題規模的效果。

舉個簡單的例子:

陣列[1,5,2,4,9,6,7,4,3],現在需要找出其中的最大值。

利用二分法,可以將陣列進行拆分,將元素組拆分為兩個陣列,分別求出其最大值進行比較,當然過程也可以通過不斷迭代。

那麼下面我們來看一下具體的應用(本題來自力扣):

實現 pow(x, n) ,即計算 x 的 n 次冪函式。

示例 1:

輸入: 2.00000, 10

輸出: 1024.00000

示例 2:

輸入: 2.10000, 3

輸出: 9.26100

示例 3:

輸入: 2.00000, -2

輸出: 0.25000

解釋: 2-2 = 1/22 = 1/4 = 0.25

通過自己的演算法實現pow(x,n),當然不是直接呼叫函式來實現~

我們可以看到,看到本題肯定會產生許許多多的解題思路,本文主要談一下如何利用二分查詢來進行計算。

如:x的10次方可以寫作x的平方的5次方,經過不斷迭代,可以寫成x的10次方的1次方

def mypow(self, x: float, n: int) -> float:

if n < 0 : return self.mypow(1 / x, -n)

if n == 0: return 1

if n % 2 == 0:

# 直接減半

return self.mypow(x*x, n//2)

else:

return x * self.mypow(x*x, n//2)

以上**,就是通過二分法進行高效率迭代計算。

**一下,如有漏洞還請指教~

演算法學習 二分法查詢

二分法查詢是常用的查詢方法。二分法的演算法複雜度為 二分法查詢的思路是 1 輸入乙個排序好的序列 2 輸入乙個需要查詢的元素 3 求出序列的中間位置數 4 判斷查詢元素的與中間數的大小 5 縮小查詢範圍,可進行迭代或者迴圈。c語言 include 遞迴演算法 int recurbinary int ...

演算法學習 二分法拓展

例1 如何計算2 sqrt 2 的近似值?對 f x x2 f x x f x x 2來說,在x 1,2 x in 1,2 x 1,2 的範圍內,f x f x f x 是隨著x xx 的增大而增大的,這就給二分法創造了條件,由於 2 sqrt 2 是無理數,因此只能獲得它的近似值,這裡不妨以精度到...

二分法 演算法

查詢演算法中的 二分法 是這樣定義的 給定n個從小到大排好序的整數序列list,以及某待查詢整數x,我們的目標是找到x在list中的下標。即若有list i x,則返回i 否則返回 1表示沒有找到。二分法是先找到序列的中點list m 與x進行比較,若相等則返回中點下標 否則,若list m x,則...