Полезная структура данных для следующего случая - PullRequest
0 голосов
/ 16 мая 2011

Которые могут быть лучшими структурами данных для следующего случая.

1. Должны иметь такие операции, как поиск, вставка и удаление.В основном это будут поисковые операции. Около 90% операций будут выполнять поиск, а остальные будут удалены и вставлены.

2 Вставка, удаление и поиск будут основаны на ключе объектов.Каждый ключ будет указывать на объект.Ключи будут отсортированы.

Любые предложения по оптимальной структуре данных будут высоко оценены.

Ответы [ 5 ]

1 голос
/ 17 мая 2011

Вы хотите Древовидную Карту;в основном вам просто нужно дерево, в котором узлы сортируются динамически («самоуравновешенными») по ключам, а ваши объекты свисают с каждого узла с соответствующим ключом.

Если вы хотите «оптимальную» структуру данных, это полностью зависит от распределения шаблонов входов, которые вы ожидаете.Хорошая вещь в самобалансирующемся дереве заключается в том, что вам не нужно особо заботиться о структуре входов.Если вы действительно хотите, чтобы наилучшее предположение было как можно ближе к оптимальному, насколько нам известно, и вы не очень много знаете о конкретных последовательностях запросов, вы можете использовать http://en.wikipedia.org/wiki/Tango_tree, равное O(log(log(N))-конкурентный.Это растет настолько медленно, что для всех практических целей у вас есть что-то, что работает не хуже чем эффективный постоянный фактор из наилучшей возможной структуры данных, которую вы могли бы выбрать.

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

Python: https://github.com/pgrafov/python-avl-tree/

Java: если вы просто Java, просто используйте TreeMap (красно-черное дерево на основе) и игнорировать детали реализации.Большинство языков имеют схожие структуры данных в своих стандартных библиотеках.

1 голос
/ 16 мая 2011

Я предполагаю, что вы хотите оптимизировать время.В целом, красно-черное дерево будет иметь логарифмическую производительность по всем трем операциям.Вероятно, это будет ваша лучшая общая ставка на время исполнения;однако красно-черные деревья сложны для реализации и требуют структуры узла, то есть они будут храниться с использованием большего объема памяти, чем требуется для самих содержащихся данных.

1 голос
/ 16 мая 2011

Не уверен, что вы подразумеваете под "структурами данных"

Я бы предложил MySQL . Подробнее здесь: WikiPedia

1 голос
/ 16 мая 2011

Самобалансирующееся дерево сортов (AVL, RB) или хеш-таблица.

1 голос
/ 16 мая 2011

AVL-дерево или, по крайней мере, BST.

Если вы хотите часто получать доступ к одним и тем же элементам, вам также может понадобиться использовать Splay-деревья.

(Должен ли я объяснить, почему?)

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