• [转载]限制排列与棋盘多项式{理论}


    首先来说说限制排列

     

    例子:

    相邻禁位排列问题:在整数1,2,3,...,n的无重全排列中,要求,求全体排列数

     

    分析:利用容斥不难得到

     

     

    旋转木马问题:8个小孩围坐在旋转木马上,问有多少种变换座位的方法,使得每个小孩前面坐的都不是原来的小孩?

     

    分析:其实做法跟上面的方法一样,只是注意这里是换排列,那么总数就应该是7!,得到结果为:

     

     

     

     

    棋盘多项式:

    n个不同元素的一个全排列可以看成是n个相同的棋子在n*n的棋盘上的一个布局,这个布局满足每一行或每一列只有一个棋子。

     

    例如:41352对应如图。

     

    那么如果把棋盘推广到任意形状

     

     

    我们令表示k个棋子布到棋盘C上的方案数。所以容易知道:

     

                                      

     

    这里规定

     

    是棋盘C的某一指定格子所在的行和列都去掉后所得的棋盘,是仅去掉该格子后所得到的棋盘。

     

    那么有:

     

    设C为一棋盘,那么称为C的棋盘多项式。

     

     

    那么我们先来看它的一些性质:

     

    (1)

     

    推导过程:

     

    (2)如果C由相互分离的组成,即的任意格子所在的行和列都没有的格子,则有:

     

     

     

    所以结合上面的两个性质,我们可以得到:

     

               

     

     

     

     

     

     

     

    下面介绍一个定理:

     

    为k个棋子布入禁区的方案数,则有禁区的布子方案数为(即禁区内不布棋子的方案数):

     

     

     

    那么现在我们就可以来解题了,现在给出下面的一题:

     

    1,2,3,4四位工人,A,B,C,D四项任务,条件是:1不干B,2不干B,C,3不干C,D,4不干D,问有多少种方案?

     

    分析:那么按照上面的思路,写出禁区的棋盘多项式

     

     

    那么进一步就可以得到:

     

     

     

     

    到了这里,对于错排公式,我们也可以通过棋盘多项式来认识它了。

    对于它,我们可以看成是棋盘的主对角线是禁区,然后它的棋盘多项式很容易根据上述性质(2)得到是

     

    所以这样我们就知道了,所以进一步得到错排公式了。

  • 相关阅读:
    AtomicIntegerFieldUpdater 源码分析
    AtomicIntegerArray 源码分析
    AtomicInteger 源码分析
    ArrayBlockingQueue 源码分析
    ReentrantReadWriteLock 源码分析
    ReentrantLock 源码分析
    <Chapter 2>2-2-2.开发Java应用(Developing a Java App)
    <Chapter 2>2-2-2.开发Python应用(Developing a Python App)
    <Chapter 2>2-2-1.用户偏好模式(The User Preferences Pattern)
    <Chapter 2>2-2.开发应用(developing the Application)
  • 原文地址:https://www.cnblogs.com/vectors07/p/7976398.html
Copyright © 2020-2023  润新知