Создание быстрого словаря

0

Для школьной задачи я должен создать график и сделать с ним кое-что. На входе каждая вершина имеет идентификатор, который является номером 0-999'999'999. Поскольку я не могу создать массив так долго, я не могу использовать этот идентификатор в качестве ключа в матрице смежности. Моим первым решением было создать отдельный идентификатор, который является произвольным исходным, и сохранить его в каком-то словаре/карте, но поскольку я получаю 10 000 записей вершин, поиск, вероятно, будет медленным. Алгоритм должен быть под O (n ^ 2), и у меня уже есть BFS и топопорт. Что было бы лучшим решением в этом случае? В качестве побочного примечания - я не могу использовать уже установленные библиотеки (поэтому я не могу использовать граф, карту, вектор, классы строк и т.д.), Но я могу сам их кодировать, если это лучший вариант.

  • 0
    мне кажется, что задание - научить вас этим структурам данных, создав их самостоятельно. Вы узнали о хеш-таблицах? AVL / Красно-Черные деревья?
  • 0
    Нет, мы не узнали о хеш-таблицах, но это не точка назначения. Тема для этого - Графики (топосорт, BFS, DFS, DAG и т. Д.). Я мог бы сделать двоичное дерево для поиска, но мне просто интересно, если это лучшее решение (кажется, слишком сложным)
Показать ещё 3 комментария
Теги:
performance
algorithm
dictionary
graph

2 ответа

1
Лучший ответ

Вы хотите, чтобы бинарное дерево поиска выполняло поиск в O(logn) или хеш-карте, чтобы выполнять поиск в ~O(1) раз, или вы можете пойти с маршрутом массива, и в этом случае размер вашего массива будет равен максимальное значение, которое может иметь ваш идентификатор (в вашем случае 10^9).

Как сказал @amit, проверьте деревья AVL/Red-Black и хеш-карты. Нет лучшего способа сделать поиск в графе ниже O(n) если вы не можете изменить топологию графика, чтобы превратить его в "график поиска".

0

Зачем вам нужно создать массив размером 1 миллиард. Вы можете просто создать матрицу смежности или список смежности количества узлов.

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

Изображение 174551

Рассмотрим этот график, вы действительно думаете, что вам нужно иметь 10 ^ 10 элементов в списке смежности вместо 4 элементов?

  • 0
    Проблема в том, что если у меня есть 10 вершин, в массиве их идентификаторы 1-10, но в каждой вершине смежные единицы показаны, например, как 89777371 и 13876873, которые я должен перевести на 1-10. Для каждой вершины это занимает время. С массивом размером 1 миллиард я бы сразу узнал, где находится конкретная вершина.
  • 0
    Почему, если имя вершины было 10-значной строкой? Вам нужно использовать 26 ^ 10 строк для матрицы? Каждый список смежности узлов имеет value а next , внутри значения вы скажете 89777371 а значением следующего элемента будет 13876873 , поэтому нет необходимости в отображении.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню