2017-01-28 20 views
-1

我試圖解決一個問題,我意識到我的解決方案的複雜性高於預期,因爲Insert對於List<T>是O(n)(來源:https://msdn.microsoft.com/en-us/library/sey5k5z4(v=vs.110).aspx)。C#.NET是否有任何滿足以下屬性的數據結構?

我想是一個數據結構等

  • 順序容器
  • 具有當元件是爲了
  • 比-O倍特(N)的索引
  • 在插入的作品二進制搜索方法
  • O(1),以獲得容器中的元件的數目
  • O(1)通過索引查找

換句話說,除了更快的插入之外,我想要一些類似List<T>的東西。

+0

[LinkedList ](https://msdn.microsoft.com/en-us/library/he2s3bh7(v = vs.110).aspx)? –

+0

@MatthewCawley我不認爲你可以通過索引在O(1)中用'LinkedList '訪問一個元素。例如。不能做'int median = LL [LL.Count/2];' – user7127000

+0

好吧,我不確定它是否符合所有標準,只是放在那裏討論。當它到達時,會熱切地看到答案...... –

回答

0

是否有可能在列表中出現重複項,或者您能否保證兩次不會看到相同的值?您是否需要指定索引,或者您是否期望事物基於項目的值進行排序?

如果您知道不會有重複項,或者您不希望在存在重複項時將值存儲兩次,並且您的索引完全基於根據項的值將項置於正確位置,那麼您可以看看SortedSet<T>類型。

如果可能有重複,但您想手動指定值,則可以查看SortedDictionary<TKey, TValue>,其中TKey值是您的整數索引。

如果你不能滿足這兩個條件之一,那麼你實現自己的類型就被卡住了。好消息是你不必從頭開始。 LinkedList<T>類型可以爲您帶來大部分途徑。

0

它不完全內置,但你可以嘗試。 Wintellect能量集合有BigList<T>這將完成這項工作。

https://powercollections.codeplex.com/

它具有以特定的索引快插入相比List<T>。我無法告訴你它的工作方式,但它保留了一些元素的偏移量,所以在內存方面它會更具有討厭性。

你也可以找到它作爲塊金包。

**編輯:**它具有O(log n)索引訪問,因爲@Ryan糾正了我。

+0

該庫中的'BigList '具有O(log n)索引訪問,而不是O(1)。 – Ryan

+0

感謝您的糾正,我無法找到關於wintellect中的數據結構的文檔,並且我已經回答了記憶。你有任何文件的網址,我記得有官方文件? –

+0

它在XML註釋文檔中。 Codeplex似乎沒有行號或支持鏈接到行,但它在https://powercollections.codeplex.com/SourceControl/latest#Source/PowerCollections/BigList.cs中提到。 – Ryan

相關問題