算法题01:递归:红篮球问题

编程入门 行业动态 更新时间:2024-10-10 20:16:09

算法题01:<a href=https://www.elefans.com/category/jswz/34/1771140.html style=递归:红篮球问题"/>

算法题01:递归:红篮球问题

将 m ≥ 0 m\ge 0 m≥0 个同样的红球, n ≥ 0 n\ge0 n≥0 个同样的蓝球排成一行。对排法要求如下:任意某个蓝球左侧的红球个数大于等于其左侧的蓝球个数加1(即蓝球个数计数时包含当前蓝球),例如:下列合法的排法1中,从左数到的第1个蓝球左侧有2个红球,所以满足 2 ≥ 1 2\ge 1 2≥1;且数到的第2个蓝球左侧有2个红球,满足 2 ≥ 2 2\ge2 2≥2,所以是合法排列。

例如

  • 合法的排法1: ◯ ◯ ◯ ◯ \textcolor{red}{\bigcirc} \textcolor{red}{\bigcirc} \textcolor{blue}{\bigcirc} \textcolor{blue}{\bigcirc} ◯◯◯◯

  • 合法的排法2: ◯ ◯ ◯ ◯ \textcolor{red}{\bigcirc} \textcolor{blue}{\bigcirc} \textcolor{red}{\bigcirc} \textcolor{blue}{\bigcirc} ◯◯◯◯

  • 非法排列: ◯ ◯ ◯ ◯ \textcolor{red}{\bigcirc} \textcolor{blue}{\bigcirc} \textcolor{blue}{\bigcirc}\textcolor{red}{\bigcirc} ◯◯◯◯

总共有多少种合法的排法方式(分析递归表达式,要写出分析过程)。

解答

写出递归表达式和分析

A = { A ( 0 , n ) = 0 for  n ≥ 0 A ( m , 0 ) = 1 for  m ≥ 1 A ( m , 1 ) = m for  m ≥ 1 A ( m , n ) = 0 for  m < n A ( m , n ) = A ( m , n − 1 ) + A ( m − 1 , n ) for  m ≥ n A=\left\{\begin{array}{lll} A(0,n)=0 & \text { for } & n\geq 0 \\ A(m,0)=1 & \text { for } & m\geq 1 \\ A(m,1)=m & \text { for } & m\geq1 \\ A(m,n)=0 & \text { for } & m < n \\ A(m,n)=A(m,n-1)+A(m-1,n) & \text{ for } & m\geq n\\ \end{array}\right. A=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​A(0,n)=0A(m,0)=1A(m,1)=mA(m,n)=0A(m,n)=A(m,n−1)+A(m−1,n)​ for  for  for  for  for ​n≥0m≥1m≥1m<nm≥n​

对于A(0,n) = 0 , n>=0

​ //因为没有红球,所以必然没有一种排列合法

对于A(m,0) = 1 , m>=1

//因为没有蓝球,所以合法排列为一种,全为红排列

对于A(m,1) = m , m>=1

//当m=1时,A(1,1) = 1=m ,当m>1时,在m+1个位置上,只有第一个位置不能放蓝球,所以合法排列为 m+1 -1=m

对于A(m,n) = 0 , m< n

//红球个数小于蓝球时,设任意某个蓝球左侧的红球为m0个,必然有m0<=m,无论任何一种排列,对其从右到左的第一个蓝球,必有其左侧+1蓝球数为n, 显然 m0<=m<n,所以合法排列为0种。

对于A(m,n) = A(m, n-1)+ A(m-1, n) , m>=n

//把A(m,n)排列理解为在已有的合法排列的最后加上一个球,则有两种必不重复的排法,一、加红球,二、加蓝球。那么,只需将两种情况相加即可。也就是A(m,n) = 少一个红球的情况+少一个蓝球的情况。然后对应的两种情况又继续按上面的理解,递归到前一项,直到最开始的限制条件。

​ 这个题做了很久都是因为还没有习惯递归的思维,总是想的很复杂,想着找红球蓝球的位置的特征:比如在排列后面加红球必然合法等等,思维局限在通过找合法的排列来找到前一项与后一项的关系,然而递归的思想是"假设"前一项成立,直接找先后两项的关系,自己下套把自己整蒙了。本来想着先分类写几项,结果A(4,3)就已经有很多了,但是在写的时候也有刻意掺杂递归的思想来排列,所以在写排列的时候观察到了一些规律,受到了启发。

更多推荐

算法题01:递归:红篮球问题

本文发布于:2024-02-07 05:15:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753205.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:递归   算法   篮球

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!