COM9021-2019-S1 ass1

處理流程

1.讀取txt內容。

2.句子拆分

3.解析出姓名,以及每人對應說的話

4.輸出全部姓名,將文字語言轉換成程序邏輯

5.計算出有多少組合可能


詳細分析

1.??讀取txt內容,去除換行符,拼接成一個字符串

2.將字符串拆分成句子。拆分可以以? ! . 三個符號就行拆分。注意,這三個符號可能會在雙引號""里,要特殊邏輯處理下,如果這句中只有一個引號,且下一句開頭是引號,那么這個引號是前一句的。

當然最好都加入些異常處理,例如txt讀取失敗,或者格式不對,那么直接返回no solution。

3.獲取所有出現的名字,按照要求里說明的,除了句子開頭,和Sir/Sirs 以外首字母大寫的都是名字,當然還有I也不是名字。可以將名字用set存儲(去重),同時用一個dictionary存儲名字和他所對應說的話,這里的話是指雙引號內的句子,例如{A:["I am a knight","all

of us are knight"],B:[“I am a knight”]},每個人會對應多句,所以value用list.

處理到這里已經可以獲取到全部的名字。記得要排序和輸出格式,大于一個用Sirs,等于一個用Sir。

4.將3里處理好的dictionary中的自然語言轉換成程序語言,雙引號里的情況就是要求的那8種。這里可以用一個dictionary,key為人名,value還是一個dictionary,里面存放我們設計好的key。例如

key:all-knight,里存放全部被描述為knight的名字,對應為”all of us are knight”,? ”I am a knight”,”Conjunction_of_sirs areknights”,”Sir sir_name is a knight”。

同理all-knave把上面的knight替換為knave。

Key:one-least-knight/one-least-knave對應為,“at least …”,“Disjunction_of_Sirs”

Key:one-most-knight/one-most-knave對應為“at most …”

Key:exactly-one-knight/exactly-one-knave,對應為“exactly one”

對應的value存儲名字,可以用set,

如何分析文字語言對用到哪個組別里,可以用正則re,或者直接關鍵詞判斷,例如:

通過most in ,exactly,in ,least in 其他4種場景處理,

名字的處理與3中一樣,注意us 和 I的映射

對于all-knight 直接場景直接加入到set

one-least場景,例如 存在A or Bor C is knight? 和 A or B is knight,那么處理的結果為 只要滿足 A or B is knight即可,C為什么不影響判斷,那么one-least是取交集

one-most場景?A B? 最多有一個knight.? A B C最多一個knight,那么需要滿足 A B C最多一個knight,即取并集

exactly-one場景 A B C 只有一個knight A B 只有一個knight,那么需要滿足A B 只有一個knight C 為knave,即取交集保留到exactly-one,差集加入到all_knave

5. 根據4得到的dictionary進行計算有多少滿足條件的組合,每人都有兩種可能要那么為knight 要么為knave,如果有n個人,那么就有2^n種可能。獲取全部可能然后依次帶入到4中的條件限制內,如果A 為knight,那么所有的條件返回的結果都為true,否則都為false,得到滿足的情況。

其中全集的獲取可以利用二進制,例如 存在3個人,那么有2^3=8種場景,那么對用為0-7,的二進制000 ---- 111 ,可以用0 表示 knight 1 表示knave。

?按照以上處理流程,即完成了ass1.

?三 優化

上面5中,存在優化空間。

1)??????存在n個人,那么生成的全量為2^n,同時存在m個限制條件,那么時間復雜度為m*(2^n) 的時間復雜度。考慮test_2.txt的場景,Frank Nina Paul 三個人,存在限制條件的只有Nina,那么就意味著Frank,Paul是什么身份都不影響最后的結果,那么只需要獲取Nina的可能性為knight 或knave,得到兩種可能,在乘上2^2 = 4 (每人兩個可能,兩個人Frank,Paul)最后答案為8個solution.

2)?????? 上面只是減少了n的大小,但2^n的數量空間還是沒變。這時候考慮用剪枝的方式,例如 存在8種可能 分別為

000 001 010 100 011 101 110 111 三種情況,那么先判斷第一個人為0是否滿足條件,如果不滿足,那么上面所有0開頭的場景都可以排除。

3)?????? 讓2)中更早的剪枝掉不滿足要求的情況,那么先處理容易確認性的判斷,在處理不容易判斷的場景

4)?????? 2)3)解決了時間復雜度的問題,但空間復雜度仍未2^n,那么可以用棧來解決空間復雜度

?四 考點總結

1.?? txt文件的讀取

2.??字符串分割

3.?? 集合 交集 并集 差集

4.?? 全排序,剪枝,棧的運用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372