程序员的数学笔记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 中的数据分发、记录的高速查询和定位等。

举个例子,对于一个加密算法,如果我们要加密一组三位数,那我们设定一个这样的加密规则:

  1. 先对每个三位数的个、十和百位数,都加上一个较大的随机数。
  2. 然后将每位上的数字都除以 7,用所得到的余数代替原来的三位数;
  3. 最后将第一位和第三位交换。

这就是一个基本的加密变换过程。

例如对数字 625 加密,根据刚刚的规则,随机数采用 590127,百、十和个位数都分别加上这个随机数,分别得到的是 590133、590129、590132,接着分别除以 7,得到的余数分别是 5,1,4,然后交换得到最终的结果是 415。而如果需要解密,因为加密的人会知道加密规则、随机数和求余所用的除数 7 以及求余操作中的商,就可以解密还原回原来的数字。

更多的采用余数和求余操作的应用例子:

  • 尾号限行
  • 最大公约数、模幂运算(DES、AES、RSA),凯撒密码,孙子定理
  • 进制的转换,应该说十进制转换成其他进制都是循环求余操作

关于余数的一些应用例子,你是否还想到其他的应用呢?

可以留言回复,和我进行交流!


欢迎关注我的微信公众号–机器学习与计算机视觉,或者扫描下方的二维码,大家一起交流,学习和进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4 WPF依赖属性

理解依赖属性 依赖属性支持的特征包括:动画、数据绑定、样式。由WPF元素暴露的属性大部分都是依赖属性。依赖属性和常规属性的使用方法相同。 WPF设计了依赖属性支持其特有的动态特性,并且不干扰其他系统的.net代码。 定义依赖属性 创造一个依赖属性的语…

机器学习入门系列(1)--机器学习概览

本文比较长,八千字,建议收藏起来慢慢看!此外,这其实是合并公众号最开始写的两篇文章,整合在一起了。机器学习入门系列(1)--机器学习概览(上)机器学习入门系列(2)--机器学习概览(下)主要参考《hands-on-ml-with-sklearn…

[bbk5307]第76集 第9章 -数据库性能维护 03

/* Oracle optimizer 执行选择方式原理分析 */ select * from emp where empno7369; oracle在执行查询计划的时候,并不是说要执行一次全表扫描和一次索引扫描之后,来决定到底是走哪一条路?而是通过数据字典里的统计数据信息,来分析判断到底是…

[资源]推荐一些Python书籍和教程,入门和进阶的都有!

前几天后台有读者留言说希望推荐一些入门的书籍,所以这几天都在整理一些我入门时候学习过的书籍教程,或者是口碑还不错的书籍!入门和进阶书籍教程入门和进阶方面的书籍教程,这里推荐两本书和一个教程。1. 廖雪峰老师的 Python 教程…

html 状态栏不显示文字,电脑打字的时候输入法不显示状态栏怎么办?

有时我们在打字的时候,输入法不显示,能打出汉字,但无法选字,这就给输入字体造成了很大的麻烦。怎么解决呢?下面以搜狗输入法为例,描述详细解决过程。解决方法一1、我在某个网页输入字体的时候,没…

系统在iis6上部署

1. 安装Framework 4.0 服务器安装Framework4.0版本。 2. 安装IIS 2.1 安装IIS6.0步骤 1) 在添加或删除程序,单击“添加/删除Windows组件”。 2) 勾选“应用程序服务器”,并单击“详细信息”。 3) 勾选“ASP.NET/IIS/启用网络COM访问/启用网络DTC访问”信…

[Github 项目推荐] 一个更好阅读和查找论文的网站

第 28 篇原创文章机器学习发展到现在,已经积累了非常多的文章,特别是深度学习火起来后,每年新增加的论文非常多,如果需要研究某个领域,不仅需要阅读这个领域经典的论文,也必须时刻关注最新的学术进展&#…

html下拉选择框箭头改为年,CSS自定义select下拉选择框的样式(不用其他标签模拟)...

今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方案就是用其他的元…

【语言处理与Python】10.1自然语言理解\10.2命题逻辑

10.1自然语言理解 查询数据库 如果有人提出一个问题: Which country is Athens in? 得到的回答应该是: Greece. 这个数据可以通过数据库语言得到答案: SELECT Country FROM city_table WHERE City athens 这里有一个文法,可以把句…

程序员的数学笔记3--迭代法

第三节课程,介绍的是迭代法。 前两节笔记的文章: 程序员的数学笔记1–进制转换程序员的数学笔记2–余数 03 迭代法 什么是迭代法 迭代法,简单来说,其实就是不断地用旧的变量值,递推计算新的变量值。 这里采用一个…

html网页响应时间调试,HTML5 使用performance.now衡量Webworker的响应时间

JavaScript语言:JaveScriptBabelCoffeeScript确定var worker, start, end,send document.querySelector(.send),receive document.querySelector(.receive > span),bar document.querySelector(.bar > span);var sendMessage function() {start performa…

机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义、优缺点、机器学习任务的划分等等。 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后会结合《…

在Web服务器磁盘上缓存数据和HTML页面

有时候,有“许多”数据要在内存中缓存。“许多”是相对而言的,它取决于能消耗多少内存、缓存项目的数量以及取回数据的频度。任何情况下,如果需要在内存中缓存大量的数据,请考虑以text或者XML文件格式在Web服务器硬盘上做缓存。当…

html5 支持音频格式,html5中audio支持音频格式

HTML5 Audio标签能够支持wav, mp3, ogg, acc, webm等格式,但有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持。不是所有的浏览器都支持MP3 OGG之类的,每个浏览器因为版权的问题支持的格式都是不一样的。浏览器和音频兼容性浏览…