天天看點

程式員的數學基礎課(三)餘數與疊代法

程式員的數學基礎課(三)餘數與疊代法

問題:什麼是餘數 餘數的作用?

餘數在生活中非常常見,月曆,日期,其中包含一個定理 同餘定理。

同餘定理:餘數總是在一個固定的範圍内,任意兩個整數 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 }