考虑这么一个 14 位数 02565413989732 ,如图所示,它的数字先逐渐变大,然后开始变小,再变大,再变小,再变大,再变小。我们就说,它一共包含了 6 个单调区间。我们的问题就是:一个 n 位数平均有多少个单调区间?为了避免歧义,我们假设任意两位相邻的数字都不相同,因而像 77765589911 这样的数我们就不考虑了。另外,大家可能已经注意到了,我们允许这个 n 位数以数字 0 开头。因而,更精确地说,我们的问题是:相邻数字都不相同的、允许以 0 开头的所有 n 位数当中,平均有多少个单调区间?

这个题目来自 1987 年 IMO 候选题。

让我们把所有这种 n 位数的个数记作 N 。那么 N 等于多少?这个 n 位数的第一位有 10 种选择,今后的每一位都只有 9 种选择(因为要跟前一位不一样),因而 n 位数一共有 N = 10 · 9n-1 个。接下来,我们要求的就是,所有 n 位数当中的所有单调区间一共有多少个。我们换一种方法来累计这些单调区间:先算所有从第一位开始的单调区间,再算所有从第二位开始的单调区间,等等,最后算所有从第 n 位开始的单调区间。如果用 ri 来表示所有从第 i 位开始的单调区间的数目,那么我们要求的平均单调区间数就是 (r1 + r2 + … + rn) / N ,也就是 r1 / N + r2 / N + … + rn / N 。注意到其中的每一项 ri / N 其实就是从 N 个合法的 n 位数中任取一个后,存在以第 i 位数打头的单调区间的概率。因此,我们只需要求出这 n 个概率值,加起来便是我们想要的答案了。

显然, r1 / N = 1 ,因为第一位数字必然会引领一个单调区间。显然, rn / N = 0 ,因为最后一位数字不可能引领一个新的单调区间。那么,对于其他的 ri / N 呢?注意到,第 i – 1 位、第 i 位和第 i + 1 位的大小关系一共可能有以下四种情况:

其中,只有第三种情况和第四种情况下,第 i 位才会成为一个新的单调区间的开始。为了计算这两种情况发生的概率,我们只需要算出情况 1 和情况 2 发生的概率,再用 1 来减即可。情况 1 发生的概率有多大呢?三位数字串一共有 10 · 92 个(第一位有 10 种选择,后面的每一位都只有 9 种选择,因为要跟前一位不一样)。为了得到递增的数字串,我们只需要选出三个不同的数字,然后把它们从小到大排列即可,这一共有 C(10, 3) 种方法。因此,情况 1 的发生概率就是 C(10, 3) / (10 · 92) = 4/27 。同理,情况 2 的发生概率也是 4/27 ,两者加起来就是 8/27 ;反过来,情况 3 和情况 4 出现的概率就是 1 – 8/27 = 19/27 了。

因此,我们最终要求的答案就是 1 + 19/27 + 19/27 + … + 19/27 + 0 = 1 + (n – 2) · 19/27 。

这个结论还会引出很多有意思的问题。在一个 29 位数当中,平均会产生 20 个单调区间。我们似乎发现了一个很不合理的地方:这岂不意味着,平均每个单调区间的长度只有 29/20 = 1.45 个数字吗?考虑到单调区间的长度不可能恰好是 1.45 个数字,为了得到 1.45 这个平均长度,一定有些区间的长度比 1.45 小,有些区间的长度比 1.45 大。有些区间的长度比 1.45 小,这不就意味着这些区间的长度为 1 吗?而一个区间的长度显然是不可能为 1 的。怎么回事?

其实, 29/20 = 1.45 这个算式是错的。在这 20 个单调区间中,除了最后一个区间以外,每一个区间的最后一个数与下一个区间的第一个数都是公共的。因此,这个 29 位数当中,有 19 个数被重复使用了。所以,在一个 29 位数当中,单调区间的平均长度应该是 (29 + 19) / 20 = 2.4 。

类似的, n 位数的单调区间的平均长度为 (n + (19/27)(n – 2)) / (1 + (19/27)(n – 2)) = (46n – 38) / (19n – 11) = (46 – 38/n) / (19 – 11/n) 。当 n 无穷大时,其极限为 46/19 。

参考资料:Ross Honsberger, From Erdos to Kiev: Problems of Olympiad Caliber, pp. 29-33

[转]趣题:一个n位数平均有多少个单调区间?---- From Matrix67的更多相关文章

  1. 将十进制数转为一个n位数的密码(每位都是个m进制数)

    例如一个6位数的10进制密码,共有106个密码,如果把每个6位数的密码编成号就是[0,106-1].这是十进制的情况,即6个位,每个位有10种选择.如果要遍历所有密码,需要6重for循环,每个循环10 ...

  2. 找一个四位数,要求该四位数的四倍刚好是该四位数的反序。 即b1b2b3b4 * 4 = b4b3b2b1

    找一个四位数,要求该四位数的四倍刚好是该四位数的反序. 即b1b2b3b4 * 4 = b4b3b2b1 解: 第一步,确认最末位 假设 b1b2b3b4 + b4b3b2b1 = [x0]x1x2x ...

  3. 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花 数 ",因为153=1的三次方+5的三次方+3的三次方。

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花 数 ", ...

  4. HDOJ/HDU 1328 IBM Minus One(水题一个,试试手)

    Problem Description You may have heard of the book '2001 - A Space Odyssey' by Arthur C. Clarke, or ...

  5. PHP生成一个六位数的邀请码

    PHP生成一个六位数的邀请码 $unique_no = substr(base_convert(md5(uniqid(md5(microtime(true)),true)), 16, 10), 0, ...

  6. 水仙花数------"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。(for循环的嵌套)

    package com.zuoye.test;//打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,//其各位数字立方和等于该数本身.//例如: ...

  7. 一个九位数-python

    有一个9位数由1~9的9个数字组成, 每个数字只能出现一次:其第一位能被1整除, 前两位能被2整除, 前三位能被3整除...依次类推,前9位能被9整除.所有的9位数中,只有一个数字满足这些条件,请你输 ...

  8. Linux 如何查看一个文件夹下面有多少个文件

    Linux 如何查看一个文件夹下面有多少个文件 $ tree $ find ./ -type f | wc -l $ ls -l | grep "^-" | wc -l refs ...

  9. LuoguB2028 反向输出一个三位数 题解

    Content 给定一个三位数,请反向输出它. 数据范围:数值在 \(100\) 到 \(999\) 之间. Solution 如果我们把它当做是一个字符串来读入的话,这道题目就很简单了.STL 当中 ...

随机推荐

  1. Java中多个线程交替循环执行

    有些时候面试官经常会问,两个线程怎么交替执行呀,如果是三个线程,又怎么交替执行呀,这种问题一般人还真不一定能回答上来.多线程这块如果理解的不好,学起来是很吃力的,更别说面试了.下面我们就来剖析一下怎么 ...

  2. ashx 文件的使用

    它就类似.aspx文件,用于处理传入到服务器的HTTP请求,但它不会像.aspx文件那样要返回处理结果和大量HTML,它可以返回简单的字符串.图片等. 百度百科定义链接:http://baike.ba ...

  3. ACM_求交集

    求交集 Time Limit: 2000/1000ms (Java/Others) Problem Description: 输入集合A和B,按大小顺序输出A和B的交集. Input: 输入包含多组测 ...

  4. 使用A*寻路小记

    前几天做另一个DEMO 要用实现自动寻路功能,看到普遍都是A* 学习了下 我的主循环代码: isFindEndPoint = false; //主循环 do { CreateOutSkirtsNode ...

  5. mailto的使用

    用mailto会使用Windows自带的邮件进行发送邮件 方式一,代码如下: [注意:一下表单元素中的 name的值不能改变] <form action="mailto:lisi@12 ...

  6. Ubuntu 系统的常用快捷键

    Ubuntu操作基本快捷键 ibus-setup :设置系统输入法 scp filename username@serverIp:/home/xxx/xxx/filename   回车输入该usern ...

  7. [ NOIP 2008 ] TG

    \(\\\) \(\#A\) \(Word\) 给出一个长为\(N\)的小写字母串,判断出现所有字母中最多出现次数减最少出现次数得到的答案是否是质数. \(N\in [1,100]\) 直接按题意开桶 ...

  8. html5——动画案例(时钟)

    1.秒钟转360度需要60s分60步 2.分针转360度需要3600s分60步 3.秒钟转360度需要43200s分60步 <!DOCTYPE html> <html lang=&q ...

  9. html5——动画

    基本介绍 /*执行函数gun,执行时间,重复执行,反向执行,匀速执行,延迟执行时间*/ animation: gun 4s infinite alternate linear 5s; 动画序列 1.g ...

  10. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...