有三個大小爲n的數組a1,a2,a3。函數在這些數組中搜索公共數字。 算法是下一個:在3個數組中搜索常見數字的複雜性
foreach n in a1
if n is found in a2
if n is found in a3
return true
return false
我的猜測是最壞的情況將是下一個:A1和A2是相等的,A3不包含任何A1普通號。
在數組a1中迭代的複雜性將是O(i)。 搜索數組a2或a3的複雜性是f(n)(我們不知道它們是如何被搜索的)。 我的猜測,總體來說最壞情況的複雜性將是:
爲O(n)= N * F(N)* F(N)= N *(F(N))^ 2
有人告訴我,那是錯誤的。 那麼正確的答案是什麼?
如果每次都發現在a2中,該怎麼辦?那麼我們將在a3中搜索它,我們應該瞄準最糟糕的情況 –
@Akram Mellice:如果它每次都在a2中找到:'(f(n)+ f(n))= 2 * f(n)= O(f (n))'常數因子不包含在大O符號中。 – jfs
這個問題本身強調了單純依賴big-O的問題,因爲它排除了常量因素,因爲對於小數據樣本,如果它是「O(n)」,則O(n^4)'可以比'O(n)'更快真的是'K * O(n)',其中'K'是一個相當大的常量('K> = n^3'),我相信這就是他們在這個面試問題中真正測試你的知識。 – Seph