dib*_*ndu 5 algorithm big-o time-complexity
关于确定2种算法的时间复杂度,我有2个问题.
使用比较确定一组n个 不同数字中的最小3个数字.
在这里,我想它的方式是采取3个变量(如:MIN 1,MIN 2和MIN 3,其中MIN 1是最小和最小值,3是最大的,这些3),与1个初始化它们ST的3个要素列表并扫描列表一次.对于列表中的每个数字x,我们有以下4种情况:
- 如果 x <最小1 那么,最小3 =最小2 ; 最小2 =最小1 ; 最小1 = x;
- 否则如果 Min 1 <x <Min 2 则 Min 3 = Min 2 ; 最小2 = x;
- 否则如果 Min 2 <x <Min 3 则 Min 3 = x;
- 否则如果 Min 3 <x 那么,什么也不做
所以,基本上它会要求在最坏的情况下3N比较,并在最好的情况下0比.
如果可以以更简单(更少时间限制)的方式完成,请纠正我.实际上我对选项3和4感到困惑.
使用比较从一组n个 不同数字中确定最小和最大数字.
像以前一样使用类似的参数我得出了答案2(n-1).虽然我仍然对选项2和4感到困惑.
问题 1:您可以通过首先与 MIN2 进行比较来将算法改进为 2n 次比较。这仍然是 O(n)。要看出 n+O(1) 还不够,请注意有 n*(n-1)*(n-2) 种可能性,其中 MIN1、MIN2 和 MIN3 位于其中。取以 2 为底的对数以获得所需比较次数的下限。
问题 2:这可以在 3*ceil(n/2) 中完成,方法是比较两个连续的元素,然后将较小的元素与当前的最小值进行比较,将较大的元素与当前的最大值进行比较。