問題:什麼是餘數 餘數的作用?
餘數在生活中非常常見,月曆,日期,其中包含一個定理 同餘定理。
同餘定理:餘數總是在一個固定的範圍内,任意兩個整數 a 和 b,如果它們除以正整數 m 得到的餘數相等,我們就稱 a 和 b 對于模 m 同餘。
同餘定理主要運用于:資料的均分。
模運算最大的特點就是不可逆,https就是利用這個原理通過非對稱加密協商出對稱密鑰的。
在寫代碼過程中會用到的同餘定理。負載均衡算法,分庫分表,消息隊列順序消息,一緻性hash,資料分頁等等
餘數在加密算法,随機存儲等領域中有廣泛應用
疊代法:
疊代法,簡單來說,其實就是不斷地用舊的變量值,遞推計算新的變量值。
下面這張圖即表示疊代法的數學函數。
代碼執行個體如下
// 疊代器模式
// 兔子數列
function fib(month) {
if (month ==1 || month === 2) {
return 1
} else {
return fib(month -1) + fib(month - 2)
}
}
// 棋盤的複利 等比數列
function iterater(num) {
let resNum = 0
let count = 1
for (let index = 0; index < num; index++) {
count*= 2
resNum += count
}
return resNum
}
複制
以上這兩段代碼使用疊代法實作了兔子數列 與棋盤問題的解決。
疊代法具體的應用
- 求數值的精确或者近似解。典型的方法包括二分法(Bisection method)和牛頓疊代法(Newton’s method)。
- 在一定範圍内查找目标值。典型的方法包括二分查找。
- 機器學習算法中的疊代。相關的算法或者模型有很多,比如 K- 均值算法(K-means clustering)、PageRank 的馬爾科夫鍊(Markov chain)、梯度下降法(Gradient descent)等等。疊代法之是以在機器學習中有廣泛的應用,是因為很多時候機器學習的過程,就是根據已知的資料和一定的假設,求一個局部最優解。而疊代法可以幫助學習算法逐漸搜尋,直至發現這種解。
以下以一個面試題為例,
題目:使用疊代法求一個數的算數平方根,給定固定的精度?
以下是解題思路的圖解
在數學中存在二分法進行不同逼近的操作,不停的逼近得數的操作。
以下為代碼解題 方法
/** * * @param {*} num 需要計算的資料 * @param {*} deltaThreshold 誤差精度 * @param {*} maxCount 計算 */ function getSqureRoot(num,deltaThreshold) { if (num<=1) { return 1 } // 設定最大值 var max = num; // 設定最小值 var min = 1; // 設定中間變量 var mid = 0; // 無限循環 for (; ;) { // 二分法求中間值 mid = (max +min) /2; // 得到平方值 var squre = mid* mid; // 計算精度 detalt = Math.abs((squre/num) -1); if (detalt<= deltaThreshold) { break } else { if (squre > num) { max = mid } else { min = mid } } } return mid }