2010-09-21 3 views
1

Что является лучшими структурами данных для выполнения следующей операции быстроВставка и быстрый поиск

  • Вставить
  • Найти.

Благодаря Авинаш

+2

Это домашнее задание? В реальном мире ответ «это зависит». – 2010-09-21 14:09:16

+0

напрямую зависит от рационов вставок и находок; он также может зависеть от типа вставок и находок (может быть какая-то полезная корреляция в вставленных или запрошенных данных) – Unreason

+0

Нет домашней работы, я пытаюсь понять лучшую реализацию для списка сопоставлений графов. – Avinash

ответ

0

Хорошая реализация для списков смежности графа использует динамически выделенные векторы целых чисел.

Предположим, что на вашем графике имеется не более N узлов. Вы можете сохранить граф в массиве из N динамически выделенных векторов целых чисел. Это будет выглядеть следующим образом:

вектор [N]

Для вставки края от узла к узлу х у вы используете:

вектор [х] .С (у)

Это если граф разрежен (не имеет много ребер), вы можете быстро найти все исходящие края узла.

Если вы хотите найти, существует ли граница между x и y, вам нужно пройти через вектор [x] и выполнить поиск. Если вы хотите ускорить это, вы можете дополнительно использовать 2-мерный булевский массив, если число узлов невелико (менее 1000 - разумно).

Если у вас много узлов и вы хотите ускорить эту операцию, вы можете использовать хэш-карту.

3

Если же структура данных должна делать обе операции, то она должна быть hash map.

+0

Спасибо, я пытаюсь найти лучшую реализацию для списка адресов GRAPH. любые мысли – Avinash

+0

Существует эта библиотека BOOST C++ (http://en.wikipedia.org/wiki/Boost_Graph_Library) –

Смежные вопросы