抽屉原理

“抽屉原理”最先是由19世纪的德国数学家迪里赫莱(Dirichlet)运用于解决数学问题的,所以又称“迪里赫莱原理”,也有称“鸽巢原理”的。这个原理可以简单地叙述为“把10个苹果,任意分放在9个抽屉里,则至少有一个抽屉里含有两个或两个以上的苹果”。这个道理是非常明显的,但应用它却可以解决许多有趣的问题,并且常常得到一些令人惊异的结果。抽屉原理是国际国内各级各类信息学竞赛中的重要内容,本讲就来学习它的有关知识及其应用。

一、知识点:

定理1、如果把n+1个元素分成n个集合,那么不管怎么分,都存在一个集合,其中至少有两个元素。

证明:(用反证法)若不存在至少有两个元素的集合,则每个集合至多1个元素,从而n个集合至多有n个元素,此与共有n+1个元素矛盾,故命题成立。

在定理1的叙述中,可以把“元素”改为“物件”,把“集合”改成“抽屉”,抽屉原理正是由此得名。

同样,可以把“元素”改成“鸽子”,把“分成n个集合”改成“飞进n个鸽笼中”。“鸽笼原理”由此得名。

 

二、讲解范例:

【例1】一个小组共有13名同学,其中至少有2名同学同一个月过生日。为什么?

【分析】每年里共有12个月,任何一个人的生日,一定在其中的某一个月。如果把这12个月看成12个“抽屉”,把13名同学的生日看成13只“苹果”,把13只苹果放进12个抽屉里,一定有一个抽屉里至少放2个苹果,也就是说,至少有2名同学在同一个月过生日。

【例 2】任意4个自然数,其中至少有两个数的差是3的倍数。这是为什么?

分析与解】首先我们要弄清这样一条规律:如果两个自然数除以3的余数相同,那么这两个自然数的差是3的倍数。而任何一个自然数被3除的余数,或者是0,或者是1,或者是2,根据这三种情况,可以把自然数分成3类,这3种类型就是我们要制造的3个“抽屉”。我们把4个数看作“苹果”,根据抽屉原理,必定有一个抽屉里至少有2个数。换句话说,4个自然数分成3类,至少有两个是同一类。既然是同一类,那么这两个数被3除的余数就一定相同。所以,任意4个自然数,至少有2个自然数的差是3的倍数。

【例3】有规格尺寸相同的5种颜色的袜子各15只混装在箱内,试问不论如何取,从箱中至少取出多少只就能保证有3双袜子(袜子无左、右之分)?

【分析与解】试想一下,从箱中取出6只、9只袜子,能配成3双袜子吗?回答是否定的。按5种颜色制作5个抽屉,根据抽屉原理1,只要取出6只袜子就总有一只抽屉里装2只,这2只就可配成一双。拿走这一双,尚剩4只,如果再补进2只又成6只,再根据抽屉原理1,又可配成一双拿走。如果再补进2只,又可取得第3双。所以,至少要取6+2+2=10只袜子,就一定会配成3双。

【例4】一个布袋中有35个同样大小的木球,其中白、黄、红三种颜色球各有10个,另外还有3个蓝色球、2个绿色球,试问一次至少取出多少个球,才能保证取出的球中至少有4个是同一颜色的球?

【分析与解】从最“不利”的取出情况入手。

最不利的情况是首先取出的5个球中,有3个是蓝色球、2个绿色球。

接下来,把白、黄、红三色看作三个抽屉,由于这三种颜色球相等均超过4个,所以,根据抽屉原理2,只要取出的球数多于(4-1)×3=9个,即至少应取出10个球,就可以保证取出的球至少有4个是同一抽屉(同一颜色)里的球。

故总共至少应取出10+5=15个球,才能符合要求。

思考:把题中要求改为4个不同色,或者是两两同色,情形又如何?

当我们遇到“判别具有某种事物的性质有没有,至少有几个”这样的问题时,想到它——抽屉原理,这是你的一条“决胜”之路。

【例5】.现有64只乒乓球,18个乒乓球盒,每个盒子里最多可以放6只乒乓球,至少有          个乒乓球盒子里的乒乓球数目相同?

【分析与解】:18个乒乓球盒,每个盒子里至多可以放6只乒乓球。为使相同乒乓球个数的盒子尽可能少,可以这样放:先把盒子分成6份,每份有18÷6=3(只),分别在每一份的3个盒子中放入1只、2只、3只、4只、5只、6只乒乓球,即3个盒子中放了1只乒乓球,3个盒中放了2只乒乓球……3个盒子中放了6只乒乓球。这样,18个盒子中共放了乒乓球

(1+2+3+4+5+6)×3=63(只)。

把以上6种不同的放法当做抽屉,这样剩下64-63=1(只)乒乓球不管放入哪一个抽屉里的任何一个盒子里(除已放满6只乒乓球的抽屉外),都将使该盒子中的乒乓球数增加1只,这时与比该抽屉每盒乒乓数多1的抽屉中的3个盒子里的乒乓球数相等。例如剩下的1只乒乓球放进原来有2只乒乓球的一个盒子里,该盒乒乓球就成了3只,再加上原来装有3只乒乓球的3个盒子,这样就有4个盒子里装有3个乒乓球。所以至少有4个乒乓球盒里的乒乓球数目相同。

提示语

 抽屉原理还可以反过来理解:假如把n+1个苹果放到n个抽屉里,放2个或2个以上苹果的抽屉一个也没有(与“必有一个抽屉放2个或2个以上的苹果”相反),那么,每个抽屉最多只放1个苹果,n个抽屉最多有n个苹果,与“n+1个苹果”的条件矛盾。

 运用抽屉原理的关键是“制造抽屉”。通常,可采用把n个“苹果”进行合理分类的方法来制造抽屉。比如,若干个同学可按出生的月份不同分为12类,自然数可按被3除所得余数分为3类等等。

 

转载于:https://www.cnblogs.com/rmy020718/p/9443279.html

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

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

相关文章

jdbc之连接Oracle的基本步骤

1 // 1.加载驱动程序2 Class.forName("oracle.jdbc.driver.OracleDriver");3 // 2.获取数据库连接4 Connection conn DriverManager.getConnection("jdbc:oracle:thin:localhost:1521:orcl", "j0408", "1");5 // 3.构建SQL语句6 Stri…

[jzoj 5775]【NOIP2008模拟】农夫约的假期 (前缀和+递推)

传送门 Description 在某国有一个叫农夫约的人,他养了很多羊,其中有两头名叫mm和hh,他们的歌声十分好听,被当地人称为“魔音” 农夫约也有自己的假期呀!他要去海边度假,然而mm和hh不能离开他。没办法&#…

mac启动mysql,apache,php

在用php编写网站之前,先要启动之前搭建好的环境。 1.启动mysql (1)在system preference的最底部有mysql控制图标: (2)点击mysql图标,启动mysql: 2.启动apache: 在term…

如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)...

0x01 问题提出 还记得上篇文章记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门),我们讲到了一些PHP的一些如何巧妙地绕过数字和字母受限的技巧,今天我要给大家分享的是如何在命令长度受限的情况下成功get到webshell,以及关…

iOS开发造轮子 | 通用占位图

https://www.jianshu.com/p/beca3ac24031 实际运用场景: 没网时的提示view,tableView或collectionView没内容时的展示view,以及其它特殊情况时展示的特定view。如: 常见的几种情况我的目标: 对以上几种情况的展示view做…

java 计算26个字母在一段文本中出现的频率(保留小数点后4位)

public class FrequencyCalculator {public static void main(String[] args){//定义需要计算字母出现频率的文本String text"some off#acebooksea3rl255 yinvestorssoldofftheirstockatthefirs" "tchancetheygotbutceomarkzuckerbergishangingontohissharesfor…

Maven_生产环境下开发对Maven的需求

目前技术开发时存在的问题: 一个项目就是一个工程 如果一个项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个工程,利于分工协作。 借助Maven就可以将一个项目拆分多个工程。 项目中需要的jar包必须手动复制粘贴到W…

string赋值-单引号和双引号的区别(php)

在赋予一个string值的时候,可以用单引号或者双引号。 1.单引号和双引号的区别: 单引号:不会翻译变量。 双引号:会翻译变量,会将变量替换为之前赋予变量的值。 例子: (1)单引号&a…

Web项目开发流程 PC端

Web项目开发流程 PC端 转自 https://www.cnblogs.com/mdengcc/p/6475733.html一直再做前端,突然想到如果有一天领导让自己独立承担一个web 项目的话是否有足够的能力去接这个任务,要学会自己去搭建一些基础的工具信息。所有的这一切在心里都要有个大致的…

Hibernate常用的Java数据类型映射到mysql和Oracle

研究了常用的Java基本数据类型在mysql和oracle数据库的映射类型。这里使用的是包装类型做研究,一般在hibernate声明的时候最好不要用基本类型,因为数据库中的null空数据有可能映射为基本类型的时候会报错,但是映射到包装类型的时候值为null&a…

Spring Cloud 之 Feign 使用HTTP请求远程服务

Feign是从Netflix中分离出来的轻量级项目,能够在类接口上添加注释,成为一个REST API 客户端,Feign默认集成了Ribbon。 Feign中对 Hystrix 有依赖关系。Feign只是一个便利的rest框架,简化调用,最后还是通过ribbon在注册…

UI控件之UISlider

一、创建 UISlider *slider [[UISlider alloc] initWithFrame:CGRectMake(0, 200, self.view.frame.size.width-100, 50)]; 二、设置最大最小值 slider.minimumValue 0; slider.maximumValue 1; 三、改变圆形前面和后面的颜色 slider.minimumTrackTintColor [UIColor orang…

Front End Accessibility Development Guide

Header Carefully write heading(h1,h2,h3) for screen reader. Alternative Image Provide alt text for both essential and functional images. Provide empty alt text (alt””) for decorative images. Don’t repeat the alt text of an image in the adjacent text. De…

详细的Windows下安装 binwalk

1. https://github.com/ReFirmLabs/binwalk到这里下载binwalk,下载后解压。 2. 找到下载后的文件夹, 在这里要进行安装步骤,一边按着shift,一边按着鼠标右键,点击在此处打开命令窗口。 输入python setup.py install 安…

各大浏览器清除缓存(cache)详细步骤

1. Firefox 1.1 选择“Options”: 1.2 选择“Advanced”->“Network”->“Cached Web Content”,点击“Clear Now”: 2. Chrome 2.1 选择“Settings”: 2.2 点击页面底部“Show advanced settings”: 2.3 选择…

python部分 + 数据库 + 网络编程

PS:附上我的博客地址,答案中略的部分我的博客都有,直接原标题搜索即可。https://www.cnblogs.com/Roc-Atlantis/第一部分 Python基础篇(80题)为什么学习Python?Omit通过什么途径学习的Python?OmitPython和J…

使用 angular directive 和 json 数据的 D3 带标签 donut chart示例

利用angular resource加载priorityData.json中的json数据,结合D3画出甜甜圈图。运行index.html结果如图所示: priorityData.json中json数据如下: { "priority":{ "Blocker":12,"Critical":18,"Major&qu…

第一个express app 详细步骤

1. 全局安装node.js(请参考网上教程)。 如何判断是否全局安装成功?打开命令行终端,进入任意文件夹,输入node,不报错。 2. 安装express 2.1 创建app文件夹。并在此文件夹下创建文件package.json如下&#…

【scarletthln 关于算法的一点总结】

1. 分解问题的角度: fix 某一维度,尝试另一维度上的所有可能 a. 可能是array的(i, j)pointers, b. 可能是矩形的长与宽, c. 可能是tree的每一个subtree, d. 可能是情景题的每一对pair...2. 求所有解的, 暴力上backtracking吧3. 如果问最短/最少的, 先想BFS、DP这对…

Angularjs Nodejs Grunt 一个例子

做了一个简单的示例,目的是记录环境配置以及这套框架的结构流程。 1.配置环境 默认nodejs已安装。 安装以下模块:express(nodejs框架),grunt(javascript task runner),grunt-contrib-watch(g…