Логарифмическое время C # list - PullRequest
4 голосов
/ 08 октября 2011

Существует ли реализация для .NET коллекции списков, в которой операции вставки и поиска являются операциями O (log (n)) в худшем случае?Метод по умолчанию System.Collections.Generic.List ' Insert ' является операцией O (n).

Под коллекцией списков я имею в виду массивоподобныйрасширяемая структура данных.Под «поиском» я подразумеваю доступ по индексу.

Я подозреваю, что это можно сделать с помощью сбалансированных деревьев, но реализовать его будет нетривиально.

Ответы [ 4 ]

4 голосов
/ 08 октября 2011

Я не знаю о реализации .NET, но структура данных, которая могла бы работать на вас, - это индексируемый пропускаемый список.Он имеет аналогичную производительность O (LG N), как сбалансированное двоичное дерево, но концептуально больше похож на связанный список.

http://en.wikipedia.org/wiki/Skip_list

Я не думаю, что было бы слишком сложно написатьодин в C #.

1 голос
/ 08 октября 2011

C5 TreeSet должен дать вам красно-черную реализацию с этими характеристиками, включая индексный доступ.

0 голосов
/ 08 октября 2011

Не знаю, существует ли в .net framework, но вы можете реализовать aa tree insert и search - O (log n).

0 голосов
/ 08 октября 2011

Нет никакого возможного решения для этого, если вам нужно получить доступ к полям, используя их индекс. Вы можете использовать SortedList, но затем вы получите O (n), или вы можете использовать SortedDictionary, но тогда вы потеряете подобный массиву доступ (по индексу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...