Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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#_Algorithm_Time Complexity - Fatal编程技术网

C# 时间复杂度评估?

C# 时间复杂度评估?,c#,algorithm,time-complexity,C#,Algorithm,Time Complexity,我已经在一个应用程序中实现了密码学和隐写术算法,并希望对这些算法进行时间复杂度评估。我不知道这些测试应该如何进行 是否有任何测试框架可以应用,或者如何进行这些测试?您正在处理位图中的像素,很难想出一个不会是O(n^2)的算法。您可以使用不同大小的位图运行计时测试,也可以使用Stopwatch类。像这样,不难计算的位图操作基本上受到RAM总线带宽的限制。如果不以智能方式(存储顺序)寻址像素,则cpu缓存的大小。当您增加位图大小时,性能突然从悬崖上跌落时,您就会知道缓存有问题。您可以对其进行单元测试

我已经在一个应用程序中实现了密码学和隐写术算法,并希望对这些算法进行时间复杂度评估。我不知道这些测试应该如何进行


是否有任何测试框架可以应用,或者如何进行这些测试?

您正在处理位图中的像素,很难想出一个不会是O(n^2)的算法。您可以使用不同大小的位图运行计时测试,也可以使用Stopwatch类。像这样,不难计算的位图操作基本上受到RAM总线带宽的限制。如果不以智能方式(存储顺序)寻址像素,则cpu缓存的大小。当您增加位图大小时,性能突然从悬崖上跌落时,您就会知道缓存有问题。

您可以对其进行单元测试。假设您有一个带有参数的方法,您可以计算不同输入大小所需的时间
n
。这样,您就可以计算出关于
n
的时间复杂度。这将是最简单的方法。不确定是否有任何框架可以为您实现自动化。

假设您不使用递归,您应该查看您的循环。通过检查来计算每个循环基于特定输入的迭代次数是相当简单的。时间复杂度是由嵌套循环运行次数的乘积给出的。如果有多组嵌套循环,请将它们全部添加在一起,这就是时间复杂性。例如:

for (int i=0; i<N; ++i)
{
    // Some constant time operation happens here
    for (int j=0; j<N; ++j)
    {
      // Some constant time operation happens here
    }
    // Some constant time operation happens here
} 

for(int i=0;iwhy静态分析不是一个选项?例如,看代码猜答案,我的朋友都这么做。这是推荐的测试方法吗?如果可能的话(实际上,我不知道有哪种算法不可能),它将为您提供真正有用的信息,例如时间复杂度的上限。如果您只是运行一些测试,您永远不会知道是否存在程序运行时间几乎无限长的情况:)