Pergunta

Alguém já teve boas experiências com alguma biblioteca Java para algoritmos Graph.eu tentei JGraph e achei ok, e há muitos diferentes no Google.Há algum que as pessoas estejam realmente usando com sucesso no código de produção ou que recomendariam?

Para esclarecer, não estou procurando uma biblioteca que produza gráficos/tabelas, estou procurando uma que ajude com algoritmos de gráfico, por exemplo, árvore geradora mínima, algoritmo de Kruskal, nós, arestas, etc.Idealmente, um com alguns bons algoritmos/estruturas de dados em uma bela API Java OO.

Foi útil?

Solução

Se você estava usando JGraph, você deveria tentar JGraphT que é projetado para algoritmos.Uma de suas funcionalidades é a visualização utilizando a biblioteca JGraph.Ainda está desenvolvido, mas bastante estável.Analisei a complexidade dos algoritmos JGraphT há algum tempo.Alguns deles não são os mais rápidos, mas se você pretende implementá-los sozinho e precisa exibir seu gráfico, essa pode ser a melhor escolha.Gostei muito de usar sua API, quando rapidamente tive que escrever um aplicativo que funcionasse em gráfico e exibi-lo posteriormente.

Outras dicas

Resumo:

Confira JGraphT para uma biblioteca de gráficos Java muito simples e poderosa que é muito bem feita e, para dissipar qualquer confusão, é diferente do JGraph.Alguns Código de amostra:

UndirectedGraph<String, DefaultEdge> g =
        new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    String v1 = "v1";
    String v2 = "v2";
    String v3 = "v3";
    String v4 = "v4";

    // add the vertices
    g.addVertex(v1);
    g.addVertex(v2);
    g.addVertex(v3);
    g.addVertex(v4);

    // add edges to create a circuit
    g.addEdge(v1, v2);
    g.addEdge(v2, v3);
    g.addEdge(v3, v4);
    g.addEdge(v4, v1);

JUNGO é uma boa opção para visualização e também possui um conjunto bastante bom de algoritmos gráficos disponíveis, incluindo vários mecanismos diferentes para criação aleatória de gráficos, religação, etc.Também descobri que geralmente é bastante fácil estender e adaptar quando necessário.

Ofertas do Apache Commons gráfico comum.Sob http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ pode-se inspecionar a fonte.O exemplo de uso da API é no SVN, também.Ver https://issues.apache.org/jira/browse/SANDBOX-458 para uma lista de algoritmos implementados, também comparados com Jung, GraphT, Prefuse, jBPT

Google Goiaba se você precisar apenas de boas estruturas de dados.

JGraphT é uma biblioteca de gráficos com muitos algoritmos implementados e possuindo (na minha opinião) um bom modelo de gráfico. Exemplo de Olá Mundo.Licença:LGPL+EPL.

JUNG2 também é uma biblioteca licenciada por BSD com estrutura de dados semelhante ao JGraphT.Ele oferece algoritmos de layout, que atualmente faltam no JGraphT.O commit mais recente é de 2010 e os pacotes hep.aida.* são LGPL (através do biblioteca colt, qual é importado pela JUNG).Isto impede que o JUNG seja utilizado em projectos sob a égide da ASF e do FSE.Talvez devêssemos usar o garfo do github e remova essa dependência. Confirmar f4ca0cd está espelhando o último commit do CVS.Os commits atuais parecem remover a funcionalidade de visualização. Confirmar d0fb491c adiciona um .gitignore.

Prefácio armazena os gráficos usando uma estrutura matricial, que não é eficiente em termos de memória para gráficos esparsos.Licença:BSD

Entusiasmo do Eclipse possui algoritmos de layout de gráfico integrados, que podem ser usados ​​independentemente do SWT.Ver org.eclipse.zest.layouts.algorithms.A estrutura gráfica utilizada é a de Eclipse Draw2d, onde Nós são objetos explícitos e não injetado via Generics (como acontece no Apache Commons Graph, JGraphT e JUNG2).

http://neo4j.org/ é um banco de dados gráfico que contém muitos algoritmos gráficos e tem escala melhor do que a maioria das bibliotecas na memória.

Em um projeto universitário, brinquei com yFiles de yTrabalha e descobri que tinha uma API muito boa.

Confira Plantas:

Blueprints é uma coleção de interfaces, implementações, implementações e suítes de testes para o modelo de dados de gráfico de propriedades.Blueprints é análogo ao JDBC, mas para bancos de dados gráficos.Dentro da pilha de software de código aberto TinkerPop, o Blueprints serve como tecnologia fundamental para:

Tubos:Uma estrutura de fluxo de dados preguiçosa

Gremlin:Uma linguagem de travessia de gráficos

Molduras:Um mapeador objeto-gráfico

Forno:Um pacote de algoritmos gráficos

Rexster:Um servidor gráfico

http://incubator.apache.org/hama/ é um pacote científico distribuído no Hadoop para dados massivos de matrizes e gráficos.

JDSL (Biblioteca de Estruturas de Dados em Java) deve ser bom o suficiente se você gosta de algoritmos gráficos - http://www.cs.brown.edu/cgc/jdsl/

Para visualização, nosso grupo teve algum sucesso com prefundir.Nós o estendemos para lidar com placas arquitetônicas e diagramas de bolhas, e ele não reclamou muito.Eles também lançaram um novo kit de ferramentas Flex chamado Flare que usa uma API muito semelhante.

ATUALIZAR:Eu teria que concordar com o comentário, acabamos escrevendo muitas funcionalidades personalizadas/trabalhando em torno das limitações de pré-fusão.Não posso dizer que começar do zero teria sido melhor, pois fomos capazes de demonstrar o progresso desde o primeiro dia usando o prefuse.Por outro lado, se estivéssemos fazendo uma segunda implementação do mesmo material, eu poderia pular o prefuse, pois entenderíamos os requisitos muito melhor.

Experimente o Annas, é um pacote gráfico de código aberto que é fácil de usar

http://annas.googlecode.com

Também é bom estar convencido de que um gráfico pode ser representado de forma tão simples quanto:

class Node {
   int value;
   List<Node> adj;
}

e implemente sozinho a maioria dos algoritmos que você achar interessantes.Se você se deparar com essa questão no meio de alguma sessão de prática/aprendizado sobre gráficos, essa é a melhor biblioteca a ser considerada.;)

Você também pode preferir a matriz de adjacência para os algoritmos mais comuns:

class SparseGraph {
  int[] nodeValues;
  List<Integer>[] edges;     
}

ou uma matriz para algumas operações:

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}

Não sei se diria que está pronto para produção, mas há jGABL.

Se você precisar de desempenho, dê uma olhada no Grph.A biblioteca é desenvolvida na Universidade Francesa e no CNRS/Inria.

http://www.i3s.unice.fr/~hogie/grph/

O projeto está ativo e o suporte reativo é fornecido!

Implementações de algoritmos de grafos instrucionais em java podem ser encontradas aqui (por prof.Sedgewick e outros):http://algs4.cs.princeton.edu/code/

Fui apresentado a eles enquanto participava desses cursos excepcionais de algoritmos no Coursera (também ministrados pelo prof.Sedgewick):

https://www.coursera.org/course/algs4partI

https://www.coursera.org/course/algs4partII

Se você está realmente procurando por bibliotecas de gráficos e não por bibliotecas de Node/Edge Graph, eu sugeriria usar a biblioteca Big Faceless Graph (BGA).É muito mais fácil de usar que o JFreeChart, tem uma aparência melhor, roda mais rápido, tem mais opções de saída, realmente sem comparação.

JGraph de http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html

Fornece um software poderoso para trabalhar com gráficos (diretos ou indiretos).Também gera código Graphivz, você pode ver representações gráficas.Você pode colocar seus próprios algoritmos de código no pacote, por exemplo:código de retrocesso.O pacote fornece alguns algoritmos:Dijkstra, retrocesso no custo mínimo do caminho, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top