2016-02-26 34 views

回答

1

這是我所做的。有兩個有log(n)和n個元素的排序數組。你需要找到兩者共同的要素。

您可以迭代X和Y的每個元素的二進制搜索。如果搜索成功,則打印該元素。那將在f(x)= c *(log(n))^ 2時間,其中c是一些常數。對於每個k> 0,您可以找到一個常數a,使得所有x> a都成立,所以這個解決方案是o(sqrt(n))。

編輯:這裏是僞代碼(很簡單):

input X 
input Y 
n = number of elements in Y 
for i = 0 to n: 
    if(binary_search(X[i] in Y) = found)print X[i] 
+0

非常感謝您的解釋。請問我可否告訴我psuedocode? – Jon

+0

我添加了僞代碼。它非常簡單。希望能幫助到你。 –

+0

這很有幫助 – Jon

1

對於Shikhar的古普塔的解決方案,我有一個改進。 Shikhar的解決方案並沒有利用X進行排序的事實。因此,通過每次迭代,我們都可以減少Y的更低或更高的邊界。這也可以減少運行時間。爲了證明O((log(n))^ 2)< O(sqrt(n)),我們只需要證明第一個的導數小於第二個。這意味着2log(n)/n < 1/sqrt(n)。那麼我們必須證明log(n)< sqrt(n)。這非常棘手。

+0

非常豐富謝謝先生。 –

相關問題