2011-09-24 69 views
0

從集合中訪問元素的最快方式是什麼?什麼是從集合中訪問元素的最快方式?

我想應該是在順序(從低到高):

索引數組< =索引的集合/列表字典

< =使用密鑰,但我不知道...

1)索引數組的速度與索引列表的速度相同嗎?

2)索引速度會隨着數組/列表大小的增長而增長嗎?

從我的理解...索引數組應該使用指針來指向元素的索引,這是由元素大小計算的。所以它應該與索引收集/列表的速度相同?

從我所知道的,如果我們使用Dictionary來查找一個值,獲取值的速度將隨着Dictionary的增長而增長。

3)我只是想知道從集合中訪問元素的最快方式是什麼?

一直納悶了很長一段時間是我的假設是正確的:)

感謝

+0

「長久以來一直在懷疑」現在有一個問題。 – BoltClock

+0

:p這就是爲什麼我現在要清理它 –

回答

2

在C#中,列表由數組支持,因此數組和列表/集合都可以通過在O(1)時間索引來訪問元素。字典的性能是相似的,因爲它是由散列表支持的。但是,應該注意的是,散列表上的訪問性能與散列函數的質量以及特定數據集中發生的衝突的數量有關。在C#中,每種類型都可以覆蓋GetHashCode(),這將確定散列函數以及因此在字典中訪問特定一組這樣的對象內的這樣的對象的性能。

+0

謝謝〜現在我明白了。但是數據集/數據表與散列表類似嗎?當我們將一列添加到數據表中時,他們實際上創建了一個用於訪問centain列的hashkey?即myDataTable.Columns [「MyColumn」] –

+1

並非所有的'O(1)'都是相同的:[Big-Oh](http://en.wikipedia.org/wiki/Big_O_notation)只談到漸近行爲 - 那裏在前面可能是一個*真的很大*'C':'C * O(...)'。 – 2011-09-24 05:44:45

+0

@陳陳:哈希表與數據表非常不同。數據表實際上是一個二維結構。訪問列不涉及散列鍵。散列表不是同一意義上的表,它只是一種稀疏的隨機數組。 –

2

通過密鑰與字典找到一個元素的攤銷成本爲O(1)或不變(見"Resizable hash tables and amortized analysis"爲CS基本面)。基礎數據結構不是數組或列表,而是散列表 - 給定適當的散列函數,訪問價值成本的速度不會隨着元素數量的增加而顯着增大(因此是恆定的),除非這些元素中的許多或大多數元素具有相同的哈希碼。

相關問題