摘要:在排好序的單詞列表中查找某個單詞優(yōu)化和的初始化,從開始,這樣避免只有時的優(yōu)化減少了內(nèi)存溢出的風(fēng)險優(yōu)化循環(huán)時,。
直觀定義
迭代法(Iterative Method),簡單來說,其實就是不斷地用舊的變量值,遞推計算新的變量值。循環(huán)。
具體應(yīng)用
求數(shù)值的精確/近似解
二分法(Bisection method)
牛頓迭代法(Newton’s method)
在一定范圍內(nèi)查找目標(biāo)值
二分查找
機(jī)器學(xué)習(xí)中的迭代算法
K-均值算法(K-means clustering)
PageRank 的馬爾科夫鏈(Markov chain)
梯度下降法(Gradient descent)
應(yīng)用詳解求方程的精確/近似解
二分法
#"""計算某個給定正整數(shù) n(n>1)的平方根,如果不使用編程語言""" # delta_threshold:允許的誤差的閾值 # max_try:最大嘗試次數(shù) def get_squre_root(n,delta_threshold=0.000000000000001,max_try=1000): if n <= 1: return -1 min = 1.0 n = float(n) max = n mid = (max+min)/2.0 print(mid) for i in range(max_try): _n = mid * mid delta = _n-n if delta == 0: print("精確值") return mid abs_delta = abs(delta) if abs_delta <= delta_threshold: print("近似值") return mid else: if delta>0: max = mid else: min = mid mid = (max+min)/2.0 print(mid) return min get_squre_root(16)
牛頓迭代法
之后補充
查找匹配記錄
快速查找記錄,除了用字典,還可以用著名的 二分查找法(前提是有序)。這也是迭代逼近的典型案例。
二分查找,第一版
#在排好序的單詞列表中查找某個單詞 #@ param words_list,target_word #@ return bool def search(words_list,target_word): if not words_list: return False min = 1 max = len(words_list) while True: mid = (max + min)/2 mid_word = words_list[mid] if target_word == mid_word: print(mid) return True elif target_word > mid_word: min = mid else: max = mid if max <= min: return False return False # words_list = ["i","love","my","wife","than","myself"s","body","."] words_list = ["e"] words_list = sorted(words_list) print(words_list) print(search(words_list,"i"))
二分查找,改完bug后,第二版
#在排好序的單詞列表中查找某個單詞 #@ param words_list,target_word #@ return bool # 優(yōu)化1: min和max的初始化,從0開始,這樣避免只有l(wèi)en(list)=1時的bug # 優(yōu)化2: mid = min + (max - min)/2 ,減少了內(nèi)存溢出的風(fēng)險 def search(words_list,target_word): if not words_list: return False min = 0 max = len(words_list) - 1 while True: mid = min + (max - min)/2 mid_word = words_list[mid] if target_word == mid_word: print(mid) return True elif target_word > mid_word: min = mid else: max = mid if max <= min: return False return False words_list = ["i","love","my","wife","than","myself"s","body","."] # words_list = ["e"] words_list = sorted(words_list) print(words_list) print(search(words_list,"i"))
二分查找,再改bug后,第三版(應(yīng)該沒bug了吧。。)
#在排好序的單詞列表中查找某個單詞 #@ param words_list,target_word #@ return bool # 優(yōu)化1: min和max的初始化,從0開始,這樣避免只有l(wèi)en(list)=1時的bug # 優(yōu)化2: mid = min + (max - min)/2 ,減少了內(nèi)存溢出的風(fēng)險 # 優(yōu)化3: 循環(huán)時,min = mid + 1。和max = mid - 1。減少重復(fù)檢查邊界 # 優(yōu)化4: 跳出循環(huán)的條件改為max < min,避免最后一步出現(xiàn)max=min=target的潛在bug def search(words_list,target_word): if not words_list: return False min = 0 max = len(words_list) - 1 while True: mid = min + (max - min)/2 mid_word = words_list[mid] if target_word == mid_word: print(mid) return True elif target_word > mid_word: min = mid + 1 else: max = mid - 1 if max < min: print(max) return False return False words_list = ["i","love","my","wife","than","myself"s","body","."] # words_list = ["e"] words_list = sorted(words_list) print(words_list) print(search(words_list,"i"))思考
迭代法的特點是“分而治之”,不斷重復(fù)一個相似的行為,一步步地縮小目標(biāo)范圍。計算機(jī)很適合處理這種重復(fù)的工作,而人類并不擅長,所以有時候不敏感。在編程的時候,可以特意留意這一差異。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43940.html
摘要:在這里我分享下我個人入門機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對大家能有所幫助。相關(guān)學(xué)習(xí)鏈接,,入門后的體驗在入門了機(jī)器學(xué)習(xí)之后,在實際工作中,絕大多數(shù)的情況下你并不需要去創(chuàng)造一個新的算法。 機(jī)器學(xué)習(xí)在很多眼里就是香餑餑,因為機(jī)器學(xué)習(xí)相關(guān)的崗位在當(dāng)前市場待遇不錯,但同時機(jī)器學(xué)習(xí)在很多人面前又是一座大山,因為發(fā)現(xiàn)它太難學(xué)了。在這里我分享下我個人入門機(jī)器學(xué)習(xí)的經(jīng)歷,希望能對大家能有所幫助。 PS:這篇文章...
閱讀 2089·2021-09-07 10:14
閱讀 1507·2019-08-30 15:53
閱讀 2292·2019-08-30 12:43
閱讀 2892·2019-08-29 16:37
閱讀 776·2019-08-26 13:29
閱讀 2030·2019-08-26 13:28
閱讀 463·2019-08-23 18:33
閱讀 3561·2019-08-23 16:09