• 鸽巢定理


    鸽巢定理的简单形式

      鸽巢原理(抽屉原理):如果有n+1个鸽子要进n个鸽巢,则至少存在一个鸽巢种包含两个或更多的鸽子。

    看上去是一句“废话”,不过这句”废话“在用来证明一个排列或则某种现象的存在性上相当有魅力!

    关于鸽巢原理更抽象的表述:

    • If X has more elements than Y, then f is not one-to-one.
    • If X and Y have the same number of elements and f is onto, then f is one-to-one.
    • If X and Y have the same number of elements and f is one-to-one, then f is onto.

     •中国剩余定理上有关鸽巢定理的证明

      令m,n为互素的正整数,并令a,b为两个整数,且0 <= a <= n - 1, 0 <= b <= n - 1。Therefore,存在一个正整数x,使得x mod m = a 并且 x mod n = b;即写成x = pm + a, x = qn + b。这里p和q是两个整数。

      证明:

    首先考虑n个整数

            a, m + a, 2*m + a, 3*m + a, ... , (n - 1)*m + a;

    这些整数中每个数除以m都余a。设其中两个除以n有相同的余数r。令这两个数为i*m + a, j*m + a。(0 <= i < j <= n - 1)。因此,存在两个整数qi, qj使得

            i * m + a = qi * n + r    ---------- (1)

            j * m + a = qj * n + r    -----------(2)

    整理得

            (j - i)*m = (qj - qi)*n    ------------(3)

      从(3)式可以看出n是(j - i)*m的因子,因为n和m互素。所以n是(j - i)的因子。然而 0 <= i < j <= n - 1 即 0 < j - i <= n - 1,也就是说n不可能是j - i的因子。这和之前的假设:n个整数a, m + a, 2*m + a, 3*m + a, ... , (n - 1)*m + a;中有两个除以n会有相同的余数。因此可以确定:这n个数中每一个除以n都有不同的余数。根据鸽巢原理:n个数,0,1,...,n - 1中的每一个数作为余数都要出现;特别的数b也会出现。令p为整数,满足0 <= p <= n - 1 ,且使数x = pm + a 除以n的余数为b。则对于某个特定的数q:

            x = q*n + b

    到此得证中国剩余定理。

    鸽巢原理的加强形式

      定理: 令q1, q2, q3, ...., qn为正整数。如果将 q1, q2, q3, ...., qn - n + 1 个物体放到n个盒子中,则存在一个i,使得第i个盒子至少含有qi个物品 ;

      证明: 假设将q1, q2, q3, ...., qn - n + 1个物品分别放到n个盒子里。如果每一个i (i = {1, 2, ..n}),第i个盒子中放少于qi 个物品,则所有盒子所放物品的总数不超过

            (q1 - 1) + (q2 - 1) + ... + (qn - 1) = q1 + q2 + ... + qn - n

     显然,比所要放的总数少一个。因此可以确定,对某个i (i = {1, 2, .. n}),第i个盒子至少包含qi个物品。

  • 相关阅读:
    sonarqube代码质量检测工具安装(docker安装篇)
    jenkins-job构建完成后通知企业微信
    jenkins-构建job成功后自动打tag到git仓库
    初识Python-变量
    初识Python-文件类型(入坑篇)
    kubernetes-部署LNMP环境运行Discuz
    harbor部署常见的错误
    kubernetes-部署harbor
    Google Hacking语法
    信息搜集总结
  • 原文地址:https://www.cnblogs.com/acSzz/p/2595540.html
Copyright © 2020-2023  润新知