出棧序列統計

2021-06-20 14:58:12 字數 1043 閱讀 8027

棧是一種常見的資料結構,有許多關於棧的問題,其中之一就是統計元素可能的出棧序列。具體說,就是給定n個元素,依次通過乙個棧,求可能的出棧序列的個數。

如果我們用直接模擬的方法,當n較大時會很費時間;另一種方法是利用組合數學求出棧序列個數,得到公式 

下面我們來看一種圖形化的方法證明這個等式,很容易理解的。

我們把對n個元素的n次進棧和n次出棧理解為在乙個n * n的方格中向右走n次(代表進棧),向上走n次(代表出棧)。由於出棧次數不能大於進棧次數,我們可以得到這樣乙個方格:

每次沿著實線走,所以,只要求出從方格左下角到右上角路徑的個數即可。

我們把**補全,考慮每一條不合法的路徑,如

在這條路徑上,必然有乙個地方連續兩次向上,即從圖上藍點處開始,而且這個點必然在如圖所示的綠線上。我們以這個點為起點,把到左上角整條路經取反,也就是對稱上去,得到一條新路徑,但是超出了**。我們知道,這條路徑包括n + 1次向上和n – 1次向下,也就是在乙個(n + 1) * (n - 1)的方格中。由此我們知道,一條不合法路徑必然對應乙個(n + 1) * (n - 1)方格中的路徑。同樣地,對於(n + 1) * (n - 1)方格中任意一條路徑,以這條路徑與綠線的第乙個交點為起點到方格的右上方全部取反,即可得到乙個在n * n方格中的不合法路徑。

我們通過這樣的方法確定了每條不合法路徑與乙個(n + 1) * (n - 1)方格中路徑的

一一對應關係

,因此,方格中不合法路徑總數為c(2n, n - 1),而所有路徑總數為c(2n, n),兩式相減即為原組合等式。

出棧序列統計

問題描述 棧是常用的一種資料結構,有 n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push 和pop 前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的 n,計算並輸出由運算元序列...

出棧序列統計

棧是常用的一種資料結構,有n個元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2,n,經過一...

出棧序列統計

時間限制 1 sec 記憶體限制 128 mb 提交 21 解決 20 提交 狀態 討論版 命題人 外部匯入 棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作...