Pustaka algoritma grafik Java yang bagus? [Tutup]

237

Adakah yang punya pengalaman baik dengan perpustakaan Java untuk algoritma Graph. Saya sudah mencoba JGraph dan menemukannya ok, dan ada banyak yang berbeda di google. Apakah ada orang yang benar-benar berhasil menggunakan kode produksi atau akan merekomendasikan?

Untuk memperjelas, saya tidak mencari perpustakaan yang menghasilkan grafik / grafik, saya sedang mencari perpustakaan yang membantu dengan algoritma Grafik, misalnya pohon rentang minimum, algoritma Algoritma Kruskal, Tepi, dll. Idealnya satu dengan beberapa algoritma / data yang baik struktur dalam Java OO API yang bagus.

Nick Fortescue
sumber

Jawaban:

108

Jika Anda menggunakan JGraph, Anda harus mencoba JGraphT yang dirancang untuk algoritma. Salah satu fiturnya adalah visualisasi menggunakan perpustakaan JGraph. Ini masih dikembangkan, tetapi cukup stabil. Saya menganalisis kompleksitas algoritma JGraphT beberapa waktu lalu. Beberapa dari mereka bukan yang tercepat, tetapi jika Anda akan mengimplementasikannya sendiri dan perlu menampilkan grafik Anda, maka itu mungkin merupakan pilihan terbaik. Saya sangat suka menggunakan API-nya, ketika saya dengan cepat harus menulis aplikasi yang sedang bekerja pada grafik dan menampilkannya nanti.

bibix
sumber
JGraph memang memiliki paket analisis sekarang yang mencakup berbagai fungsi analisis, jgraph.github.com/mxgraph/java/docs/index.html .
David
63

Ringkasan:

mansu
sumber
Banyak dari itu sangat rumit ... Menggunakan Metode pabrik dan sebagainya. Saya hanya perlu sesuatu yang sederhana untuk persiapan wawancara. Ada ide?
SoftwareSavant
4
Jika ini rumit dari pekerjaan seperti apa yang Anda cari
maytham-ɯɐɥʇʎɐɯ
1
Algoritma grafik dijelaskan di sini geeksforgeeks.org/graph-data-structure-and-algorithms dengan kode sederhana
mosh
40

Lihat JGraphT untuk pustaka grafik Java yang sangat sederhana dan kuat yang dilakukan dengan cukup baik dan, untuk menghilangkan kebingungan, berbeda dari JGraph . Beberapa kode contoh :

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);
Joe Liversedge
sumber
Ini adalah demo hebat di sini github.com/jgrapht/jgrapht/wiki/DirectedGraphDemo
Seseorang Di Suatu Tempat
37

JUNG adalah pilihan yang baik untuk visualisasi, dan juga memiliki serangkaian algoritma grafik yang cukup baik, termasuk beberapa mekanisme berbeda untuk pembuatan grafik acak, rewiring, dll. Saya juga menemukan bahwa secara umum cukup mudah untuk memperluas dan beradaptasi jika perlu .

Kai
sumber
Paket hep.aida. * Adalah LGPL ( acs.lbl.gov/software/colt/license.html ). Ini diimpor melalui colt ( jung.sourceforge.net/download.html ). Ini mencegah JUNG dari digunakan dalam proyek-proyek di bawah payung ASF dan ESF. Mungkin kita harus menggunakan garpu github github.com/rortian/jung2 dan menghapus ketergantungan itu. github.com/rortian/jung2/commit/… mencerminkan mirror CVS terakhir. Komit saat ini tampaknya menghapus fungsi visualisasi.
koppor
Tidak ada yang dirilis sejak 2010, saya pikir proyek ini ditinggalkan
Yacino
14

Apache Commons menawarkan commons-graph . Di bawah http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ orang dapat memeriksa sumbernya. Contoh penggunaan API juga ada di SVN . Lihat https://issues.apache.org/jira/browse/SANDBOX-458 untuk daftar algoritma yang diimplementasikan, juga dibandingkan dengan Jung, GraphT, Prefuse, jBPT

Google Guava jika Anda hanya membutuhkan struktur data yang bagus.

JGraphT adalah perpustakaan grafik dengan banyak Algoritma yang diimplementasikan dan memiliki (menurut pendapat saya) model grafik yang baik. Contoh Helloworld . Lisensi: LGPL + EPL.

JUNG2 juga merupakan perpustakaan berlisensi BSD dengan struktur data yang mirip dengan JGraphT. Ini menawarkan algoritma tata letak, yang saat ini hilang di JGraphT. Komit terbaru berasal dari 2010 dan paket hep.aida.*- paketnya adalah LGPL (via colt library , yang diimpor oleh JUNG ). Ini mencegah JUNG dari digunakan dalam proyek-proyek di bawah payung ASF dan ESF. Mungkin kita harus menggunakan garpu github dan menghapus ketergantungan itu. Commit f4ca0cd mencerminkan mirror CVS terakhir. Komit saat ini tampaknya menghapus fungsi visualisasi. Commit d0fb491c menambahkan a .gitignore.

Prefuse menyimpan grafik menggunakan struktur matriks, yang tidak efisien memori untuk grafik jarang. Lisensi: BSD

Eclipse Zest telah membangun algoritma tata letak grafik, yang dapat digunakan secara independen dari SWT. Lihat org.eclipse.zest.layouts.algorithms . Struktur grafik yang digunakan adalah salah satu dari Eclipse Draw2d , di mana Nodes adalah objek eksplisit dan tidak disuntikkan melalui Generics (seperti yang terjadi di Apache Commons Graph, JGraphT, dan JUNG2).

koppor
sumber
12

http://neo4j.org/ adalah basis data grafik yang berisi banyak algoritma grafik dan skala yang lebih baik daripada kebanyakan perpustakaan di memori.

Jonathan Hendler
sumber
1
apakah ada klien Neo4J (klien java) di mana Anda dapat memvisualisasikannya?
Vishrant
10

Dalam sebuah proyek universitas, saya bermain-main dengan yFiles oleh yWorks dan menemukan itu memiliki API yang cukup bagus.

Turismo
sumber
Saya telah menggunakan yFiles untuk visualisasi interdependensi antara item data (sebagai bagian dari platform perangkat lunak komersial). Saya tidak benar-benar menggunakan algoritma analisis grafik, tetapi periksa apakah paket y.algo memiliki apa yang Anda butuhkan: yworks.com/products/yfiles/doc/api
Jonik
2
yFiles bukan opensource, tetapi menawarkan lisensi komersial
koppor
9

lihat Cetak Biru :

Blueprints adalah kumpulan antarmuka, implementasi, ouplementasi, dan suite uji untuk model data grafik properti. Cetak biru analog dengan JDBC, tetapi untuk basis data grafik. Di dalam tumpukan perangkat lunak sumber terbuka TinkerPop, Blueprints berfungsi sebagai teknologi dasar untuk:

Pipes : Kerangka kerja aliran data yang malas

GREMLIN : Bahasa traversal grafik

Bingkai : Mapper objek-ke-grafik

Tungku : Paket algoritma grafik

Rexster : Server grafik

alex
sumber
7

JDSL (Pustaka Struktur Data di Jawa) harus cukup baik jika Anda menyukai algoritma grafik - http://www.cs.brown.edu/cgc/jdsl/

mr.sverrir
sumber
Terima kasih untuk ini, saya tidak pernah menemukan itu. Apakah Anda menggunakannya?
Nick Fortescue
1
Ya, saya menggunakannya. Saya mulai menggunakannya mungkin 4 tahun yang lalu. Sejauh ini bagus, saya hanya berharap ada port untuk itu. NET, juga.
mr.sverrir
Sayangnya, halaman jdsl.org tampaknya menjadi halaman spam sekarang.
Ross Judson
1
Saya telah memperbarui tautan di pos asli. Terima kasih.
mr.sverrir
5

Untuk visualisasi, kelompok kami berhasil dengan prefuse . Kami memperluasnya untuk menangani pelat lantai arsitektur dan diagram bubble, dan itu tidak banyak mengeluh. Mereka memiliki toolkit Flex baru yang disebut Flare yang menggunakan API yang sangat mirip.

UPDATE: Saya harus setuju dengan komentar, kami akhirnya menulis banyak fungsi khusus / bekerja di sekitar batasan prefuse. Saya tidak bisa mengatakan bahwa mulai dari awal akan lebih baik karena kami dapat menunjukkan kemajuan dari hari 1 dengan menggunakan prefuse. Di sisi lain jika kita melakukan implementasi kedua dari hal yang sama, saya mungkin melewatkan prefuse karena kita akan memahami persyaratan jauh lebih baik.

Jacob Rigby
sumber
Apa pemikiran pribadi Anda dengan prefuse? Di pekerjaan terakhir saya, sebuah proyek mulai menggunakannya, tetapi berakhir dengan versi 90% + ditulis ulang (dan dioptimalkan, dengan penambahan fitur baru).
Thomas Owens
5

Coba Annas ini adalah paket grafik sumber terbuka yang mudah dijangkau

http://annas.googlecode.com

Sam Wilson
sumber
5

Juga bagus untuk diyakinkan bahwa Grafik dapat direpresentasikan sesederhana:

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

dan terapkan sebagian besar algoritma yang menurut Anda menarik untuk Anda sendiri. Jika Anda jatuh pada pertanyaan ini di tengah-tengah beberapa sesi latihan / pembelajaran pada grafik, itu lib terbaik untuk dipertimbangkan. ;)

Anda juga dapat memilih matriks kedekatan untuk sebagian besar algoritma umum:

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

atau matriks untuk beberapa operasi:

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}
Snicolas
sumber
4

Saya tidak tahu apakah saya akan menyebutnya siap produksi, tapi ada jGABL .

Hank Gay
sumber
4

Jika Anda membutuhkan kinerja, Anda mungkin melihat Grph. Perpustakaan dikembangkan di Universitas Perancis dan CNRS / Inria.

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

Proyek ini aktif dan dukungan reaktif disediakan!

Luc
sumber
0

Jika Anda benar-benar mencari perpustakaan Charting dan bukan untuk perpustakaan Node / Edge Graph saya akan menyarankan splurging di Big Graph Grafik berwajah ( BFG ). Ini cara yang lebih mudah digunakan daripada JFreeChart, terlihat lebih bagus, berjalan lebih cepat, memiliki lebih banyak opsi keluaran, benar-benar tidak ada perbandingan.

Jacob Rigby
sumber
Anda salah memahami pertanyaan: ini tentang jenis grafik yang memiliki simpul dan tepi, bukan jenis yang memiliki pai dan bilah.
amarillion
-1

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

Menyediakan perangkat lunak yang kuat untuk bekerja dengan grafik (langsung atau tidak langsung). Juga menghasilkan kode Graphivz, Anda dapat melihat representasi grafik. Anda dapat memasukkan algoritma kode Anda sendiri ke dalam pakage, misalnya: kode backtracking. Paket ini menyediakan beberapa algoritme: Dijkstra, melacak biaya jalur minimun, dll.

Bob
sumber