我在C中编写了一些排序方法,我希望找到程序最佳的输入大小(即)分析每个算法。但是我该怎么做?我知道每种方法的时间,但我不知道如何找到“最佳”的大小。
答案 0 :(得分:3)
这取决于一些因素:
数据行为:您的数据是否已经部分排序?或者它是随机的?
数据大小:对于大输入(比如1千或更多),您可以确保O(N ^ 2)排序方法将丢失为O(N * log(N) )方法..
所以答案是通过经验运行你的程序,你可能会通过改变输入大小来处理一些真实的数据。
当输入大小为> X
时,较慢的方法(如O(N ^ 2))会被某种更快的方法(如O(N * log(N))打败)那么你可以说速度较慢对于输入大小<= X
,该方法'经验最优'(该值取决于输入数据的特征)。
答案 1 :(得分:1)
排序算法没有一个最佳的数字。
对于纯执行时间,几乎每种排序算法在一组2个数字上都是最快的,但在大多数情况下它没用。
某些排序算法可以在较小的数据集上更有效地工作,但这并不意味着它们在该大小上是“最优的”。
某些种类也可能更好地处理数据的其他特征。如果数据几乎已经排序,那么可以非常有效地进行各种排序,但如果不是这样,则可能非常慢。其他人将在给定大小的任何一组上运行相同的。
查看排序的大O(例如O(n ^ 2),O(n log n)等)以及排序具有的任何特殊属性(例如对近似排序的数据进行操作)更有用。
答案 2 :(得分:0)
要找到程序最佳的输入大小(我假设你的意思是最快的,或者排序算法需要最少的比较),你必须针对各种输入进行测试并绘制独立的轴图(输入大小)对依赖轴(运行时)并找到最小值。