# 2020/11/2 計算機程式設計 ###### tags: `Python` ## sorted() key=[key1,key2,key3] if same then compared the next Ex: 期中筆試sorted那題 ## merge sort ``` sort a[4] b[4] sort a[0:4] b[0:4] for sort a[0:4] -> sort a[0:2] a[2:4] for sort a[0:2] ->sort a[0:1] a[1:2] for sort a[0:1] ->sort a[0] a[1] merge[0,1] merge[0,1,2] merge[0,2,4] ``` #### 時間複雜度:O(nlog(n)) ### example: [4,3,2,6,5,1] >[4,3,2,6,5,1,inf,inf]#變2的次方個 >[3,4][2,6][1,5][inf,inf] >[2,3,4,6][1,5,inf,inf] >[1,2,3,4,5,6,inf,inf] ## Goodstein sequences - #### 與期中go函數相關(ppt提供solution) - #### finite for every N ### Gn(b)= > #### n ,if b=1 > #### go(b,Gn(b-1))-1 ,if Gn(b-1)>0 #### use oridinal number to proof ### 相關:海怪(hydra) #### Thm: 任何形狀的海怪以任何順序砍頭,在有限刀內所有頭都會被砍光 ### 延伸 - 哥德不完備定理 - 希爾伯特的二十三個問題 ## 停機問題 #### Q:可否用一個python程式看出另一個python程式是否會在有限次數迴圈後停止 ##### 如以下函式 ```python= import inspect def h(function,para): code=inspect.getsource(func) if(code can end): return True else: return False ``` ##### <proofed>圖靈:停機問題無解 GG證明 ```python= import h from h def g(func): if h(func,func): while True: x=3 ``` > #### h(g,g) == True ->g(g) 會停下來 by definition of h > #### g(g) 會停下來 -> h(g,g)==False by definition of g > #### 矛盾(-><-)故不存在 ## 河內塔(Tower of Hanoi) > ### Rule: > #### 大碟子不能移到小碟子上 > #### 共三根柱子 > #### 須把一個塔移到另一位子 ### Q:最少要幾步? n=1 1步 n=2 3步 n=3 f(2)+1+f(2)步 step 0~3 類似f(2) (移動1&2 to B) step 3~4 (移動3 to C) step 4~7 類似f(2) (移動1&2 to C) ![](https://i.imgur.com/JuheQux.png) 使用遞迴會好做很多 詳見PPT ## 費波那契數列 f(n)=1 ,n=1or2 f(n)=f(n-1)+f(n-2) ,n>=3 ```python= def f(n):return 1 if n<=2 else f(n-1)+f(n-2) ``` ### 利用Recursion #### 優點 - 程式簡潔,方便好想 #### 缺點 - 浪費時間、記憶體,時間複雜度高(指數成長) ### 利用list #### 優點 - 時間複雜度O(n)(相對較低) #### 缺點 - 浪費記憶體(用陣列儲存)