用Codility測試你的編碼能力

2021-06-28 07:27:22 字數 1307 閱讀 9513

沒有巨集觀的架構設計,沒有特定的框架語言。在

codility

提出的一些小問題上,用最純粹的方式測試你最基本的編碼能力。

codility第一課:演算法複雜度

各種演算法書的開篇大多是演算法分析,而

複雜度(complexity)又是最基本的分析指標。所以

codility的第一課也不例外,直入複雜度主題。這裡不再詳述其概念,而只提及複雜度的幾個注意點:

複雜度不是程式執行時間的準確度量,而是數量級。

重點是找到主要因子操作

(dominant operation)

,忽略常量以及數量級更低的項,可理解為求極限。

誰是dominant和有幾個dominant都依賴於輸入資料的規模,例如資料大小、矩陣大小或某個入參的值。

分析複雜度時,我們必須要看能使程式長時間執行的最壞情況。

例如,下面的源程式中,

dominant就是第四行的操作,

它會隨著入參n的不同而反覆執行多次。於是程式的總算子可能是c*n + a。但前面說過,我們會

忽略常量只看數量級。因此,這段**的複雜度就是o(n)。在不同的編譯器或硬體平台上,具體執行時間會各不相同,可能是20*n + 1,也可能是½*n + 3,但絕不可能是n²。另外,若迴圈體內有跳出條件那麼程式可能會提前終止,但我們說過,複雜度

必須看最壞情況。至此,上面列舉四點已都符合。

常見的複雜度示例程式如下。值得注意的是,至此我們其實一直在討論的是執行操作步數的數量級,即時間複雜度。對於空間複雜度(space complexity)

來說,其實度量方法也都是一樣的。如果你的**中使用了常數個數的變數,那麼空間複雜度就是o(1),如果你使用了長度相關於輸入資料大小n的陣列,那麼你的空間複雜度就是o(n)。

codility使用體驗

codility的課程簡潔明瞭,而測驗介面也是很簡單易用的,可以選擇各種程式語言,甚至題目也針對一些語言做了國際化。還可以自由新增五個測試用例,檢驗你的**是否能編譯、執行通過。但複雜度和正確語法無從得知,確認好後提交即可。

用Stopwatch類來測試你的程式執行時間

上個月在專案中,由於我做的網頁後台計算步驟多,執行時間長,成了棘手問題,如此一來就要優化效能,找出瓶頸,重構 同事當時的建議是使用時間戳 timespan 後來乙個同事用的是診斷模式裡面乙個計時方法,現在看來都很彆扭,因為要 把時間減來減去,感覺不方便,不好用.今天我偶然的發現了stopwatch這...

武裝你的測試

武裝你的測試 陳能技2007 8 23 原文 boost your testing super powers secret tools to add to your utility belt james bach 當我還是3歲的時候,我最喜歡的 片是 the fantastic four 當我的媽媽...

用Script Encoder加密你的ASP頁面

用script encoder加密你的asp頁面 一直以來,asp技術受到了越來越多朋友的喜愛,使用asp從事web開發的人也越來越多。asp乙個非常明顯的特徵是頁面在伺服器端經過處理之後傳送到瀏覽器中的內容為標準的html格式,這樣有效的保護了頁面程式的原 不被客戶端輕易獲取。但是另乙個普遍存在的...