• Tidak ada hasil yang ditemukan

臺北市立建國高級中學

N/A
N/A
Protected

Academic year: 2023

Membagikan "臺北市立建國高級中學"

Copied!
1
0
0

Teks penuh

(1)

演算法 與 資料結構 Algorithm and Data Structure

- Stack and Queue 堆疊與佇列

Data Structure,資料結構。

大概是這麼回事:演算法(algorithm)是處理問題時的核心想法,但有時候為了幫助這些想 法能夠有效運行,要使用一些特別的方式來儲存資料,以利於我們快速的 達成所需的操作、或快速得到我們需要的訊息。這樣的儲存資料方式,就稱 為資料結構(data structure)。

Array陣列算是一種最基本的鏈狀資料結構,支持我們快速取得與元素編

號相關的資料。而這邊要介紹的Stack和Queue也都是很基本常見的的鏈狀 資料結構;即使不特別implement(實作)它,在解決問題時常常也會用 到這樣的想法,例如搜尋方法的BFS和DFS。

Queue 佇列,FIFO (First-In-First-Out)

Queue在英文中的意思,也有排隊的「隊」的意思。沒錯,佇列就像排隊一樣,先來的人會最

先離開,而之後來的人都只能排在隊伍的末端,而且得最後離開。Queue就是這樣的資料結 構,用陣列來implement,通常用head和tail或者front和rear分別代表Queue的前端(取得 資料)和末端(加入新資料)。而Queue支持兩個動作:Push和Pop(也可以寫作Enqueue

和Dequeue),Push是把新的資料從rear加入,Pop則是把資料從head取出。

Stack 堆疊,FILO (First-In-Last-Out)

想像一些箱子排成一堆,每次可以把新的箱子堆到這堆箱子的最頂層,或是把最頂層的箱子 拿下來、取走,這就是堆疊。堆疊是個鏈狀資料結構,其特性在於,加入資料時,一定是加 在資料末端,且取用和刪除資料時,也只能對最末端的資料進行操作。

實行上(implementing)十分容易,用陣列就可達成,C++函式庫也有提供。一般我們用一個

陣列Stack[0…n]儲存資料,用一個變數top代表資料頂端,也就是第一個沒有資料的index。

雖然實行上容易,可不要因此小看了Stack!即使是如此的簡單明瞭,Stack的性質可以讓我 們方便的解決許多問題!

題目一 火車調動 (ACM 514)

堆疊市的火車站長得如上圖一般。火車車廂由A處依1, 2, 3, …, n的順序進站。如今給定一個

建中資訊培訓講義 (五) - by kelvin

(2)

1到n的重排,試問是否能在Station處經過一些調度,使火車依照這樣的重排順序出站。

題目二 加強版火車調動 (TIOJ 1012, Rails)

超級堆疊市的火車站長得如上圖一般。除了Station處可以容納火車車廂以外,停在station中 的車廂還可以開進Spare Railway中,但由於長度限制,Spare Railway最多只能容納m節車 廂。火車車廂由A處依1, 2, 3, …, n的順序進站。如今給定m和一個1到n的重排,試問是否 能使火車依照這樣的重排順序出站?

題目三 合法括弧

有若干種括弧,如(), [], {}, <>。給定一串括弧,試問其是否為合法?(能不交錯地配對)

例如({<()[]()>[]})是合法的,([])和<>>和[[]都是不合法的。

註:長度為n由’(‘和’)’構成的合法括弧字串──卡特蘭數Catalan Number。

題目四 文法規則 (ACM 271, Simply Syntax) 某個語言的文法規則如下:

0. 這個語言中僅有 pz,還有 NCDEI 這幾個字母。

1. 從pz中,任何一個字母都是一個正確的句子。

2. 如果s是一個正確的句子,那麼 Ns 也是。

3. 如果st都是正確的句子,那麼Cst, Dst, Est還有Ist也都是正確的句子。

4. 以上三點是檢查一個句子是否合乎語法僅有的規則。

你被要求寫程式檢查一個句子是合乎文法。

題目五 運算式 (ACM 727, Equation)

將一個中置運算式in-order改成後置運算式post-order。(運算元最多只有一位數)

中置運算式:其實就像我們一般寫的式子,可以有括弧,如(3+2)5、((1+2)(3+4)+5)(6+7) 後置運算式:運算子放在運算元後,沒有括弧,如32+5、12+34+5+67+。

題目六 數列中每個數其後第一個比它小的數 (小品演算法!!) - O(n)

給定一串數列有n個數,試在O(n)時間求出每個數在它之後第一個比它小的數是多少?

建中資訊培訓講義 (五) - by kelvin

(3)

例如對數列2, 0, 7, 8, 3, 6, 4, 5, 4, 1,求出的結果是0, -, 3, 3, 1, 4, 1, 4, 1, -。

題目七 最大0組成長方形 (USACO Section 6.1, A Rectangular Barn) …O(n2)?!

在一個零一矩陣中(長度不大於1000),找一塊最大的長方形,裡面全部都是0。

試問這樣的長方形最大的面積為多少?

[完]

建中資訊培訓講義 (五) - by kelvin

Referensi

Dokumen terkait

建立自己的 SPOC 課程--撥雲見物 這一場研習的收穫不僅止於認識 MOOC 和實際參與其中,研習過程中我跟趙肥一直 在想像一件事,就是我們是否有機會使用這 個平台作為「跨校網路學習」的平台呢?我 們在餐敘時間鼓起勇氣把這個想法問了 DeltaMOOCx 計畫主持人彭宗平教授,然後 在綜合座談的時候提出這個了想法: 「我們是 否有機會使用這個平台,建立屬於自己的線

Excel資料簡易整理術研習班 這個課程讓你不需要學習函數、不用VBA,只要利用軟體所 提供的功能,就可以快速完成資料的整理,最少節省你70% 整理資料的時間。 【課程大綱】 • 建立資料常見的錯誤和處理方式 • Excel好用的資料整理功能 • 資料整理的技巧 • 樞紐分析表的運用 研習日期 2月9、10日星期四、五 12小時 適合對象 各機關人員