2012-01-03 55 views
0

我需要比較兩個不同大小的int數組。在O(N * log(N))時間比較兩個不同大小的int數組?

它必須是最高效的。

是否可以在O(N * log(N))時間內做?

它應該打印兩個數組之間不同的整數。

+0

將數組作爲參數傳遞給函數時,數組衰減爲指針,因此如果不想發生壞事情,則需要顯式的'size'參數。 – moshbear 2012-01-03 17:47:34

+0

那麼,你面臨的問題是什麼? – 2012-01-03 17:49:19

+0

我不知道如何比較2 dffrent大小陣列之一是大於那麼其他和我不知道在哪裏以及如何停止比較 – Blondy21 2012-01-03 17:56:35

回答

1

算法是O(n),但您假定數組大小相同,每個數組的大小爲ARY_SIZE

我不會爲你解決整個作業,但是我建議你從下面的函數頭開始:int compar2arr(int arrA[], int arrA_size, int arrB[], int arrB_size)

請記住,對於函數參數int arrA[]僅等價於int* arrA。如基思和塞巴斯蒂安所指出的,arrA_size != arrB_size意味着不同(除非任務的作者以其他方式定義它)。所以你在開始時檢查並返回false如果它成立。

編輯

好吧,我重新看了你的帖子,似乎你只是需要顯示所有不等於元素,你不知道如何處理這樣的事實,他們是不同的尺寸。

因此,我建議先從以下內容:

int compar2arr(int arrA[], int arrA_size, int arrB[], int arrB_size) 
{ 
    int smaller_size = // arrA_size or arrB size, the smaller one; 
    int higher_size = // arrA_size or arrB size, the higher one; 
    int *bigger_array; 
    int i;  
    int result = true; 

    if (arrA_size > arrB_size) 
     bigger_array = arrA; 
    else 
     bigger_array = arrB; 

    for (i = 0; i < smaller_size; i++) 
    { 
     if (/* i-th elements are not(!!) equal */) 
     { 
     result = false; 
     // print the values to be different 
     } 
    } 

    if (smaller_size != higher_size) 
    result = false; 

    for (i = smaller_size; i < higher_size; i++) 
    { 
     // print bigger_array[i] 
    } 

    return result; 
} 

我相信你能拿出實際的代碼替換註釋。 這不是最簡潔的書寫方式,而是想讓它易於理解。無論如何,計算複雜度是O(n),儘可能好。

+0

其不測試其測試之前:(我知道我的代碼是壞的,但我不知道在哪裏和如何停止比較,因爲一個數組比另一個大 – Blondy21 2012-01-03 17:55:33

+2

如果它們的大小不同,它們是不同的;首先比較它們的大小,如果它們不同,則不要打擾比較元素。(我假設你對「不同」的定義;如果這個假設是不正確的,你需要告訴我們。) – 2012-01-03 17:59:14

+0

我誤解了這個問題:(它必須是O(nlogn):(((( – Blondy21 2012-01-03 19:28:26

1

如果兩個數組的大小不同,則它們已經不同,不需要比較內容,只是大小。

+0

他們沒有排序我需要打印只有不同的元素 – Blondy21 2012-01-03 17:59:36

1

如果您只需要打印不同的元素,則在0(n)時間內不可能。解決問題的最好方法是對兩個數組進行排序(使用qsort),然後從零循環到兩個數組大小中較小的一個。

此外,如果您嘗試打印所有不匹配的整數,則在達到第一個不同的整數時無法中斷。你想要做的是在每次找到不匹配的元素時打印出「%d在%d處與%d不匹配」或類似的東西。

最後,如果大小不相等,我會遍歷較長數組的最後一部分並打印出額外的元素。

+0

我需要NLOGN - 我被誤認爲 – Blondy21 2012-01-03 19:40:50

+0

什麼樣的排序? – Blondy21 2012-01-03 19:56:00

+0

qsort是nlogn,你不必實現它。看看qsort的mang頁面:http: //linux.die.net/man/3/qsort – dbeer 2012-01-03 21:07:48

相關問題