Python語言由于其簡潔明了和強(qiáng)大的庫支持,如今已經(jīng)成為了當(dāng)下最流行的編程語言之一。本文將介紹Python中的一些典型算法例子,以便讀者更好地理解Python的算法應(yīng)用。
# 1. 二分查找算法 def binary_search(arr, l, r, x): if r >= l: mid = l + (r - l) // 2 if arr[mid] == x: return mid elif arr[mid] >x: return binary_search(arr, l, mid-1, x) else: return binary_search(arr, mid + 1, r, x) else: return -1 # 測試數(shù)據(jù) arr = [ 2, 3, 4, 10, 40 ] x = 10 result = binary_search(arr, 0, len(arr)-1, x) if result != -1: print ("元素在數(shù)組中的索引為 % d" % result) else: print ("元素不在數(shù)組中")
以上代碼為二分查找算法的Python實(shí)現(xiàn),通過遞歸方式將數(shù)組一分為二,然后在對比中位數(shù)和目標(biāo)值,從而不斷縮小查找范圍。這種算法的時(shí)間復(fù)雜度是log(N)。
# 2. 快速排序算法 def quick_sort(arr): if len(arr)<= 1: return arr else: pivot = arr[0] less = [i for i in arr[1:] if i<= pivot] greater = [i for i in arr[1:] if i >pivot] return quick_sort(less) + [pivot] + quick_sort(greater) # 測試數(shù)據(jù) arr = [10, 2, 9, 4, 3, 6] print("原始數(shù)據(jù):", arr) result = quick_sort(arr) print("排序結(jié)果:", result)
利用遞歸思想,快速排序借助一個(gè)基準(zhǔn)值將數(shù)組分成兩部分,分別對兩個(gè)部分進(jìn)行遞歸排序,再合并即可得到有序數(shù)組。由于快速排序是不穩(wěn)定的排序算法,其時(shí)間復(fù)雜度為O(NlogN)。
# 3. 動(dòng)態(tài)規(guī)劃算法 def dynamic_programming(target, nums): dp = [0] * (target + 1) dp[0] = 1 for num in nums: for i in range(num, target + 1): dp[i] += dp[i - num] return dp[target] # 測試數(shù)據(jù) target = 5 nums = [1,2,5] result = dynamic_programming(target, nums) print("結(jié)果:", result)
動(dòng)態(tài)規(guī)劃算法是一種優(yōu)化遞歸算法的思想,通過表格記錄以往計(jì)算結(jié)果,將遞歸轉(zhuǎn)化為迭代,從而大大提高了算法的效率。以上為動(dòng)態(tài)規(guī)劃算法的一個(gè)例子,在背包問題中,動(dòng)態(tài)規(guī)劃算法用于求出能夠湊出目標(biāo)數(shù)的方案數(shù),其時(shí)間復(fù)雜度為O(N * target)。
上一篇php mechat
下一篇css圖片可以縮放嗎