繁体   English   中英

从程序中获取时间复杂度和空间复杂度

[英]Getting Time Complexity and Space Complexity From a Program

我正在创建一个网站(我的学术项目),用户可以在其中上传他的程序文件(.cs,.PHP,.java),然后网络编译该程序并能够自动说出时间和空间的复杂性。 这可能吗? 我们如何计算程序的复杂度。 Java中是否有任何代码可以查找程序的复杂性? 还是我们可以从编译器本身中找到这些?

假设您知道为程序提供什么样的输入,则可以通过实际运行程序的连续迭代来估算复杂度。 但是,由于停止问题 ,一般情况下的静态分析是不可能的。

如果可以在各种大小的输入集上多次运行应用程序,则可以得出一个近似值。

在对数字进行排序的经典情况下,您可以让应用程序对2个数字进行排序,然后依次对4、8、16、32等进行排序,并从本质上绘制每次运行的内存和时间要求。 基本曲线拟合将向您显示复杂性的增长。

请注意,这并不是严格精确的,因为某些算法可能在某些方面会导致其性能发生根本变化。 这样的系统也可能会被“看起来”相似但具有极大不同特性(例如渐近曲线和对数曲线,或指数曲线和多项式曲线)的增长之间的差异所欺骗。

确定程序的时间和空间复杂度是一个难题。 正如反馈所指出的那样,通常甚至无法指出程序是否将终止。 (这被称为暂停问题

首先,我建议您研究一下Cyclomatic Complexity ,它是由GMetrics项目计算得出的。

这将使您开始探索主题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM