簡體   English   中英

在小於O(n)比較中找到3個最小元素的時間復雜度

[英]Time complexity of finding 3 smallest elements in less than O(n) comparisons

關於確定2種算法的時間復雜度,我有2個問題。

問題1

使用比較確定一組n個 不同數字中的最小3個數字。

  1. 可以使用O(log 2 n)比較來確定這3個元素。
  2. O(log 2 n)不夠,但可以使用n + O(1)比較來確定它們。
  3. n + O(1)是不夠的,但是可以使用n + O(logn)比較來確定它們。
  4. n + O(logn)不夠,但可以使用O(n)比較來確定它們。
  5. 以上都不是。

在這里,我想它的方式是采取3個變量(如:分1,MIN 23,其中MIN 1是最小和最小值,3是最大的,這些3),與第1 3個元素初始化它們列表並掃描列表一次。 對於列表中的每個數字x,我們有以下4種情況:

  1. 如果 x <最小1 那么 ,最小3 =最小2 ; 最小2 =最小1 ; 最小1 = x;
  2. 否則如果 Min 1 <x <Min 2 Min 3 = Min 2 ; 最小2 = x;
  3. 否則如果 Min 2 <x <Min 3 Min 3 = x;
  4. 否則如果 Min 3 <x 那么什么也不做

所以,基本上它在最壞的情況下需要3n比較, 在最好的情況下需要0比較

如果可以以更簡單(更少時間限制)的方式完成,請糾正我。 實際上我對選項34感到困惑。

問題2

使用比較從一組n個 不同數字中確定最小和最大數字。

  1. 這兩個元素可以使用O(log 100 n)比較來確定。
  2. O(log 100 n)不夠,但可以使用n + O(logn)比較來確定它們。
  3. N + O(logn)時間是不夠的,但是它們可以使用3.⌈N / 2⌉比較來確定。
  4. 3.⌈n / 2 是不夠的,但它們也可以使用2(N-1)的比較來確定。
  5. 以上都不是。

像以前一樣使用類似的參數我得出了答案2(n-1) 雖然我仍然對選項24感到困惑。

問題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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM