抽屉原理 >> NoAlGo博客



抽屉原理 » NoAlGo博客

抽屉原理我们从小学就开始接触,直到大学还在学习,其中虽然简单,但也有许多复杂的推广,不乏精妙的数学思想。
本文简单介绍抽屉原理的基本形式及其推广内容,并通过具体例子介绍其使用方法。

一 抽屉原理

简单形式 n+1个物体放进n个抽屉里,则至少有一个抽屉有不少于两个物体。

例1:367个人中,至少两个人生日相同。
事实上,23个人中至少两个人生日相同的概率已经大于50%,60个人则大于99%。

例2:任意n个正整数,总能找出其中若干个,其和为n的倍数。
证明:事实上有以下更强的结论,能找到一段连续的序列,其和为n的倍数。不妨设正整数序列为a1,a2,…,an。构造新序列si=a1+a2+…+ai,把si对n取模:

  1. 若存在sk%n==0,则a1+a2+…+ak为n的倍数
  2. 否则,任意sk模n均不为0,则si这n个数模n的值在1~(n-1)的n-1个数中,于是必存在k1、k2(k1<k2),sk1、sk2模n的余数相同。则sk2-sk1为n的倍数,即a(k1+1)+…+a(k2)为n的倍数

例3:任意六个人中,一定可以找到三个人,其互相认识,或者互不认识。
证明:问题等价于,六个点,两两连线并涂上红色或蓝色,证明存在同色三角形。
任取一点A,其引出五条线,则必存在三条线颜色相同(不妨设为红色),令其对应的顶点为B、C、D。对于这三点,

  1. 若有两点连线为红色,则这两点与A组成同色三角形。
  2. 否则,每两个点的连线均为蓝色,则B、C、D三点组成同色三角形。

加强形式 把q1+q2+…+qn-n+1个物体放进n个抽屉里,则要么第一个抽屉至少有q1个物体,要么第二个抽屉至少有q2个物体,…,要么第n个抽屉至少有qn个物体。
可以看到,简单形式的抽屉原理是q1=q2=…=qn=2的特殊情形。

例4:任意长为n^2+1的实数序列,要么含有长为n+1的递增子序列,要么含有长为n+1的递减子序列。
证明:不妨设原序列为a1, a2, …, an^2+1。
假设不存在长为n+1的递增子序列,令mk表示ak开始的最长递增子序列的长度,则mk<=n。
又显然有mk>=1,于是m1, m2, …, mn^2+1这n^2+1个数落在1到n中,根据抽屉原理,其中至少有n+1个数相等,令其为

mk1 = mk2 = … = m(kn+1) 1 <= k1 <= k2 <= .. <= kn + 1 <= n^2+1

考察这n+1个数,假设有某个i满足aki<aki+1,于是把aki加到aki+1的最长递增子序列的前面可以得到一个以aki开始的递增子序列,即mki>mki+1,与上式矛盾。
于是aki>=aki+1,即ak1 >= ak2 >= … >= akn+1,即存在长度为n+1的递减子序列。得证。
Note:子串是连续的,子序列不一定连续。


Read full article from 抽屉原理 » NoAlGo博客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts