İyi Java grafik algoritması kitaplığı? [kapalı]


237

Herkes grafik algoritmaları için herhangi bir Java kütüphaneleri ile iyi deneyimler yaşadı. JGraph'ı denedim ve iyi buldum ve google'da birçok farklı var. İnsanların üretim kodunda başarılı bir şekilde kullandıkları ya da önerebilecekleri herhangi bir şey var mı?

Açıklığa kavuşturmak için, grafikler / grafikler üreten bir kütüphane aramıyorum, örneğin minimum genişleme ağacı, Kruskal'ın algoritma Düğümleri, Kenarları, vb. güzel bir Java OO API'sindeki yapılar.

Yanıtlar:


108

JGraph kullanıyorsanız, algoritmalar için tasarlanmış JGraphT'yi denemelisiniz . Özelliklerinden biri JGraph kütüphanesini kullanarak görselleştirme. Hala gelişmiş, ama oldukça kararlı. Bir süre önce JGraphT algoritmalarının karmaşıklığını analiz ettim. Bazıları en hızlı değil, ancak bunları kendi başınıza uygulayacaksanız ve grafiğinizi göstermeniz gerekiyorsa, en iyi seçim olabilir. Hızla grafik üzerinde çalışan ve daha sonra görüntüleyen bir uygulama yazmak zorunda kaldığımda API'sını kullanmayı çok sevdim.


JGraph'ın şu anda bir dizi analiz işlevi içeren bir analiz paketi var: jgraph.github.com/mxgraph/java/docs/index.html .
David

63

Özet:


Bunların birçoğu son derece karmaşıktır ... Fabrika Yöntemlerini kullanmak vb. Bir röportaj hazırlamak için basit bir şeye ihtiyacım var. Herhangi bir fikir?
SoftwareSavant

4
Bunlar ne tür bir iş aradığınızdan daha karmaşıksa
maytham-ɯɐɥʇʎɐɯ

1
Grafik algoritmaları burada açıklanmıştır geeksforgeeks.org/graph-data-sttruc-and-algorithms basit kod ile
mosh

40

Check out JGraphT herhangi bir karışıklığı yatıştırmak için oldukça iyi yapılır çok basit ve güçlü bir Java grafik kütüphanesi için ve, JGraph farklıdır . Bazı örnek kodlar :

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);


37

JUNG görselleştirme için iyi bir seçenektir ve ayrıca rastgele grafik oluşturma, yeniden kablolama, vb. İçin birkaç farklı mekanizma da dahil olmak üzere oldukça iyi bir dizi grafik algoritması vardır. .


Hep.aida. * Paketleri LGPL'dir ( acs.lbl.gov/software/colt/license.html ). Bu colt ( jung.sourceforge.net/download.html ) yoluyla alınır . Bu, JUNG'un ASF ve ESF şemsiyesi altındaki projelerde kullanılmasını önler. Belki github çatalı github.com/rortian/jung2 kullanmalı ve bu bağımlılığı ortadan kaldırmalıdır. github.com/rortian/jung2/commit/… son CVS taahhüdünü yansıtıyor. Mevcut taahhütler görselleştirme işlevini kaldırmış gibi görünüyor.
koppor

2010'dan beri yayınlanmadı, bence bu proje terk edildi
Yacino

14

Apache Commons ortak grafik sunuyor . Http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ altında bir kaynak incelenebilir. Örnek API kullanımı da SVN'de . Jung, GraphT, Prefuse, jBPT ile de karşılaştırıldığında, uygulanan algoritmaların bir listesi için https://issues.apache.org/jira/browse/SANDBOX-458 adresine bakın.

Yalnızca iyi veri yapılarına ihtiyacınız varsa Google Guava .

JGraphT , birçok Algoritmanın uygulandığı ve (benim düşünceme göre) iyi bir grafik modeline sahip bir grafik kütüphanesidir. Helloworld Örneği . Lisans: LGPL + EPL.

JUNG2 aynı zamanda veri yapısı JGraphT'ye benzeyen BSD lisanslı bir kütüphanedir. Şu anda JGraphT'de eksik olan düzen algoritmaları sunuyor. En son 2010 dan taahhüt ve paketler hep.aida.*(via LGPL'i olan tay kütüphanede , JUNG tarafından ithal edilmektedir ). Bu, JUNG'un ASF ve ESF şemsiyesi altındaki projelerde kullanılmasını önler. Belki github çatalını kullanmalı ve bu bağımlılığı ortadan kaldırmalıdır. F4ca0cd komutu son CVS taahhüdünü yansıtıyor. Mevcut taahhütler görselleştirme işlevini kaldırmış gibi görünüyor. Taahhüt d0fb491c ekler a .gitignore.

Prefuse , grafikleri seyrek grafikler için bellek açısından verimli olmayan bir matris yapısı kullanarak saklar. Lisans: BSD

Eclipse Zest , SWT'den bağımsız olarak kullanılabilen yerleşik grafik düzen algoritmaları içerir. Bkz. Org.eclipse.zest.layouts.algorithms . Kullanılan grafik yapısı , Düğümlerin açık nesneler olduğu ve Generics aracılığıyla enjekte edilmediği Eclipse Draw2d'den biridir ( Apache Commons Graph, JGraphT ve JUNG2'de olduğu gibi).


12

http://neo4j.org/ , birçok grafik algoritması içeren ve çoğu bellek içi kütüphaneden daha iyi ölçeklenen bir grafik veritabanıdır.


1
görselleştirebileceğiniz herhangi bir Neo4J istemcisi (java istemcisi) var mı?
Vishrant

10

Bir üniversite projesinde yWorks tarafından yFiles ile oynadım ve oldukça iyi bir API'ye sahip olduğunu buldum.


(Ticari bir yazılım platformunun parçası olarak) veri öğeleri arasındaki bağımlılıkları görselleştirmek için yFiles kullandım. Gerçekten herhangi bir grafik analiz algoritması kullanmadım, ancak y.algo paketinin ihtiyacınız olup olmadığını kontrol edin: yworks.com/products/yfiles/doc/api
Jonik

2
yFiles açık kaynak değildir, ancak ticari lisans sunar
koppor

9

Planlara göz atın :

Blueprints, özellik grafiği veri modeli için arabirimler, uygulamalar, sürüm uygulamaları ve test paketlerinden oluşan bir koleksiyondur. Planlar JDBC'ye benzer, ancak grafik veritabanları için. TinkerPop açık kaynaklı yazılım yığını içinde Blueprints aşağıdakiler için temel teknoloji olarak hizmet eder:

Borular : Tembel, veri akışı çerçevesi

Gremlin : Bir grafik geçiş dili

Çerçeveler : Nesneden grafiğe eşleyici

Fırın : Bir grafik algoritmaları paketi

Rexster : Bir grafik sunucusu



7

Grafik algoritmalarına giriyorsanız JDSL (Java'daki Veri Yapıları Kütüphanesi) yeterince iyi olmalıdır - http://www.cs.brown.edu/cgc/jdsl/


Bunun için teşekkürler, hiç karşılaşmam. Kullanıyor musunuz?
Nick Fortescue

1
Evet, kullanıyorum. Kullanmaya 4 yıl önce başladım. Şimdiye kadar iyi, sadece .NET için de bir liman olsaydı.
mr.sverrir

Ne yazık ki, jdsl.org sayfası artık bir spam sayfası gibi görünüyor.
Ross Judson

1
Orijinal yayındaki bağlantıyı güncelledim. Teşekkürler.
mr.sverrir

5

Görselleştirme için grubumuz tercihli bir şekilde başarılı oldu . Mimari zemin plakalarını ve kabarcık diyagramını işlemek için genişlettik ve çok fazla şikayet etmedi. Çok benzer bir API kullanan Flare adı verilen yeni bir Flex araç setine sahipler.

GÜNCELLEME: Yoruma katılıyorum, bir sürü özel işlevsellik yazdık / öneri sınırlamaları etrafında çalıştık. Prefuse kullanarak 1. günden itibaren ilerlemeyi gösterebildiğimiz için sıfırdan başlamanın daha iyi olacağını söyleyemeyiz. Öte yandan, aynı şeylerin ikinci bir uygulamasını yapıyor olsaydık, gereksinimleri çok daha iyi anlayacağımız için tercihi atlayabilirim.


Tercihinizle kişisel düşünceleriniz nelerdi? Son işimde, bir proje onu kullanmaya başladı, ancak% 90 + yeniden yazılmış (ve yeni özelliklerin eklenmesiyle optimize edilmiş) bir prefuse sürümü ile sona erdi.
Thomas Owens


5

Bir Grafiğin aşağıdaki gibi basit bir şekilde temsil edilebileceğine ikna etmek de iyidir:

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

ve ilginç bulduğunuz algoritmaların çoğunu kendiniz uygulayın. Grafikler üzerinde bir uygulama / öğrenme oturumunun ortasında bu soruya düşerseniz, dikkate alınması gereken en iyi lib budur. ;)

En yaygın algoritmalar için bitişiklik matrisini de tercih edebilirsiniz:

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

veya bazı işlemler için bir matris:

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




0

Eğer gerçekten Çizelge kütüphaneleri arıyorsanız, Düğüm / Kenar Grafiği kütüphaneleri için değil, Büyük Yüzsüz Grafik kütüphanesinde ( BFG ) splurging öneririm . JFreeChart'tan daha kolay, daha hoş görünüyor, daha hızlı çalışıyor, daha fazla çıktı seçeneği var, gerçekten karşılaştırma yok.


Soruyu yanlış anladınız: bu, turta ve çubukları olan türlerle değil, düğümleri ve kenarları olan grafiklerle ilgilidir.
amarillion

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.