Я ищу структуру данных (или структуры), которая позволила бы мне хранить упорядоченный список целых чисел, без дубликатов, с индексами и значениями в одном и том же ассортимент.Эффективная структура данных для быстрого произвольного доступа, поиска, вставки и удаления
мне нужно четыре основных операций, чтобы быть эффективными, в грубом порядке важности:
- принимает значение из заданного индекса
- найти индекс заданного значения
- вставив значения при данный индекс
- удаление значение по данному индексу
Использование массива у меня есть 1 в O (1), но 2 O (N) и вставка и удаление дороги (O (N) также, я считаю).
Связанный список имеет вставку и удаление O (1) (после того, как у вас есть узел), но 1 и 2 являются O (N), что отрицает выигрыш.
Я попытался сохранить два массива [index] = значение и b [значение] = индекс, который превращает 1 и 2 в O (1), но поворачивает 3 и 4 в еще более дорогостоящие операции.
Является ли структура данных более подходящей для этого?
Какой язык вы используете? –
Не имеет значения, но это C++ – Leonel
Это имеет значение; не все языки предлагают одни и те же структуры данных. Например, эта конкретная проблема может быть решена очень эффективно с помощью массива C Judy или C# CPTrie. (Или, конечно, какое-то сбалансированное двоичное дерево, как предложил Айман.) – Qwertie