2010-11-16 51 views
1

我有一個任務,可以編寫一個算法來查找動態排序數組中的重複項。我想寫這個算法,但在開始之前,我必須知道數據結構Dynamic Sorted Array,但我不知道它。我試圖用Google搜索,但找不到像Dynamic Sorted Array這樣的東西。你能指導我嗎?這是什麼數據結構以及它的外觀如何?謝謝。有助於瞭解數據結構

+0

是不是隻是一個自我排序的元素列表? – cdhowie 2010-11-16 20:48:23

回答

0

讓我們來看看,你需要了解一個動態有序數組是什麼:

你已經知道了一個有序數組是什麼,所以讓我們嘗試瞭解dynamic array是什麼:這是一個成長能夠數組,其中沒有限制陣列的大小。

因此,要總結,你需要寫一個數組是:
A.排序
B.動態的性質(擴大)

如何實現?閱讀Dynamic arrays overview and implementation in Java and C++

0

我認爲這意味着一個數組的長度是動態的(即在編譯時是未知的),並且其值被排序。

1

我認爲你的老師只是指一個可以改變和排序的數組,所以你可以假定它總是按照正確的順序,並且它的長度是可變的。如果算法是用僞代碼編寫的,那麼你可能需要知道所有這些。

0

我從來沒有聽說過的數據結構,而是基於個人的話我會猜測它:

  • 行爲就像一個數組,即用O(1)訪問操作get(index)set(index)
  • 如果需要,可以調整大小。
  • 總是排序。

我不認爲這樣的數據結構是非常有效的查找重複。我更喜歡某種地圖,除非你需要非常簡單的算法。

+1

爲什麼效率不高?一個地圖不允許重複,所以是的,這將是在返回0時最有效的。如果你的意思是使用它作爲中介來確定/找到重複,那麼是的,一個地圖將非常適合。 – nlucaroni 2010-11-16 21:16:40

+0

我將原始問題解釋爲*實現一個函數findAllDuplicates *。對於需要O(N)時間的簡單的基於陣列的實現。因此,我更喜歡基於地圖的方法,這種查找只需要一定的時間。基本思想是有兩個內部集合「計數」和「重複」,它們每次修改操作都會不斷更新。 – 2010-11-20 11:23:14

0

我會說你可能在你的任務中有一個錯字。它可能應該讀取「排序的動態數組」。

但是,總是按排序順序插入新項目的動態數組可能適合該術語。因此,需要動態數組:

[2] [5] [7] [9]

插入元件 '8' 將導致下面的陣列中:

[2] [5] [ 7] [8] [9]