Хороша бібліотека алгоритмів графіків Java? [зачинено]


237

Хтось мав хороший досвід роботи з будь-якими бібліотеками Java для алгоритмів Graph. Я спробував JGraph і вважав це нормальним, і в Google є дуже багато різних. Чи є такі, що люди насправді успішно використовують у виробничому коді або рекомендували б?

Для уточнення, я не шукаю бібліотеку, яка створює графіки / діаграми, я шукаю таку, яка допомагає алгоритмам графіків, наприклад, дерево з мінімальним розміщенням, алгоритм Kruskal Nodes, Edges тощо. В ідеалі - одна з хорошими алгоритмами / даними структури в хорошому Java OO API.

Відповіді:


108

Якщо ви використовували JGraph, спробуйте спробувати JGraphT , розроблений для алгоритмів. Однією з його особливостей є візуалізація за допомогою бібліотеки JGraph. Він все ще розвинений, але досить стабільний. Я проаналізував складність алгоритмів JGraphT деякий час тому. Деякі з них не найшвидші, але якщо ви збираєтесь їх реалізувати самостійно і вам потрібно відобразити графік, то це може бути найкращим вибором. Мені дуже сподобалось використовувати його API, коли мені довелося швидко написати додаток, який працював над графіком, і відобразити його пізніше.


Тепер у JGraph є пакет аналізу, який включає низку функцій аналізу, jgraph.github.com/mxgraph/java/docs/index.html .
Девід

63

Підсумок:

  • JGraphT, якщо вас більше цікавлять структури даних та алгоритми.
  • JGraph, якщо ваш головний фокус - візуалізація.
  • Jung , yWorks та BFG - це інші речі, які люди намагалися використовувати.
  • Prefuse - це не ні, оскільки більшість з них доводиться переписувати.
  • Google Guava, якщо вам потрібні лише хороші структури даних.
  • Apache Commons Graph . В даний час не працює, але забезпечує реалізацію для багатьох алгоритмів. Див. Https://isissue.apache.org/jira/browse/SANDBOX-458 для переліку реалізованих алгоритмів, також порівняних з Jung, GraphT, Prefuse, jBPT

Багато з них надзвичайно складні ... Використання заводських методів тощо. Мені просто потрібно щось просте, щоб підготуватися до співбесіди. Будь-які ідеї?
SoftwareSavant

4
Якщо це складніше, ніж яку роботу ви шукаєте
Maytham-ɯɐɥʇʎɐɯ

1
Алгоритми графіків пояснюються тут geeksforgeeks.org/graph-data-structure-and-algorithms з простим кодом
mosh

40

Ознайомтеся з JGraphT щодо дуже простої та потужної бібліотеки графіків Java, яка досить добре зроблена і, щоб усунути будь-яку плутанину, відрізняється від JGraph . Деякі зразки коду :

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

Це чудова демонстрація тут github.com/jgrapht/jgrapht/wiki/DirectedGraphDemo
Хтось десь

37

JUNG є хорошим варіантом візуалізації, а також має досить гарний набір доступних алгоритмів графіків, включаючи кілька різних механізмів створення випадкових графіків, перемотування тощо. .


Пакети hep.aida. * Є LGPL ( acs.lbl.gov/software/colt/license.html ). Це імпортується через colt ( jung.sourceforge.net/download.html ). Це запобігає використанню JUNG у проектах під егідою ASF та ESF. Можливо, слід використовувати вилку github gitub.com/rortian/jung2 і усунути цю залежність. github.com/rortian/jung2/commit/… відображає останню фіксацію CVS. Поточні коміти видаляють функціонал візуалізації.
коппор

З 2010 року не випущено, я вважаю, що цей проект покинутий
Yacino

14

Apache Commons пропонує commons-graph . У розділі http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ можна перевірити джерело. Використання зразкового API також є у SVN . Див. Https://isissue.apache.org/jira/browse/SANDBOX-458 для переліку реалізованих алгоритмів, також порівняних з Jung, GraphT, Prefuse, jBPT

Google Guava, якщо вам потрібні лише хороші структури даних.

JGraphT - це бібліотека графіків з багатьма реалізованими алгоритмами і має (на мій погляд) гарну модель графа. Helloworld Приклад . Ліцензія: LGPL + EPL.

JUNG2 також є бібліотекою, що має ліцензію на BSD, зі структурою даних, подібною до JGraphT. Він пропонує алгоритми компонування, яких зараз немає в JGraphT. Найновіший комітет - з 2010 року, пакети hep.aida.*- LGPL (через бібліотеку кольт , яку імпортує JUNG ). Це запобігає використанню JUNG у проектах під егідою ASF та ESF. Можливо, варто скористатися вилкою github і усунути цю залежність. Команда f4ca0cd відображає останню передачу CVS. Поточні коміти видаляють функціонал візуалізації. Виконати d0fb491c додає a .gitignore.

Prefuse зберігає графіки за допомогою матричної структури, яка не є ефективною для пам'яті для розріджених графіків. Ліцензія: BSD

Eclipse Zest вбудував алгоритми компонування графіків, які можна використовувати незалежно від SWT. Див. Org.eclipse.zest.layouts.algorithms . Використовувана структура графіків - це структура Eclipse Draw2d , де Вузли - це явні об'єкти, а не вводяться через Generics (як це відбувається в Apache Commons Graph, JGraphT та JUNG2).


12

http://neo4j.org/ - це база даних графіків, яка містить багато алгоритмів графіків і масштабів краще, ніж більшість бібліотек пам'яті.


1
чи є клієнт Neo4J (java client), де ви можете його візуалізувати?
Vishrant

10

В університетському проекті я пограв з yFiles yWorks і виявив, що у нього досить хороший API.


Я використовував yFiles для візуалізації взаємозалежностей між елементами даних (як частина комерційної платформи програм). Я дійсно не використовувати будь-які алгоритми аналізу графів, але перевірте , якщо пакет y.algo має те , що вам потрібно: yworks.com/products/yfiles/doc/api
Jonik

2
yFiles не є відкритим кодом, але пропонує комерційні ліцензії
koppor

9

перевірити креслення :

План - це сукупність інтерфейсів, реалізацій, доповнень та тестових наборів для моделі даних графіку властивостей. Креслення є аналогом JDBC, але для графічних баз даних. У складі програмного забезпечення з відкритим кодом TinkerPop Blueprints є основою технології для:

Труби : лінива рамка потоку даних

Гремль : Мова переходу графіків

Кадри : Мап-об’єкт-графік

Піч : пакет алгоритмів графіків

Rexster : графічний сервер



7

JDSL (Бібліотека структур даних на Java) повинна бути досить хорошою, якщо ви використовуєте алгоритми графіків - http://www.cs.brown.edu/cgc/jdsl/


Дякую за це, я ніколи не стикався з цим. Ви його використовуєте?
Nick Fortescue

1
Так, я цим користуюся. Я почав використовувати його, можливо, 4 роки тому. До сих пір добре, я просто хотів би, щоб там був порт для .NET.
mr.sverrir

На жаль, сторінка jdsl.org зараз здається спам-сторінкою.
Росс Юдсон

1
Я оновив посилання в початковій публікації. Дякую.
mr.sverrir

5

Для візуалізації наша група мала певний успіх із попередньою запобіжкою . Ми розширили його для обробки архітектурних плит та діаграми бульбашок, і це не надто скаржилося. У них з'явився новий інструментарій Flex, який називається Flare, який використовує дуже схожий API.

ОНОВЛЕННЯ: Я повинен був би погодитися з коментарем, ми закінчили писати багато спеціальних функціональних можливостей / працюючи над обмеженнями попереднього запобіжника. Я не можу сказати, що починати з нуля було б краще, хоча, як ми змогли продемонструвати прогрес з першого дня за допомогою попереднього запобіжника. З іншого боку, якби ми виконували другу реалізацію одного і того ж матеріалу, я можу пропустити попередню зарядку, оскільки ми зрозуміли би вимоги набагато краще.


Які були ваші особисті думки із попередньою запобіжкою? На моїй останній роботі проект почав використовувати його, але закінчився перезаписаною (і оптимізованою, із доповненнями нових функцій) на 90% + попередньою програмою.
Томас Оуенс


5

Також добре переконатися, що графік можна представити так само, як:

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

і реалізувати більшість алгоритмів, які вам цікаві самі. Якщо ви потрапляєте на це питання посеред якоїсь сесії практики / навчання з графіків, це найкраща проблема. ;)

Ви також можете віддати перевагу матриці суміжності для найбільш поширених алгоритмів:

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

або матриця для деяких операцій:

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


4

Якщо вам потрібна вистава, ви можете поглянути на Grph. Бібліотека розвинута у Французькому університеті та CNRS / Inria.

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

Проект активний та реактивна підтримка!


3

Інструкційні втілення алгоритму графіків в Java можна знайти тут (проф. Sedgewick та ін.): Http://algs4.cs.princeton.edu/code/

Мене познайомили з ними під час відвідування цих виняткових курсів з алгоритму на курсах (також викладав проф. Седжевік):

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

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


0

Якщо ви насправді шукаєте бібліотеки Charting, а не бібліотеки Graph Node / Edge Graph, я б запропонував розвідатись на Біблійній безликій графічній бібліотеці ( BFG ). Це простіший у використанні, ніж JFreeChart, виглядає приємніше, працює швидше, має більше варіантів виводу, насправді немає порівняння.


Ви неправильно зрозуміли питання: мова йде про тип графіків, які мають вузли та ребра, а не про тип, у якому є пиріжки та смужки.
amarillion

-1

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

Забезпечує потужне програмне забезпечення для роботи з графіками (прямими чи непрямими). Також генерує код Graphivz, ви можете бачити графічні зображення. Ви можете помістити власні алгоритми коду в пакунок, наприклад: код зворотного відстеження. У пакеті є декілька алгоритмів: Dijkstra, зворотне відстеження мінімальної вартості шляху, тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.