演算法 錯排演算法

2021-10-05 21:30:36 字數 1116 閱讀 6306

1.認識:

什麼是錯排演算法?

舉個簡單的例子,教室裡有十個座位(1 ~ 10),十位同學分別坐在乙個不同的位置上(1 ~ 10),現要求打亂所有同學的位置,打亂規則如下:所有的同學都不能出現在原來的位置上,問有多少種打亂的方法?

引出錯排問題:有n個正整數1,2,3,……n,將這n個正整數重新排列,使其中的每乙個數都不在原來的位置上,這種排列稱為正整數1,2,3,……n的錯排,問這n個正整數的錯排個數是多少?

我們設有乙個表示式a(n)可以讓我們直接計算出n個數的錯排個數,如何找到這個表示式就是我們需要解決的問題。

2.找表示式

為了解決這個問題,我們可以先從簡單的情形入手:

當n=1時,由於只有乙個數1,不可能有錯排,所以a1=0.

當n=2時,兩個數的錯排是唯一的,所以a2=1.

當n=3時,三個數1、2、3只有2、3、1和3、1、2兩種錯排,所以a3=2.

當n=4時,四個數1、2、3、4的錯排有:2、1、4、3; 2、3、4、1; 2、4、1、3; 3、1、4、2; 3、4、2、1; 4、1、2、3; 4、3、1、2; 4、3、2、1,共有9種錯排,所以a4=9.

當n=5時,。。。。。。

可以發現,在n很小的時候我們要找到錯排的個數還是很容易,但從n=5甚至n=4開始就不再是那麼容易的事情了。

那怎麼辦呢?

哎!我們可以想到在錯排過程中第n個數不能放在n位上,那它放在哪,我們現在假設n放在m位上(1 =< m =< n-1),那問題來了,你佔了m的位置m放在哪,可以很容易想到m有兩種情況:

放在n位,那麼整個錯排過程就是對除了n和m之外的其他n-2個數進行錯排,即a(n-2)

不放在n位,那麼整個錯排過程就是對除了n之外的其他n-1個數進行錯排,即a(n-1)

所以n在第m位上的錯排數共有a(n-1)+a(n-2)種,由於m可取1、2、3、4、……、n-1共n-1種取法,

n個數的錯排個數遞推公式,a1=0,a2=1,當n≥3時,

a(n) = (n-1)*(a(n-1) + a(n-2))

演算法 錯排問題

錯排問題 就是一種遞推式,不過它比較著名且常用,所以要熟記!方法一 n各有序的元素應有n!種不同的排列。如若乙個排列式的所有的元素都不在原來的位置上,則稱這個排列為錯排。任給乙個n,求出1,2,n的錯排個數dn共有多少個。遞迴關係式為 d n n 1 d n 1 d n 2 d 1 0,d 2 1 ...

演算法 錯排問題

今天我們再來學習乙個比較簡單的演算法,今天我們學習的是錯排問題,什麼是錯排問題呢?這樣說吧,假如現在書架上放有10本書,每本書都有固定的位置,現在讓你重新排列這些書,讓新排好的每一本書都不在原來的位置問你有多少種排列的情況。假如我們用num陣列來代表可能的情況,那麼我們容易知道num 1 0,num...

寒假訓練(七) problem I 錯排演算法

time limit 1000 ms memory limit 32768 kb os windows source 遞推求解專題練習 for beginner i 9 hdu 2049 problem description 國慶期間,省城hz剛剛舉行了一場盛大的集體婚禮,為了使婚禮進行的豐富一些...