1. 程式人生 > 其它 >【資料結構與演算法】進出棧方案數問題

【資料結構與演算法】進出棧方案數問題

進出棧方案數問題

讓n個數字依次進棧,求不同的出棧序列的種類個數。

首先可以對問題進行一個轉化,脫去數字本身的特性,單純將出棧序列的序列看成是由進棧和出棧兩種操作來構成的序列,其中我們可以令1代表入棧,0代表出棧。

而當出棧序列是非法的時候,就是在說棧為空時,仍然進行出棧操作,換成01串進行理解,也就是說,在整個01串中,存在某一個位置,且這個位置前面的操作0的個數大於1的個數,即說明這是非法的。

那麼,我們要求出所有可行的方案,我們可以換一個角度。

合法方案數 = 總方案數 - 非法方案數

總方案數 = 給你2n個位置,先填入n個1,其他空餘位置補上0 = \(C_{2n}^{n}\)

在計算非法方案數,我們可以稍微做一下轉換。

(注意這裡都是非法的,無論怎麼轉換的話)假設定在某個位置,這個位置前有p個1,p+1個0, 那麼在這個位置後有n-p個1,n-(p+1)個0,在這裡,我們可以稍微做一個轉換,在這個位置後有n-p個"0",n-(p+1)個"1",所以此時2n個位置共有n+1個"0",n-1個"1"。

所以非法的方案數為\(C_{2n}^{n-1}\)

所以合法的方案數 = \(C_{2n}^{n}-C_{2n}^{n-1}\)