除法與GCD演算法的相關分析
學習演算法三個要素:
1、驗證演算法的正確性
2、分析演算法的效率
3、如何提高演算法的效率
以下是兩個算除法的“玩具”演算法,請驗證其正確性,分析它們的效率並進行對比,並思考是否可以進一步提高除法的效率。最後這個問題不容易。
def QuoRem(a, b):
q, r = 0, 0
while(a >= b):
a, q = a - b, q + 1
r = a
return q, r
def BinaryQuoRem(a, b):
if(a == 0):
return 0, 0
q, r = BinaryQuoRem(a // 2, b)
q, r = 2 * q, 2 * r
if(a & 1): #if a is an odd number
r = r + 1
if(r >= b):
r, q = r - b, q + 1
return q, r
GCD 與Binary GCD的對比
為什麼需要Binary GCD?
為什麼看上去Binary GCD更高效?
但是,Binary GCD真的更高效嗎?為什麼是,為什麼不是?
請分析下面這兩個演算法,並回答以上問題。
# Function to implement Euclidean Algorithm
def gcd(a, b):
while(b):
a, b = b, a % b
return a
# Function to implement Stein's Algorithm
def binary_gcd( a, b) :
# GCD(0, b) == b; GCD(a, 0) == a,
# GCD(0, 0) == 0
if (a == 0) :
return b
if (b == 0) :
return a
# Finding K, where K is the greatest
# power of 2 that divides both a and b.
k = 0
while(((a | b) & 1) == 0) :
a = a >> 1
b = b >> 1
k = k + 1
# Dividing a by 2 until a becomes odd
while ((a & 1) == 0) :
a = a >> 1
# From here on, 'a' is always odd.
while(b != 0) :
# If b is even, remove all factor of
# 2 in b
while ((b & 1) == 0) :
b = b >> 1
# Now a and b are both odd. Swap if
# necessary so a <= b, then set
# b = b - a (which is even).
if (a > b) :
# Swap u and v.
a, b = b, a
b = (b - a)
# restore common factors of 2
return (a << k)
總結
演算法分析實在是太難了!
參考文獻
1、對Binary GCD的分析
2、Recursive Binary GCD
3、快速乘法及其應用
2018.0518
相關文章
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 【演算法分析與設計】輾轉相除法演算法
- ios-UI高階 GCD的相關設定iOSUIGC
- _11_GCD相關-掛起/恢復GC
- Lca相關演算法演算法
- Excel做分析-相關性分析Excel
- gcd與exgcdGC
- 陪玩原始碼,與時間、日期相關的程式碼分析原始碼
- 與browser相關的程式碼
- 與 RMAN 相關的檔案
- GCD原始碼原理分析GC原始碼
- matlab相關性分析Matlab
- Linux 檔案系統與日誌分析的相關知識Linux
- Java String的相關性質分析Java
- 轉錄組GO富集與微生物相關性分析Go
- 雙指標相關演算法指標演算法
- 資料分析相關軟體
- 量化相關性分析應用
- ListView回收機制相關分析View
- 利益相關者分析(轉載)
- 最近學習了限流相關的演算法演算法
- JVM相關 - StackOverflowError 與 OutOfMemoryErrorJVMError
- 加密型別以及相關演算法加密型別演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- HTTP與快取相關的頭部HTTP快取
- Spring中與Bean相關的介面SpringBean
- 一些與iphone相關的尺寸iPhone
- buffer cache與相關的latch等待事件事件
- iOS--GCD的API的理解與使用iOSGCAPI
- python 計算矩陣的相關演算法Python矩陣演算法
- Android原始碼分析相關工具Android原始碼
- 應用層相關協議分析協議
- Mssql和Mysql的相關安全性分析(轉)MySql
- 5G與WiFi6相愛相殺的關係WiFi
- 關於GCD多工處理GC
- SAP MM 採購訂單與相關合同的價格差異問題分析
- java 相關技術與框架Java框架
- CAP 與 Raft 相關知識Raft