如何将理论效率与实践示例进行比较[关闭]
Posted
技术标签:
【中文标题】如何将理论效率与实践示例进行比较[关闭]【英文标题】:How to compare theoretic efficiency with practice examples [closed] 【发布时间】:2018-04-05 13:22:49 【问题描述】:我已经编写了一个 C++ 代码来解决一个特定的问题,并且我研究过效率(理论效率,大 O)。
我有兴趣将我计算出的效率与一些实际示例进行比较,测试我的算法,以查看我是否正确地进行了计算。
有什么办法吗?我应该得到执行时间吗?那么,我如何将它与我计算的那个 big-O 进行比较?
谢谢。
【问题讨论】:
提示:当n
加倍时,您期望与 O(n)
的算法的执行时间有什么区别?
您可能会发现这很有用:quick-bench.com。或者您可以编写自己的基准测试软件。
双倍?我不知道。它还取决于输入数据(至少在这个算法中)
@UnholySheep 我根本没想到它会翻倍。那里可能有一个不会改变的常数:P
@Yola 考虑k * n + m
,其中k
是一个小常数,m
是一个大常数。这是 O(n),但对于足够小的 n,将 n
加倍时的差异可以忽略不计。
【参考方案1】:
您应该使用不同大小的输入数据运行您的实现,并测量在这些大小上运行所需的时间。
假设您选择了大小 100、200、1000。假设您针对每个输入大小运行多次并计算平均值 - T100、T200、T1000。现在计算 T200/T100 并检查您的理论复杂度。它是否以相同的速度增长?例如。如果理论复杂度为 O(n),那么时间应该几乎翻倍。
【讨论】:
【参考方案2】:Google Benchmark can calculate asymptotic complexity(即 Big-O)为您服务。还有this Web 服务可以帮助您使用这个框架快速对代码进行基准测试。但是您显然应该考虑从后者请求多少计算。
【讨论】:
以上是关于如何将理论效率与实践示例进行比较[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将来自用户的输入图像与 C# 中数据库中存储的图像进行比较 [关闭]
您如何将基于 Scala 的 Web 服务器与其他 Web 框架进行比较? [关闭]