求教:计算代码复杂度的算法是什么?

2014-05-29 15:23:27 +08:00
 karlxu
7901 次点击
所在节点    程序员
30 条回复
66450146
2014-05-30 02:17:43 +08:00
@lijinma 算法的时间复杂度跟代码本身没有任何关系,也不是由循环数量决定的。。。简单的可以数循环,复杂的就数不出来了
karlxu
2014-05-30 09:51:27 +08:00
@akfish 我们要用python做个统计代码复杂度的工具,难道就数if,while,for,try,catch,switch?会不会太简单了?
karlxu
2014-05-30 09:51:54 +08:00
@soundbbg 我们要用python做个统计代码复杂度的工具,难道就数if,while,for,try,catch,switch?会不会太简单了?
akfish
2014-05-30 10:23:29 +08:00
@karlxu 正经的方法是把编译器前端部分做出来,解析源代码生成AST(抽象语法树),剩下的事情就是一堆图算法去撸而已。
这部分的研究很成熟了,各种IDE高上洋的代码自动完成、重构、分析工具都是这样实现的。
karlxu
2014-05-30 11:19:16 +08:00
@akfish 好像挺难的。。。多谢你的建议。
akfish
2014-05-30 11:28:15 +08:00
@karlxu Parser有现成的可用,不用自己写
https://docs.python.org/2/library/ast.html
wecing
2014-06-01 04:04:22 +08:00
我只知道停机问题。
lijinma
2014-06-01 23:32:50 +08:00
@66450146 无语,我倒要问问你了,你写代码的时候,还写过估算不出时间复杂度的代码?

如果你真估算不出来,我还是建议你不要写这样的代码为好。
66450146
2014-06-02 00:36:01 +08:00
@lijinma 我不会先写代码再从代码来计算时间复杂度,我相信你也是的。。。比如说最优化问题,复杂度就要从这个问题的信息量和筛选(剪枝)的效率或者是DP的规模来推断,从这个角度上来说代码的循环数量和复杂度都是同一个原因的结果,而不能说代码是复杂度的原因,就算代码一行都没写,复杂度也丝毫不会受到影响,不知道这样说清楚不清楚。。。

如果只是简单的深搜广搜或者裸 DP,那当然是数数就好了。。。
lijinma
2014-06-02 02:18:13 +08:00
@66450146 恩,看来我们的观点是不矛盾的;

(1)我们自己写代码,肯定是先由算法,有时间复杂度,然后才有代码;

(2)但我们去看别人的代码,我们可以参考(我说的是参考,不一定完全依赖)别人代码中的循环等来估算别人的代码复杂度;

-。- 所以,我们说的是两个问题,不过你同意(2)的内容吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX