Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 11023: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.

Similar presentations


Presentation on theme: "1 11023: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義."— Presentation transcript:

1 1 11023: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義 Multisets 與 Sequences 。 1) Multiset 是一個由一系列自然數 ( 有可能會重複 ) 為元素 組成的集合。表示法是以非遞減順序列出所有元素,用逗 號隔開,兩邊用小括號括起來。 Multiset 裡的元素數量稱 為他的 size 。 Multiset 的 size 可以是 0 ,表示這個 Multiset 是空的。可能的 Multiset 有 : (), (1), (-18,-17,-16) 和 (1,3,3,3,4,5,5,6) 。

2 2 2) Sequence 是元素有特定順序的 Multiset 。表示法是以特 定順序列出所有元素,用逗號隔開,兩邊用大括號括起 來。跟 Multiset 一樣, Sequence 也可以是空的。可能的 Sequence 有 : {}, {1}, {1,2,3}, {2,3,1} 和 {25,-18,25,25,7} 。 3) 有些 Sequence 可以互相比較。如果兩個 Sequence 的 size 一樣而且所有的元素一樣,順序一樣,我們可以說他 們相等。如果兩個 Sequence 的 size 一樣而且組成元素一 樣,但是順序可能不一樣,我們可以說他們是相似的。 如果兩個 Sequence 的 size 一樣但可能包含了不同的元 素,我們就說他們是可比較的。我們也可以用不相等, 不相似和不可比較來表示相反的特性。 {1,2,2,3} 和 {1,2,2,3} 和是相等的,相似的而且可比較; {6,3,1,1} 和 {1,3,1,6} 不相等,但是相似而且可比較; {1,2,3} 和 {- 988,7,-10} 不相等,不相似但是可以比較。 Size 不同的兩 個 Sequence 不相等,不相似而且不能比較。

3 3 4) 可比較的兩個 Sequence 可以分大小。從左到右直到找 到一個兩個 Sequence 不同的元素,如果不同的那個元素 在一個 Sequence 比另外一個小,那個 Sequence 就比另一 個小。我們可以以此排序可以比較的數個 Sequence ,然後 決定一個特定 Sequence 在同一組的 rank 。最小 Sequence 的 rank 是 0 ,再來是 1 ,以此類推。下面一組的 Sequence :{7,-1,8},{1,1,1},{-9,0,-3},{1,1,0} 可以排序 :{-9,0,-3},{1,1,0},{1,1,1},{7,-1,8} 。 所以 {-9,0,-3} 的 rank 是 0 , {1,1,0} 的 rank 是 1 。 5) 五個指令: degrade 、 promote 、 rank 、 derive 、 find 。 degrade :把一個 sequence degrade 成一個有同樣元素的 multiset 。例如 :“degrade {6,3,-1,4,-1}” 得到 “(-1,-1,3,4,6)” 。

4 4 promote :把一個 multiset promote 成一個 sequence 。因為 一個 multiset 可以造出一系列相似的 sequence ,所以我們 也需要我們想要的 rank 。例如 : “promote (4,6,8) 3” 得到 “{6,8,4}” 。 rank :我們可以求出一個 sequence 在從同一個 multiset promote 出來的 sequences 中的 rank 。例如 :“rank {8,6,9,6}” 得到 “7” 。 derive :我們可以從一個 multiset derive 出一個特定 size 的 sequence ,那個 size 不超過 multiset 的 size 。因為一個 multiset 可以 derive 出很多種可比較的 sequence ,我們也 需要我們想要的 rank 。例如 :“derive (1,1,2,2,3) 3 15” 得到 “{3,1,2}” 。

5 5 find : find 一個 sequence 在從一個 multiset derive 出來的 sequences 中的 rank 。例如 :"find {5,8} (0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9)“ 得到 ”58“ 。注意指 令並沒有明確的給出 size ,因為 size 已經隱含在 sequence 參數中了。 格式: Input 包含了一系列以上定義的指令,每行一個,不包 含引號。 Multisets 和 sequences 最少有 0 個,最多有 20 個 元素。元素都是 32 位元有號整數,所有的指令都是有效 的。指令和參數之間會用一個空白隔開,但是 multisets 或 sequences 裡面和前後都不會有任何的空白。指令名稱都 是小寫字母。 Input 結尾是一行 “end” 。

6 6 題意範例: Input Output degrade {6,3,-1,4,-1} (-1,-1,3,4,6) promote (4,6,8) 3 {6,8,4} rank {8,6,9,6} 7 derive (1,1,2,2,3) 3 15 {3,1,2} find {5,8} (0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9) 58 end 解法: 1) DP 2) Math – 排列組合 rank 的順序恰為其元素由小到大的排列組合,我們可以 用數學計算出 rank 大小。

7 7 解法範例: degrade => 排序 (quick sort) rank {1,4,2,3} => rank= Σ( 次數 )*( 排列數 ) 0 1,2,3,4 1) 先與 rank 0 比較,找出第一個相異者。 1 1,2,4,3 此範例第一個相異者為 4 。由 4 的位置可 2 1,3,2,4 求出後二數的排列數,即 ( 3 – 1 )! = 2 。 3 1,3,4,2 2) 再搜尋出此數字 4 在剩下數字的排名 4 1,4,2,3 ,可得知在 4 之前有幾次組合,即 3 – 1 5 1,4,3,2 = 2 。 6 2,1,3,4 3) 將另尚未計算的數字另存陣列,利用 7 2,1,4,3 遞迴加上剩下未計算數字的 rank 。此範例 8 2,3,1,4 剩下的數字 {2,3} rank=0 9 2,3,4,1 所以 rank = 2*2 + 0 = 4 10 2,4,1,3 11 2,4,3,1 … } 排列數 2 有 2組 {有 2組 {

8 8 重複數字之處理: rank {8,6,9,6} => rank= Σ( 次數 )*( 排列數 ) 0 6,6,8,9 1) 先與 rank 0 比較,找出第一個相異者。 1 6,6,9,8 此範例第一個相異者為 8 。由 8 的位置可 2 6,8,6,9 求出單位 rank 的厚度,即 ( 4 – 1 )! = 6 。但 3 6,8,9,6 需扣除重複數,還要除 2! ,即 6 / 2! = 3 。 4 6,9,6,8 2) 再搜尋出此數字 8 在剩下數字的排名 5 6,9,8,6 ,可得知在 8 之前有幾次組合,即 3 – 1 6 8,6,6,9 = 2 。 ( 兩個 6 都要算 ) 7 8,6,9,6 3) 將尚未計算的數字另存陣列,利用遞 8 8,9,6,6 迴加上剩下未計算數字的 rank 。此範例剩 9 9,6,6,8 下的數字 {6,9,6} 求出其 rank=1 。所以 10 9,6,8,6 rank = 2*3 + 1 = 7 。 11 9,8,6,6 … } 排列數 3 有 2組 {有 2組 { }rank=1

9 9 find {2,1,2} (1,1,2,2,3) => rank= Σ( 次數 )*( 排列數 ) 0 1,1,2 1) 解法就如同 rank 一樣,但必須先計算出 1 1,1,3 每個數字的重複出現次數,求出其排列數 2 1,2,1 。先與 rank 0 比較,找出第一個相異者。 3 1,2,2 此範例第一個相異者為 2 。由去除 2 剩下 4 1,2,3 的數字可求出單位 rank 的厚度 = 7 。 5 1,3,1 2) 由 size 3 計算出在 {2,1,2} 之前有幾次組 6 1,3,2 合,即 2 – 1 = 1 。 7 2,1,1 3) 將剩下尚未計算的數字另存陣列,利用 8 2,1,2 遞迴加上剩下未計算數字的 rank 。此範例 9 2,1,3 剩下的數字 {1,2} 求出其 rank=1 。所以 10 2,2,1 rank = 7 + 1 = 8 。 11 2,2,3 12 2,3,1 13 2,3,2 14 3,1,1 …

10 10 promote 與 derive 即 rank 與 find 的反向思考。 由 rank= Σ( 次數 )*( 排列數 ) 。先求出組合次數,就可以得知 數字名次,再慢慢去反推即可。 討論: 1) 時間複雜度: quick sort => O (nlogn)


Download ppt "1 11023: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義."

Similar presentations


Ads by Google