java - linha - jfreechart netbeans tutorial




Boa biblioteca de algoritmos de gráficos Java? (12)

Alguém já teve boas experiências com quaisquer bibliotecas 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 recomendariam?

Para esclarecer, não estou procurando uma biblioteca que produza gráficos / gráficos, estou procurando um que ajude com algoritmos de gráfico, por exemplo, spanning tree mínima, algoritmos de Kruskal Nodes, Edges, etc. Idealmente com alguns bons algoritmos / dados estruturas em uma boa API Java OO.


Confira o JGraphT para obter uma biblioteca de gráficos Java muito simples e poderosa que é muito bem feita e, para evitar qualquer confusão, é diferente do JGraph . Algum 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);

Em um projeto universitário eu brinquei com o yFiles pelo yWorks e descobri que ele tinha uma boa API.



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

Fornece um poderoso software 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 em pakage, por exemplo: código de retrocesso. O pacote fornece alguns algoritmos: Dijkstra, backtracking minimun path cost, ect ..


O Apache Commons oferece gráficos comuns . Em http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ pode-se inspecionar a fonte. O uso da API de amostra também está no SVN . Veja 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 tendo (em minha opinião) um bom modelo gráfico. Exemplo Helloworld . Licença: LGPL + EPL.

Jung também é uma biblioteca licenciada pelo BSD com a estrutura de dados semelhante ao JGraphT. Ele oferece algoritmos de layout, que estão faltando no JGraphT. O commit mais recente é de 2010 e os pacotes hep.aida.* São LGPL (via acs.lbl.gov/software/colt/license.html , que jung.sourceforge.net/download.html ). Isso evita que a JUNG seja usada em projetos sob a égide da ASF e da ESF. Talvez alguém deva usar o garfo do github e remover essa dependência. github.com/rortian/jung2/commit/… está espelhando o último commit do CVS. Os commits atuais parecem remover a funcionalidade de visualização. Commit d0fb491c adiciona um .gitignore .

Prefuse armazena os gráficos usando uma estrutura de matriz, que não é eficiente na memória para gráficos esparsos. Licença: BSD

O Eclipse Zest construiu algoritmos de layout de gráfico, que podem ser usados ​​independentemente do SWT. Veja org.eclipse.zest.layouts.algorithms . A estrutura gráfica usada é a do Eclipse Draw2d , onde os Nodes são objetos explícitos e não são injetados via Generics (como acontece no Apache Commons Graph, JGraphT e JUNG2).


Para visualização, nosso grupo teve algum sucesso com o prefuse . Nós o estendemos para lidar com lajes arquitetônicas e diagramas de bolhas, e não reclamamos muito. Eles têm um novo Flex toolkit chamado Flare, que usa uma API muito semelhante.

ATUALIZAÇÃO: Eu teria que concordar com o comentário, acabamos escrevendo muitas funcionalidades customizadas / contornando as limitações do prefuse. Não posso dizer que começar do zero teria sido melhor, já que conseguimos 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, já que entenderíamos os requisitos muito melhor.


Se você está realmente procurando bibliotecas Charting e não para bibliotecas de Node / Edge Graph, eu sugeriria splurging em Big Faceless Graph Library ( BFG ). É muito mais fácil de usar do que o JFreeChart, parece mais legal, roda mais rápido, tem mais opções de saída, sem comparação.


Se você estava usando JGraph, você deveria tentar JGraphT que é projetado para algoritmos. Uma de suas características é a visualização usando a biblioteca JGraph. Ainda é desenvolvido, mas bastante estável. Analisei a complexidade dos algoritmos JGraphT há algum tempo atrás. Alguns deles não são os mais rápidos, mas se você for implementá-los por conta própria e precisar exibir seu gráfico, talvez seja a melhor escolha. Eu realmente gostei de usar sua API, quando rapidamente tive que escrever um aplicativo que estava trabalhando no gráfico e exibi-lo mais tarde.


Também é bom estar convencido de que um gráfico pode ser representado simplesmente como:

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

e implementar a maioria dos algoritmos que você achar interessante por si mesmo. Se você cair nessa questão no meio de alguma sessão de prática / aprendizado em 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;     
}



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







graph