组合数学及其应用——卡特兰数

  卡特兰数是组合数学中常见也是重要的特殊计数公式。

  首先给出一个现实问题的模型:

  给出凸多边形的边数n,求解该凸多边形内部不相交的对角线把这个区域分成三角形区域的方法数。

 

  首先我们进行初步的分析,当n=2,h2=1,也就是说对于三角形,划分的情况数是1.这似乎有些不好理解,由于三角形内部无法添加对角线,所以符合情况的就是三角形本身,情况数为1.

 

  下面我们讨论n取任意值的情况。

  看下面的图。

 

  考虑将n+1凸边形的子问题,即我们将AB视为基边,枚举C的位置,有n-1个可枚举位置,然后结合基本的计数原理,我们能够看到下面的递推式能够不重不漏的表示出h[n].

 

   

  而现在的问题在于,这样的递推公式是我们不喜爱的,我们喜欢的形式是斐波那契数列,给出的是前后项的关系式然后我们可以在线性时间复杂度下求出该数列,那么下面我们需要讨论的便是如何得到这个递推公式的解。

 

 

 

  下面是根据这条结论计算卡特兰数列的JAVA代码:

 

import java.io.*;
import java.util.*;
import java.math.BigInteger;


public class Main
{
 public static void main(String args[])
 {  
  BigInteger[] a = new BigInteger[101];
  a[0] = BigInteger.ZERO;
  a[1] = BigInteger.valueOf(1);
  for(int i = 2; i <= 100; ++i)
   a[i] = a[i - 1].multiply(BigInteger.valueOf(4 * i - 2)).divide(BigInteger.valueOf(i+1));
   Scanner in = new Scanner(System.in);
   int n;
   while(in.hasNext())
   {
    n = in.nextInt();
    System.out.println(a[n]);
   }
 }
}

  

 

 在引入卡特兰数列的实例模型中,我们从h1开始计数,考虑一般计数数列的使用习惯(从h0)开始,这里我们重新给出卡特兰数的定义:

 

 

  这个定理将一系列的计数问题与卡特兰数联系了起来,而其中的关键就是部分和满足的那个大于等于0的不等式,下面呈现这个定理的证明,随后将会讨论一系列与之有关的实际问题。

 

   

 

  下面我们就来看几个通过这个定理联系在一起的实例。

   Ex1:2n个人排成一列进入剧场。入场券是50美分,2n个人中n个人手中有50美分,m个人手中有一元的纸币。剧场售票处的机械用一个空的收音机开始售票。有多少中排队方法能够成功的销售2n张票?

 

  分析:先简单化的考虑,将每个人视为相同的元素。将这个实际问题与刚刚给出的定理联系,题目的一个最大限制是,这个序列每当出现1美元的时候,售票处必须有大于一张的50美分。若我们将排队序列中50美分记为+1,1元纸币记作-1,那么对于我们排出的能够成功售出2n张票的序列,必须满足这个序列1~k这一段的和大于等于0(k∈[1,2n]),这就和定理内容联系了起来。再基于计数结果,将拿50美分的n个人视为不同元素,需要对n进行全排列。对拿1美元的人也是这样处理。

 

 

   Ex2:考虑在这样一个n x n的方格纸上,你当前的位置是(0,0),现在你的目标是(n,n),每一步中你可以选择上、下、左、右中任意一个方向前进一个单位长度,那么在所有从(0,0)到(n,n)的路线中,要求每一条路线中不能够穿越这个方格纸的对角线,那么请问有多少条符合要求的路线?

  注:所有路线均在2n步完成。

  分析:题目要求不能够穿过对角线,那么我们恰好将对角线当做对称轴,考虑上半部分可行的路线,根据对称性将最终的结果乘2即可。考察这样一个“上三角”区域,容易看到整条路线其实是n个+1和n个-1组成的序列,而所谓的+1、-1在这个问题中的具体含义便是:+1代表向上走一个单位长度,-1代表向右走一个单位长度。由于“不能越过对角线”这条限制,能够看到这个序列必须满足任意前k项和大于等于0的要求,这就又和上文我们给出的定理呼应起来,即我们可以得到结论,上三角区域的路线数是第n+1卡特兰数Cn

  即对于n x n的方格,总路线为2Cn.

 

  Ex3:当前有n个元素,我们需要将它们分别压入栈中然后全部取出,那么请问有多少中压栈(出栈)方案?

  分析:其实这个问题能够更加典型的诠释上文给出的定理。这里压栈操作我们视为+1,出栈操作视为-1,那么很显然能够完成n个元素均压入栈中并取出的条件是在2n个操作形成的+1、-1序列中,对于任意k,前k项要大于等于0,其结果是第n+1个卡特兰数Cn

 

 

  拟Catalan数:

                           

  

   

   分析:首先我们需要注意的一个问题是,在构造乘法方案的过程中,a x b和b x a是两种不同的方案,虽然在很多运算中是满足乘法交换律的,但对于矩阵乘法便不符合,虽然这里我们不讨论运算的结果。清楚这一点,将有利于理解后面的分析过程。

 

 

   

转载于:https://www.cnblogs.com/rhythmic/p/5857927.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值