hypergraphdb: как пройти все связи между двумя атомами? - PullRequest
2 голосов
/ 15 июня 2011

В настоящее время я работаю с HperGraphDB 1.1 под Java SE 1.6.

Я сохранил 3 атома на графике и создал несколько связей между ними. Когда я пересекаю график с помощью DefaultALGenerator, гиперграф возвращает для каждого атома, связанного с моим стартовым атомом, только 1 ссылку. Я думаю, что это происходит из-за реализации DefaultALGenerator, поскольку он помечает уже посещенные атомы, поэтому они не будут посещаться снова по другой ссылке.

Есть ли способ получить все ссылки между двумя атомами или я могу сохранить атом (или, возможно, другую ссылку на один и тот же атом) несколько раз под разными ручками?

Edit:

public class MyAtom { ... }
public class MyLink extends HGPlainLink { ... }

// initialisation somewhere else
HyperGraph hg = ...

// Create some atoms
MyAtom a = new MyAtom();
MyAtom b = new MyAtom();
MyAtom c = new MyAtom();

// Store the atoms
HGHandle handleA = hg.add(a);
HGHandle handleB = hg.add(b);
HGHandle handleC = hg.add(c);

// Create some links with additional information
hg.add(new MyLink(handleA, handleB, "First directed link from A to B"));
hg.add(new MyLink(handleA, handleB, "Second directed link from A to B"));

hg.add(new MyLink(handleB, handleC, "First directed link from B to C"));
hg.add(new MyLink(handleB, handleC, "Second directed link from B to C"));

// Traverse the graph
// I want to get all paths starting at A and ending in C
DefaultALGenerator alGen = new DefaultALGenerator(
                         hg, /* The graph */
                         null, /* No link predicate */
                         null, /* No atom predicate */
                         true, /* Traverse preceeding */
                         false, /* Don't traverse succeeding */
                         false); /* Use normal order */

HGDepthFirstTraversal traversal = new HGDepthFirstTraversal(
                                    handleC,    alGen);

while (traversal.hasNext()) {
    Pair current = traversal.next();

    HGLink l = (HGLink) hg.get((HGHandle) current.getFirst());
    Object atom = hg.get((HGHandle) current.getSecond());
    System.out.println(l + " -> " + atom);
}

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

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 15 июня 2011

Вам, вероятно, следует опубликовать некоторый код и более четкое описание того, что вы пытаетесь сделать, поскольку то, что вы, по-видимому, описываете, не совсем соответствует тому, как должен работать DefaultALGenerator. Но независимо от этого, SimpleALGenerator может лучше подходить для того, что вы пытаетесь сделать - вы пробовали это?

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