[英]Time complexity of finding 3 smallest elements in less than O(n) comparisons
關於確定2種算法的時間復雜度,我有2個問題。
使用比較確定一組n個 不同數字中的最小3個數字。
在這里,我想它的方式是采取3個變量(如:分1,MIN 2分3,其中MIN 1是最小和最小值,3是最大的,這些3),與第1 個 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)中完成,然后將較小值與當前最小值進行比較,將較大值與當前最大值進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.