数学杂谈:不经过x轴下方的随机行走问题

1. 问题描述

首先,我们给出这个问题的具体描述如下:

已知一个机器人初始点在原点位置,在每个单位时间内,机器人可以随机地向上或者向下行走一个单位距离。

问经过 2 n 2n 2n个单位时间后,机器人可以回到原点,且从未走到过 x x x轴下方的行走方式一共有多少种。

这个问题是从同学那边拿来的一个很有意思的题目,尤其是这个题目的解答思路,简直巧妙的不行,所以在这里记录一下做个小分享。

2. 问题解答

这道题的思路的话非常的巧妙,主要的话就是一个转化的思路。

显然,如果不考虑不能经过 x x x轴下方的限制条件,那么经过 2 n 2n 2n个单位时间之后能够回到原点的走法总数为 C 2 n n C_{2n}^{n} C2nn种。

剩下的,我们只需要求出至少经过了一次 x x x轴下方,且最终回到原点的走法总数,两者相减即可得到题目中要求的走法数目了。

这里,巧妙的地方就来了,简直妙不可言!

显然,如果经过了 x x x轴的想法,那么必有至少一次经过了点 ( x , − 1 ) (x, -1) (x,−1),那么,我们在它第一次经过点 ( x , − 1 ) (x, -1) (x,−1)的时候将之前的走法按照轴 y = − 1 y=-1 y=−1取对称,后续走法不变,那么,对应的路线就变成了一个起点为 ( 0 , − 2 ) (0, -2) (0,−2),终点为 ( 2 n , 0 ) (2n, 0) (2n,0)的路线。且不难分析,对于任意一条从 ( 0 , − 2 ) (0, -2) (0,−2)到 ( 2 n , 0 ) (2n, 0) (2n,0)的路线,我们都可以通过相同的变换使之变成一个从 ( 0 , 0 ) (0, 0) (0,0)到 ( 2 n , 0 ) (2n, 0) (2n,0)的路线。

因此,两者刚好是相同的,故至少经过一次 x x x轴下方的总的走法数目就恰好为 C 2 n n − 1 C_{2n}^{n-1} C2nn−1种。

而两者相减,我们即可得到从未走到过 x x x轴下方,且最终回到原点的走法总数为:

N = C 2 n n − C 2 n n − 1 N = C_{2n}^{n} - C_{2n}^{n-1} N=C2nn−C2nn−1

3. 问题扩展

进一步的,我们可以将问题进行进一步的拓展,考虑不经过 x x x轴下方,但是也不需要回到原点的随机行走的路线数目。

关于这部分的内容,我们倒是没有推导出一个完整的通项公式来,不过简单的迭代关系倒是不难写出来。

我们假设走了 n n n步之后满足条件的走法总数为 a n a_n an,则显然有 a 1 = 1 a_1 = 1 a1=1。

下面,我们考察一下递推关系。

我们不妨设 b n b_{n} bn为走了 n n n步之后不经过 x x x轴下方且刚好回到原点的走法种数,那么根据第二小节的内容,显然有:

{ b 2 n = C 2 n n − C 2 n n − 1 b 2 n + 1 = 0 \left\{ \begin{aligned} & b_{2n} = C_{2n}^{n} - C_{2n}^{n-1} \\ & b_{2n+1} = 0 \end{aligned} \right. {b2n=C2nn−C2nn−1b2n+1=0

而进一步的,对于 a n a_n an,不难写出递推关系如下:

{ a 2 n = 2 a 2 n − 1 a 2 n + 1 = 2 a 2 n − b 2 n \left\{ \begin{aligned} & a_{2n} = 2 a_{2n-1}\\ & a_{2n+1} = 2 a_{2n} - b_{2n} \end{aligned} \right. {a2n=2a2n−1a2n+1=2a2n−b2n

不过可惜就是通项关系没求出来,不过如果要写个递推算法任意推导某一项 a n a_n an倒是也不复杂,但是这里就不展开了,实在是比较简单的编程问题......

相关推荐
summ1ts1 个月前
组合数求法汇总
c++·数学·算法·离散数学·组合数学
感觉画质不如…原神4 个月前
Leetcode.1735 生成乘积数组的方案数
质因数分解·组合数学
闻缺陷则喜何志丹5 个月前
【组合数学 隔板法 容斥原理】放球问题
c++·算法·组合数学·容斥原理·隔板法·放球问题·盒子
闻缺陷则喜何志丹1 年前
C++二分查找算法的应用:长度递增组的最大数目
开发语言·c++·算法·二分查找·数论·数组·组合数学
Code920071 年前
Pinely Round 2 (Div. 1 + Div. 2) G. Swaps(组合计数)
组合数学·计数