程式寫好跑不完?Time Limit Exceeded怎麼辦?. - Medium

文章推薦指數: 80 %
投票人數:10人

本篇將簡單介紹一下在寫程式時容易遇到的問題:Time Limit Exceeded (TLE)。

像LeetCode 等judge system 為了不讓讀者每次的submit 佔過多的時間,都會 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite程式寫好跑不完?TimeLimitExceeded怎麼辦?—程式人都該學會的技能PhotobyChrisRiedonUnsplash前言在這個時代,程式可說是全民運動,不論科系、目的皆有機會碰到程式。

程式說好上手其實也不容易,若只憑直覺寫程式的話可能會遇到一些問題。

本篇將簡單介紹一下在寫程式時容易遇到的問題:TimeLimitExceeded(TLE)。

像LeetCode等judgesystem為了不讓讀者每次的submit佔過多的時間,都會設定時間的上限,因此TLE的意思就是程式跑一段時間仍沒有跑完,超過時間限制,於是報錯。

除了judgesystem之外,當我們在自己的電腦跑程式時,也可能會出現程式跑了許久仍沒有跑完而電腦發燙的窘境(尤其是在做大數據分析時,程式跑了三天三夜都跑不完⋯⋯)JudgeSystem出現TLE或是程式跑不完並不一定代表邏輯有誤,而是讀者的想法太過「直觀」(例如暴搜),使程式的效能過低。

而效能量化的方式之一為計算時間複雜度(TimeComplexity)。

時間複雜度TimecomplexityBigO一般講到計算時間複雜度時,通常會提到BigO,BigO為一個數學函數,可以用來評估最糟的情況下要花多少時間來跑這個code。

BigO的定義如下:Supposeifandonlyif存在正實數M和實數x0,使得對於所有x>x0,均有|f(x)|≤M|g(x)|,我們就可以認為f(x)=O(g(x))。

參考資料:維基百科讀者如果讀到這裡還不知道時間複雜度為何不用擔心,快速計算時間複雜度的方法(i.e.懶人包)為:Step1.將所有步驟的數目相加Step2.取最高次方並去掉係數即是這份程式的時間複雜度例如:通常假設資料量為n,將所有步驟的數目相加後得到6n²+3n+2,最高次方為6n²,去掉係數後為n²,因此我們可以說該份程式的時間複雜度O(n²)。

常見的時間複雜度O(1)



請為這篇文章評分?