Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试计算复杂性_C#_Visual Studio 2012_Mstest_Time Complexity - Fatal编程技术网

C# 测试计算复杂性

C# 测试计算复杂性,c#,visual-studio-2012,mstest,time-complexity,C#,Visual Studio 2012,Mstest,Time Complexity,假设我有一些代码,对我来说计算复杂性遵守一些(代数)上界是很重要的 例如,我可能有一个算法,当正确实现时在n^2中运行,但如果引入错误,则在n^3中运行。测试将检查该方法是否在n^2中实际运行,如果不是,则失败 我的问题是,是否可以通过MSTest来实现这一点 我可以看到,在引入一系列数学代码后,原则上可以将给定的方程与经验测量值相匹配,并/或尝试找到极限 或者,我想可能会生成带有最佳拟合的图形,然后询问人员测试是否通过 但这些都是现实的吗?是否进行过类似的测试?出于实际目的,可能无法进行此类测

假设我有一些代码,对我来说计算复杂性遵守一些(代数)上界是很重要的

例如,我可能有一个算法,当正确实现时在n^2中运行,但如果引入错误,则在n^3中运行。测试将检查该方法是否在n^2中实际运行,如果不是,则失败

我的问题是,是否可以通过MSTest来实现这一点

我可以看到,在引入一系列数学代码后,原则上可以将给定的方程与经验测量值相匹配,并/或尝试找到极限

或者,我想可能会生成带有最佳拟合的图形,然后询问人员测试是否通过


但这些都是现实的吗?是否进行过类似的测试?

出于实际目的,可能无法进行此类测试。如果您试图单独使用数学分析来比较两种算法,那么结果可能对实际用途没有用处。例如,您可能并不总是喜欢O(n2)而不是O(n3)算法。你必须考虑隐藏的常量。例如,从数学角度来看,具有O(1000000 n2)的算法仍然是O(n2)。但是这样的算法不会比数学上为O(n3)的O(10n3)算法更好,直到n的值大于100000。但很多时候,我们处理的输入大小可能远远小于此限制

首先,您需要能够插入代码,以便能够测量执行的操作数。例如,如果您正在测试排序算法,则可以在每次调用比较函数时增加一个计数器。对于其他情况,这可能并不容易,比如如果所讨论的操作是整数乘法

然后是“O(n^2)”所描述的问题。有些算法具有不同的最佳、最差和平均情况复杂度。如果这适用于你,你需要知道哪些输入导致了这些情况,并分别测试它们

如果要测试的是运行时是否为O(n^2),则很难验证。正如你们所知,big-O讨论了渐近复杂性,所以你们需要运行很长的测试,我想做一些曲线拟合,看看它是否能很好地近似于某个ax^2。如果你能对实际的复杂度有一个严格的限制似乎会更好,比如如果你知道当x>100时,操作的数量应该总是低于4x^2。然后选择一些数据点,包括一些相当大的数据点,并检查它们是否低于估计值。当然,这意味着您可能需要更新测试,以进行修改,从而改变系数,同时保持big-O复杂性不变,但老实说,这听起来是件好事