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

Java 从程序中获取时间复杂度和空间复杂度,java,compiler-construction,Java,Compiler Construction,我正在创建一个网站(我的学术项目),用户可以在其中上传他的程序文件(.cs、.PHP、.java),然后网络编译程序,并能够自动表示时间和空间复杂性。这可能吗?我们如何计算程序的复杂性。Java中是否有用于查找程序复杂性的代码?或者我们能从编译器本身找到这些吗 假设您知道给程序提供什么样的输入,您可以通过实际运行程序的连续迭代来估计复杂性。然而,由于以下原因,一般情况下不可能进行静态分析 如果可以在各种大小的输入集上多次运行应用程序,则可以开发近似值 在对数字进行排序的经典案例中,您可以让应用程

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

假设您知道给程序提供什么样的输入,您可以通过实际运行程序的连续迭代来估计复杂性。然而,由于以下原因,一般情况下不可能进行静态分析

如果可以在各种大小的输入集上多次运行应用程序,则可以开发近似值

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


请注意,这并不是严格准确的,因为某些算法的性能可能会发生根本性的变化。这样一个系统也可能会被“看起来”相似,但性质却截然不同的增长之间的差异所愚弄,例如渐近曲线和对数曲线,或指数曲线和多项式曲线。

假设您知道给程序提供什么样的输入,您可以通过实际运行程序的连续迭代来估计复杂性。然而,由于以下原因,一般情况下不可能进行静态分析

如果可以在各种大小的输入集上多次运行应用程序,则可以开发近似值

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


请注意,这并不是严格准确的,因为某些算法的性能可能会发生根本性的变化。这样一个系统也可能会被“看起来”相似,但性质截然不同的增长之间的差异所愚弄,例如渐近曲线和对数曲线,或指数曲线和多项式曲线。

确定程序的时间和空间复杂性是一个难题。正如反馈所指出的,通常甚至不可能指出一个程序是否会终止。(这被称为)

为了开始你的项目,我建议你看看哪个是由GMetrics项目计算的


这将使您开始探索主题。

确定程序的时间和空间复杂性是一个难题。正如反馈所指出的,通常甚至不可能指出一个程序是否会终止。(这被称为)

为了开始你的项目,我建议你看看哪个是由GMetrics项目计算的


这将让你开始探索主题。

你有没有问过你的导师这个问题?你在网上发现了什么?或者你想让人们来做你的家庭作业?甚至不可能计算一个给定的程序是否会终止。复杂性只有在你给出一些可能变化的参数时才能定义。您将不得不经历定义哪一个参数是好参数的障碍。有几种类型的时间复杂性(最坏情况,摊销)和空间复杂度(附加的,总体的,有时必须考虑栈)-并且其中一些需要严格的证明。这不是一个简单的问题,可能值得一个研究课题。你问过你的导师吗?你在网上发现了什么?或者你想让人们来做你的家庭作业?甚至不可能计算一个给定的程序是否会终止。复杂性只有在你给出一些可能变化的参数时才能定义。您将不得不经历定义哪一个参数是好参数的障碍。有几种类型的时间复杂性(最坏情况,摊销)和空间复杂度(附加的,总体的,有时必须考虑栈)-并且其中一些需要严格的证明。这并不是一个简单的问题,可能值得一个研究课题。好的建议从t=一个简单的算法开始,然后推进。。。即使他把后面的一切都搞砸了,也能救他的命!好的建议从t=一个简单的算法开始,然后前进。。。即使他把后面的一切都搞砸了,也能救他的命!