2017-01-11 86 views
0

任何人都可以解釋下面描述的給定問題的方法如何在O(N)時間和O(1)空間中操作?以下方法的運行時間如何爲O(N)和空間複雜度爲O(1)?

問:鑑於2個有序陣列,找到共同的元素個數。數組長度相同,每個數組都有不同的元素。

採取以下2個陣列例如:

A: 13, 27, 35, 40, 49, 55, 59 
B: 17, 35, 39, 40, 55, 58, 60 
  1. 執行線性搜索在乙在B [0] = 17,在B停止[0] = A [0] = 13,開始17.未找到
  2. 不要在乙在B A [1] = 27開始的線性搜索[0] = 17,在B停止[1] = 35未找到
  3. 執行在B的線性搜索在B A [2] = 35開始[1] = 35,在B停止[1] = 35,發現
  4. 在b執行線性搜索在B A [3] = 40開始[2]39. =在停止B [3] = 40。發現
  5. 執行線性搜索在乙在B A [4] = 49開始[3] =中B 40停止[4] = 55,發現

我對我們正在做一個線性循環的部分感到困惑,該線性循環讓A的所有元素都已經產生O(N)時間,然後再次在B中進行線性搜索以找到元素。 B中的班輪搜索正在收集最後一個停止的地方。這不會使得給定方法O(N^2)的時間複雜性如何?如果不是,爲什麼?

+1

@JimMischel不行,你只能從你在上一步離開的地方進行搜索。在這個過程結束時,你將訪問A和B中的每個元素一次,即O(n)。並且輸入數據的大小從未包含在算法的空間要求中。 – biziclop

+1

啊,我讀得太快了。是的,這只是一種以不同方式表達的合併。 O(n),O(1)額外的空間。 –

+0

@JimMischel:那麼最好的情況下O(N)和最壞的情況下O(N^2)? – Milin

回答

5

這是Merge Algorithm一個變型中,除了輸出序列是被構造,並且您使用線性搜索,而不是在同一時間準備一個元件前進列表到下一個位置。

如果N是兩個列表中元素的總數量,合併是在時間和O(N)在空間O(N)。空間要求來自存儲輸出序列的需求,這是您的算法無法實現的。因此,您的算法在時間上保持O(N),並且在空間要求中變爲O(1)。

相關問題