1 / 9

10904: Structural Equivalence

10904: Structural Equivalence. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10 9 0 4 : Structural Equivalence 解題者: 姜安璟 解題日期: 200 8 年 4 月 18 日 題意: 給格式為 type name = type 的測資,其中 name 是一個大寫英文字母, type 則可以由多種 type 組成。我們必須把 type 相同的資料分成同類並印出。

hallie
Download Presentation

10904: Structural Equivalence

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 10904: Structural Equivalence • ★★★★☆ • 題組:Problem Set Archive with Online Judge • 題號:10904: Structural Equivalence • 解題者:姜安璟 • 解題日期:2008年4月18日 • 題意:給格式為type name=type的測資,其中name是一個大寫英文字母,type則可以由多種type組成。我們必須把type相同的資料分成同類並印出。 input: 每個test case由’-’分隔開來,’--’代表測資結束。 output: 每個testcase 由空行分隔開來。 不管是input、output,name都必須照字母順序排序。

  2. 題意範例: Sample Input: Sample Output: type A = int A B C type B = AR S W Z type C = intX Y type X = struct(A B) type Y = struct(B A) type Z = struct(A Z) type S = struct(A S) type W = struct(B R) type R = struct(C W) --

  3. 解法: ※成員個數表示當中有幾個type name 成員個數為0: type A = int0group1 type C = int0group1 *直接比對字串,相同設為同group。 成員個數為1: type B = A1 group1 *一個成員時,等於成員的group。

  4. 解法: 成員個數2以上: type X = struct(AB)2 type Y = struct(B A)2 *兩個type中,彼此對應相同typename的成員,扣除不比較。 扣除後: type X = struct()0 group2 type Y = struct()0 group2 *沒有需要比較的成員,相同group。

  5. 解法: type Y = struct(B A)2 group2 type Z = struct(A Z)2 扣除後: type Y = struct(B)1group2 type Z = struct(Z)1 group3 *擁有相同成員個數方可互相比較。 B、Z無法比較,因為成員個數(B = 1、Z = 2)。 因此,Y、Z屬不同group。

  6. 解法: type Z = struct(A Z)2 group3 type S = struct(A S)2 扣除後: type Z = struct(Z)1 group3 type S = struct(S)1 group3 *若剩下的成員彼此對應的剛好是自己,則因為前面能比的都相同,屬同group。

  7. 解法: type S = struct(A S)2 group3 type W = struct(B R)2 *無法扣除,則將成員個數相同的互相做比較。 發現A、B屬同個group,則將比對完的A、B扣除。 扣除後: type S = struct(S)1 group3 type W = struct(R)1 group3 比對S、R,因為R還未建group,所以我們必須把R展開發現前面的內容都和S相同,後面為recursive。那S、R為相同group。

  8. 解法: type W = struct(B R)2 group3 type R = struct(C W)2 扣除相同group的B、C後: type W = struct(R)1 group3 type R = struct(W)1 group3 *若剩下的成員彼此對應的剛好是對方,則因為前面能比的都相同,屬同group。

  9. 解法範例:無 • 討論: (1) 有沒有更好的方法? (2)group比對是不是可以更快? (3) 注意: 當成員個數不同時,必須展開至相同個數才能比對。

More Related