我在应用程序中实现了加密和隐写算法,并希望对这些算法进行时间复杂度评估。我不知道应该如何进行这些测试。
我是否可以应用任何测试框架或如何进行这些测试?
答案 0 :(得分:2)
假设你没有使用递归,你应该看看你的循环。通过检查每个循环基于特定输入迭代的次数来计算是相当简单的。时间复杂度由嵌套循环运行次数的乘积给出。如果您有多组嵌套循环,请将它们全部添加在一起,这就是时间复杂度。例如:
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
}
该循环将在O(N)+ O(N 2 )= O(N + N 2 )= O(N 2 )时间,因为循环的外部恒定时间部分在O(N)时间内执行,而内部部分在O(N)* O(N)= O(N 2 中执行)。
如果你正在使用递归,那么分析起来就有点难了,但它归结为同样的事情......计算代码的常量时间部分执行的次数。建议您阅读一本关于算法分析的书(This one几乎是该主题的标准),这将有助于您了解如何最好地分析其他算法。
答案 1 :(得分:0)
你正在操纵位图中的像素,很难想出一个不会是O(n ^ 2)的算法。您可以使用各种大小的位图运行计时测试,使用Stopwatch类。像这样在计算上不难的位图操作从根本上受RAM总线带宽的限制。如果你没有以智能方式(存储顺序)解决像素,那么cpu缓存的大小。当增加位图大小时,当突然从悬崖上掉下来时,你会发现你有缓存问题。
答案 2 :(得分:0)
你可以对它进行单元测试。假设您有一个带参数的方法,您可以计算不同输入大小n
所需的时间。这样,您就可以计算n
的时间复杂度。这将是最简单的方法。不确定任何可以为你自动化的框架。