数学的アルゴリズムの基礎 - 順列及び組合せ(ネットワークオフ牛から採取したタイトル)

基本的な理論:

  1. アレンジメント

特定の条件に応じて順序付け方法の有限集合のサブセットは、おそらく繰り返し重複が許され、円形に配置され、一列に配置されています。
各m列に配置(1≤m≤n)の別個の要素は、n個の整列要素または非反復配列から取り出されたn個のm個の要素から取られた別の要素と呼ぶ、配置呼ば
ここに画像を挿入説明
完全な5つの文字を5を配置し!= 120

  1. 組み合わせ

n個の要素から別に関わらずn個の要素からm個の要素の組み合わせを選択するために繰り返し呼び出されていない合成のグループの順序の、M個の別個の要素(0≤m≤n)を取り出します。
全てのこのような組み合わせの合計は、組み合わせの数と呼ばれる、組み合わせの数は以下のように計算されます。
ここに画像を挿入説明

図1に示すように、パケットのための同じ問題は、(パーティション方式を使用して)要素を命じ

参考ブログ:のhttp://www.sohu.com/a/230556468_301997

[実施例1] 7つの同一の従来のペレットは、それらのすべては、4つのボックスに入れ1、図2に示すように、少なくとも1つのボール配置ボックスの各番号は、どのように多くの異なった吐出方法を尋ね?

【アイデアこの問題分離法の基本的なモデルを満たすの三つの条件をコーチング(1同一の要素の数; 2要素は、それぞれが少なくとも1つの元素を有するパケットを命じ、2要素が余剰を持つことができません)、私たちは直接、パーティションの方法を適用することができます。まず、行の7球ます。7は、6つの間隔の間隔で離間6つのボールの合計の中央では、セパレータ3を選択し、我々はボールの4つの部分に分割され、各ボールの少なくとも一つのコピーを持っています。そして、左から右へ、私たちのボールこれらの四つの部分からは、対応する放電法を与えるために、4つのボックス1-4に入れています。したがって、セパレータの各々は、ペレット法で補間方法に対応します。図6に示すように、セパレータ3の間隔に挿入され、すなわち、20個の異なる種類の本タイトル吐出法の総補間の20種類でした。

[方法]同一の要素は、セパレータ等間隔を挿入し、(空のボックスに許可されていない)ボックスに命じ、補間同セパレータの異なる種類の異なる吐出方法の従って数、一般的な種の法律を置きます。ここで[C(N、M)= P(N、M)/ P(M、M)= N!/ M!(nm)との組み合わせとして算出される基本的な式のいくつかの組み合わせであります!]。

N = 6、M = 3

図2に示すように、変形例(1):制限の問題パケット

[実施例2]それらのすべては、4つのボックスに入れ、従来のペレットと同じ12は、少なくとも2つのボックスのそれぞれ、ボールを配置どのように多くの異なる放電を求め、2、1の番号が付け法則?

[コーチング]の各ボックスの思考は、私はただの友達もでき、少なくとも1個のボールを載せていきたいと思います。各ボックスは、ボールにロードされるように、事前に限りであること、それは、セパレータの法則ことができます。
4つの目標を思い付くので、それぞれ、4つのボックスの中に、各ボックスはボールを持っています!そこで質問は、残りの8つの同一のボール、整然としたロードされた4つのボックスは、各ボックスは、少なくとも1個のボールを置きますが、どのように多くのプット法となり?これは、基本的なモデルだけで締結したパーティション方法の簡単な、直接的なアプリケーションではありません、7回の間隔で3枚のセパレータを挿入します。

[方法]本発明の方法、標題変異体の分離は、原則として、各ボックス内のボールの特定の数を配置する必要があり、その後、分割方法の基本的なモデルに変換します。次いで、ボックスに順序付けられた同一の構成要素(各ボックスは、少なくとも1種の元素を配置)、ボックス内の要素のそれぞれを配置する必要があり、パーティションを用いた放電方法の残りの要素を次のように要約ボックスに

N = 7、M = 3

実施例3 [12]、それらのすべては、4つのボックスに入れ同じ従来のペレットは、1、2の番号を付け、各ボックス数のペレットの必要な数は少ない数Q以上であります法のプットの何種類?

この質問と思考が[コーチング]例2はやや似ている、最初のパーティションの変換方法を解決するために、ボックス内のボールの一定数に入れなければなりません。最終的なボックスで第2は、ボックス番号2におけるキング試験第1のボールに、少なくとも2個のボールを持っていなければならないなど。同様ボックス3の最初の2つのボール、ボールに第4番のボックス3に。この性を保証は、各ボックスには、単に要件を満たすことができる少なくとも1個のボールを配置する必要があること。したがって、セパレータボックス法に6つの四球残り。

[方法]この問題は、同様に、セパレータを以下のように要約バリアント方法、各ボックスは空のカートリッジではなかったし、要素数が必要なときは同じではありません、我々は各ボックスがちょうどする必要があることなど、要素の数を配置する必要があります少なくとも一つの要素に要件を満たすことができます。そして、パーティションの方法を使用してボックスに残っている要素。

N = 5、M = 3。

(実施例4)既存の8つの同一のボール、3つのボックスにそれらのすべては、リリースのどのように多くの異なる方法を求めて、空のボックスが表示されますが可能、2、1番?

レッツ・テイク3個のボール(どのように多くのボックス番号での)[コーチングの考え方]の後、私はボールセパレータの法律を分けた。「成功しました三つの目標、私たちが動作するために行うことができます。この時間を借りる。プラスパーティション方式を使用して地面上の元の8つのボール、11個のボールの今の合計は、3つのボックスに入れて、一般的な種は、方法を置く。各放電方式のため、テスト王は、各ボックスからボールが出ていますバックボックスもボールがボールを返す割り当てられている場合にも、カートリッジが空のカートリッジは、実際には、ボールの後、さらに2つのバックにボールが、カートリッジが実際には1個のボールが含まれている、というように。この正常に8つの同一のボールは、空のカセット解放プロセスの45種類の合計を可能にする三本のカセットに分割されます。

[方法]同一の要素は、外部の力が付加的な同一の要素を借用する必要があることにより、要素はボックス分離方法に入れ、(空のボックスを可能にする)ボックスに命じその一般的な種の法律を聞かせて、(最終的にボールが戻って行かなければならないと、各ボックスが出てくるでしょう)。

N = 10、M = 3

たとえばプログラミング
12種類の袋に20球を、各バッグは0-20ボールを置くことができ、どのように多くのプット法律を?計算し、その後、プログラムの回答を分析する方法。

高度な問題を:それぞれのバッグは、計算方法を、ゼロ、1つ、2つまたは3つのボールを置くことができますか?

链接:https://www.nowcoder.com/questionTerminal/b01b4a95413040eaa1effbd34280c78c
来源:牛客网

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
//        写入球的个数
         int ball;
//        写入袋子的个数
         int pack;
         Scanner scan = new Scanner(System.in);
         System.out.println("请输入球的个数");
         ball = Integer.parseInt(scan.next());
         System.out.println("袋子个数");
         pack = Integer.parseInt(scan.next());
         System.out.println(getban(ball, pack));
         
    }
    
    
//    隔板法
    public static long getban(int ball,int pack)
    {
//        由于无法保证每个袋子都能装上一个球,无法使用隔板法,
//        所以故意往每个袋子加1个球,当排序的时候可以往每个袋子里减一个球就可以了
        long result = 1;
        int newball = ball + pack;
//        所以每个球的空隙有newball -1个
        int newballair = newball -1;
//        因为需要放入12-1个袋子(插入12-1块板),所以用公式C(newballair,pack-1)
        /*
         * C(m,n) = m!/n!*(m-n)!
         */
        for(int i = newballair - (pack - 1) + 1; i <= newballair ; i++)
        {
            result *= i; 
        }
        return result / factorial(pack-1);
    }
    
//    阶乘方法
    public static long factorial(int num)
    {
        if(num == 1)
        {
            return 1;
        }
        else
        {
            return num * factorial(num-1);
        }
    }
}

例2:箱から五ボールアウトプットが戻って行くために中断し、その場での順列の数ではないが、数(あります)

アイデア:まず、アレンジするには、以下の5例に分け、その後、ABCDEと5個のボールを置くことができます

  1. まず、どこにでも配置(右を想像)、4つの異なるが配置されています
  2. B位置、2つのCDEの構成を示す、とDEC(E 2右)ECDれます
  3. Bポジション(B位置を交換していない)を考慮しない、位置BがAを占めていない。位置Bの3つの選択肢、位置Cの3つのオプション(3つの内部におけるAとして、Aは関係なく存在するがありCDEのどの位置で、何の問題は、限りセット位置A、彼らは位置のみを交換することができるので、確実に、設定された他の二つの位置)として、それは3 * 3種類ではありません

確率タイトル
https://www.asklib.com/view/12798def.html

例:
1000年10枚の金貨があり、コインを取る金がそれを取るために二回、0.1である確率は、それを取るされてn回

アイデア:各撮影少ない1マイナス確率ができるの計算された確率よりも。

DP [N] = 990-(N -1)/ 1000-(N-1)* DP [N-1]、DP [0] = 1
最終結果1-DP [n]は

公開された36元の記事 ウォン称賛11 ビュー10000 +

おすすめ

転載: blog.csdn.net/s_xchenzejian/article/details/102482037