Codility第一课:算法复杂度
各种算法书的开篇大多是算法分析,而复杂度(complexity)又是最基本的分析指标。所以Codility的第一课也不例外,直入复杂度主题。这里不再详述其概念,而只提及复杂度的几个注意点:
- 复杂度不是程序运行时间的准确度量,而是数量级。
- 重点是找到主要因子操作(dominant operation),忽略常量以及数量级更低的项,可理解为求极限。
- 谁是dominant和有几个dominant都依赖于输入数据的规模,例如数据大小、矩阵大小或某个入参的值。
- 分析复杂度时,我们必须要看能使程序长时间运行的最坏情况。
常见的复杂度示例程序如下。值得注意的是,至此我们其实一直在讨论的是执行操作步数的数量级,即时间复杂度。对于空间复杂度(space complexity)来说,其实度量方法也都是一样的。如果你的代码中使用了常数个数的变量,那么空间复杂度就是O(1),如果你使用了长度相关于输入数据大小n的数组,那么你的空间复杂度就是O(n)。
Codility使用体验
Codility的课程简洁明了,而测验界面也是很简单易用的,可以选择各种编程语言,甚至题目也针对一些语言做了国际化。还可以*添加五个测试用例,检验你的代码是否能编译、运行通过。但复杂度和正确语法无从得知,确认好后提交即可。