日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员的数学笔记2--余数

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员的数学笔记2--余数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一節程序員的數學筆記1–進制轉換是介紹了進制,特別是十進制和二進制之間的轉換,移位操作和邏輯操作。

今天介紹的是余數,看完本節筆記,你會發現生活中有很多東西都有余數的影子。


余數

余數的特性

整數是沒有邊界的,它可能是正無窮,也可能是負無窮。

**但余數卻總是在一個固定的范圍內。**假如除數是 m,那么余數的范圍就是 0~(m-1)。

生活中,余數可以用來算星期,web 編程中可以用于分頁。

同余定理

兩個整數 a 和 b,如果它們除以正整數 m 得到的余數相等,我們就可以說 a 和 b 對于模 m 同余。

同余定理可以用來做分類,或者說是均分操作。因為可以將對同個正整數 m 相除得到的余數相等的分在同一個類中。

哈希函數

每個編程語言都有對應的哈希函數,哈希有時候也被翻譯為散列,**它是指將任意長度的輸入,通過哈希算法壓縮為某一固定長度的輸出。**這其實就是一個求余的過程。

例如,假設對于 100 萬條數據記錄,要做到高速存取,最理想情況是開辟一個連續的空間存放這些數據,減少尋址的時間,但很多時候條件并不允許。這個時候我們可以考察一下,系統是否可以提供若干個較小的連續空間,每個空間可以存放一定數量的記錄。比如找到100個較小的連續空間,每個空間可以容納 1 萬條數據連續存放。那么我們可以采用余數和同余定理來設計一個散列函數,并實現哈希表的結構。

這個函數可以如下所示:

f(x) = x mod size

x表示等待被轉換的數值,size表示有限存儲空間的數量,mod表示取余操作。通過余數,你就能將任何數值,轉換為有限范圍內的一個數值,然后據這個新的數值,來確定將數據存放在何處。

而在我們這個例子中,size=100,那么對于記錄標號分別是 1 和 101 的兩條數據,根據上述公式進行取余操作,得到的余數都是 1,那么它們就會分到同一個存儲的空間中。

這種的做法好處不僅是設定一個存放分類的規則,而且取余操作簡單快速,不會增加尋址時間。

更進一步,如果想增加數據散列的隨機程度,可以加入一個較大的隨機數 MAX,如下所示:

f(x) = (x + MAX) mod size

比如對標號為 1 的記錄,隨機數是590199,那么計算結果是得到余數為 0,而標號為 101,隨機數變成 627901,對應余數是 2。這樣在新的計算公式下,這兩個記錄就分配到不同的存儲空間了。

這種做法更適合需要將數據重新洗牌的應用場景,比如加密算法、MapReduce 中的數據分發、記錄的高速查詢和定位等。

舉個例子,對于一個加密算法,如果我們要加密一組三位數,那我們設定一個這樣的加密規則:

  • 先對每個三位數的個、十和百位數,都加上一個較大的隨機數。
  • 然后將每位上的數字都除以 7,用所得到的余數代替原來的三位數;
  • 最后將第一位和第三位交換。
  • 這就是一個基本的加密變換過程。

    例如對數字 625 加密,根據剛剛的規則,隨機數采用 590127,百、十和個位數都分別加上這個隨機數,分別得到的是 590133、590129、590132,接著分別除以 7,得到的余數分別是 5,1,4,然后交換得到最終的結果是 415。而如果需要解密,因為加密的人會知道加密規則、隨機數和求余所用的除數 7 以及求余操作中的商,就可以解密還原回原來的數字。

    更多的采用余數和求余操作的應用例子:

    • 尾號限行
    • 最大公約數、模冪運算(DES、AES、RSA),凱撒密碼,孫子定理
    • 進制的轉換,應該說十進制轉換成其他進制都是循環求余操作

    關于余數的一些應用例子,你是否還想到其他的應用呢?

    可以留言回復,和我進行交流!


    歡迎關注我的微信公眾號–機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!

    總結

    以上是生活随笔為你收集整理的程序员的数学笔记2--余数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。