Вопрос

Я рассматривающую реализацию структуры данных графика и глядя на представление «Список падения». Здесь есть краткое описание этого:

Список заболеваемости

Таким образом, в каждой вершине на графике хранится список тех краев, на которых это инцидент.

Учитывая, что мой график представляет собой направленный график, я не очень понятен из этого описания на пару очков:

  1. Сам график также хранит список всех краев?
  2. Вершины только хранят исходящие края или входящие и исходящие?
  3. Если оба, они в отдельных списках?

Я вполне знаком с другими представлениями графов (списком соседних, матрицей смесью, списком по краям, матрицей заболеваемости), поэтому это не вопрос о реализациях графика в целом, именно этот конкретный.

Любые указатели будут высоко оценены.

Это было полезно?

Решение 3

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

Арманд

Другие советы

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

Вы можете создать структуру графика списка заболеваемости, и вы также можете настроить ее для Digraphs.

Рассмотрим LinkedList<Vertex> объект и а LinkedList<Edge> объект. Это позволит вам повторить все ребра и все вершины, но не содержит никакой информации о том, как все подключено.

Скажем, мы добавляем, то несколько LinkedList<Connection> объекты. На самом деле, один для каждого Vertex. Отказ А. Connection просто где Edge и а Vertex Встретиться. Таким образом Edge будет два Connection Объекты (для неисправного графика) и Vertex будет иметь один LinkedList<Connection> объект, представляющий соединения с каждым Edge это связано с этим. По сути, это список заболеваемости.

Вы можете изменить это, чтобы представить диграф, если удалите некоторые из них Connection объекты. Более конкретно, вам придется выбрать, где не иметь этих ссылок. Вы можете удалить Connectionиз связанного LinkedList<Connection> Если вы не хотите видеть Edge из Vertex (Для примера выше, у N2 будет пустой LinkedList<Connection>). Возможно, вы можете сделать ссылки необязательными на Edge(Для примера выше, E1 будет иметь один Connection указывая на N2 и один Connection NULL, позволяя пересекать от E1 до N2, но не обратно на N1. Ваш выбор, как это реализовать, будет полностью зависит от вас. Один из них более интуитивно понятен - направлены края, поэтому удаление соединений по краям, чтобы определить, каким образом они идут, кажется логичным. Другой может показаться немного более сложным, но остановит вас без необходимости прыгать на края, которые нигде не ведут, когда сначала выполняют широту, и в первую очередь поиск глубины.

В точечной форме:

  1. В моих реализациях списка падения у меня есть. Вам нужно для вашей реализации?

  2. Строго говоря, вы могли бы получить, сохранив только исходящие края. Тем не менее, алгоритмы возврата могут выиграть от возможности отступить по ссылкам, которые они путешествовали. Вы можете реализовать вокруг этого, конечно, с какой -то историей, так что это, вероятно, не так уж и много.

  3. Если вы сделаете обоих, вам, вероятно, понадобится какой-то способ дифференцировать, будь то входящие или исходящие. Это, имея два LinkedList<Connection> объекты на вершине или имеющие boolean pointingToVertex примитивно Connection, или что -то еще. Может быть, твой Edge будет направлено, и не обращаются к краям два края указывают на противоположные пути. Соображения должны быть сделаны в зависимости от потребностей вашей структуры.

Я реализовал список падения следующим образом и не смог найти никаких проблем для Несреженные графики. Отказ Я также внедрил несколько алгоритмов топологии графика.

HashMap<VertexT, HashSet<EdgeT>> incidenceMap;

Используя карту наборов гарантии O (1) для поиска вершин и амортизированной сложности o (1) для вставки и удаления кромки. Сохранение списка падения ребра вместо соседнего списка вершин - это просто способ нести какой-то конкретную информацию самого края. Это также полезно для абстрактных алгоритмов, когда, например, вы связываете вес к краям.

РЕДАКТИРОВАТЬ:

Я обновил разговоры На Wikipedia для темы «Список падения».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top