如何计算混合算法的 运行 时间?

How do i calculate the running time for a hybrid algorithm?

我有一个项目要编写混合算法并计算它的 运行 时间。

我编写了混合算法,其中有插入排序算法和合并排序算法,在用户输入未排序的数组后,程序将调用最合适的算法(可以是插入排序或合并排序)我指定的阈值,我的问题是如何计算此混合算法的 运行 时间?

因为我看到程序每次只能应用一种算法,以前有人这样做过吗?如果你知道这个名字,请告诉我,我可以搜索它。

(p.s。我拥有的是插入排序和归并排序的最基本形式“归并排序恰好有两半”所以它们具有典型的时间复杂度)

任何帮助将不胜感激。

Introsort 做的事情非常相似。如果您精心设计阈值,您可能会以 O(N log N) 运行 时间复杂度结束,这是基于比较的排序所能达到的最佳效果。

理论上,插入排序具有更好的最佳情况复杂度 O(N),因此对于最佳情况,您也可以达到这一点。但是,如果您的算法很简单

if input_size < threshold:
    insertion_sort(data)
else:
    merge_sort(data)

那么你就不会实现这个,因为对于大输入,你总是会使用合并排序。

通常,通过使用 非常具体 计算机在某些情况下可以做得更快的算法,完成这整个事情是为了在真实计算机上实现实际的恒定加速。如果我们只是从时间复杂度理论的角度来看这个问题,那么从合并排序切换到插入排序就没有多大意义,除非输入数据已经(大部分)排序了。另请注意,复杂性理论不考虑绝对 运行 次,而是考虑 运行 次与输入大小之间的关系。

您实际提高了多少性能(以及是否提高了性能)很难说,取决于很多因素。通常,您会希望正确地对您的算法进行基准测试,并简单地测量它的速度有多快。