Библиотека графов Guava ElementOrder на ребрах вместо узлов - PullRequest
0 голосов
/ 06 октября 2019

У меня есть эта прямолинейная Структура графика с использованием библиотеки графиков Guava , и я бы хотел лучше понять, возможно ли отсортировать adjacents/edges (не node заказ). Для пояснения:

import com.google.common.graph.ElementOrder;
import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph;

public class MyNodeTest {

    public static void main(String[] args) {
        MutableGraph<String> graph = GraphBuilder.undirected().nodeOrder(ElementOrder.insertion()).build();

        graph.addNode("A");
        graph.addNode("C");
        graph.addNode("D");
        graph.addNode("B");
        graph.addNode("E");

        graph.putEdge("A", "B");
        graph.putEdge("A", "C");
        graph.putEdge("A", "D");
        graph.putEdge("A", "E");

        System.out.println("My default Insertion.order Nodes: " + graph.nodes());
        System.out.println("Adj. Order that I couldn't understand: " + graph.adjacentNodes("A"));
        System.out.println("Successor. Order that I couldn't understand: " + graph.successors("A"));
        System.out.println("Pred. Order that I couldn't understand: " + graph.predecessors("A"));
    }
}

Мой результат:

My default Insertion.order Nodes: [A, C, D, B, E]
Adj. Order that I couldn't understand: [D, E, B, C]
Successor. Order that I couldn't understand: [D, E, B, C]
Pred. Order that I couldn't understand: [D, E, B, C]

Без дальнейших церемоний я имею в виду:

Использование .nodeOrder(ElementOrder.insertion()) возможносортировать сами узлы. Тем не менее, я больше интересуюсь сортировкой edges, связанной с данным node, таким образом, чтобы, если бы я использовал putEdge соответственно из A с B, C, D, E, результат был бы именно таким, а не показанным выше,

Есть идеи?

Заранее спасибо.

1 Ответ

0 голосов
/ 15 октября 2019

В случае, если кто-то сталкивается с тем же вопросом, вот как я решил его (отказ от ответственности: не оптимальное, а рабочее решение).

    MutableNetwork<String, UUID> graph = NetworkBuilder.undirected().edgeOrder(ElementOrder.insertion()).build();

    graph.addNode("A");
    graph.addNode("C");
    graph.addNode("D");
    graph.addNode("B");
    graph.addNode("E");

    graph.addEdge("A", "B", UUID.randomUUID());
    graph.addEdge("A", "C", UUID.randomUUID());
    graph.addEdge("A", "D", UUID.randomUUID());
    graph.addEdge("A", "E", UUID.randomUUID());

    System.out.println("My default Insertion.order Nodes: " + graph.nodes());
    System.out.println("Adj. Order that I couldn't understand: " + graph.adjacentNodes("A"));
    System.out.println("Successor. Order that I couldn't understand: " + graph.successors("A"));
    System.out.println("Pred. Order that I couldn't understand: " + graph.predecessors("A"));

И результаты:

My default Insertion.order Nodes: [A, C, D, B, E]
Adj. Order that I couldn't understand: [B, C, D, E]
Successor. Order that I couldn't understand: [B, C, D, E]
Pred. Order that I couldn't understand: [B, C, D, E]

У MutableNetwork есть .edgeOrder(ElementOrder.insertion()), который добивается цели. Минусы здесь связаны с K,V, необходимым для создания этой структуры данных.

С уважением

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