Czy ktoś miał dobre doświadczenia z dowolnymi bibliotekami Java dla algorytmów Graph. Próbowałem JGraph i okazało się, że jest w porządku, a w Google jest wiele różnych. Czy są jakieś rzeczy, których ludzie używają z powodzeniem w kodzie produkcyjnym, czy też poleciliby?
Aby wyjaśnić, nie szukam biblioteki, która produkuje wykresy / wykresy, szukam takiej, która pomaga w algorytmach graficznych, np. Minimalne drzewo opinające, węzły algorytmu Kruskala, krawędzie itp. Idealnie jedna z kilkoma dobrymi algorytmami / danymi struktury w ładnym API Java OO.
Podsumowanie:
źródło
Sprawdź JGraphT, aby uzyskać bardzo prostą i wydajną bibliotekę graficzną Java, która jest całkiem dobrze wykonana i, aby uniknąć wszelkich nieporozumień, różni się od JGraph . Niektóre przykładowy kod :
źródło
JUNG jest dobrą opcją do wizualizacji, a także ma dość dobry zestaw dostępnych algorytmów graficznych, w tym kilka różnych mechanizmów do tworzenia losowych wykresów, przeinstalowywania itp. Stwierdziłem również, że jest ogólnie dość łatwy do rozszerzenia i dostosowania w razie potrzeby .
źródło
Apache Commons oferuje wykres wspólny . Pod http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ można sprawdzić źródło. Przykładowe użycie interfejsu API znajduje się również w SVN . Zobacz https://issues.apache.org/jira/browse/SANDBOX-458, aby uzyskać listę zaimplementowanych algorytmów, również w porównaniu z Jung, GraphT, Prefuse, jBPT
Google Guava, jeśli potrzebujesz tylko dobrych struktur danych.
JGraphT to biblioteka grafów z wieloma zaimplementowanymi algorytmami i posiadająca (moim zdaniem) dobry model grafów. Przykład Helloworld . Licencja: LGPL + EPL.
JUNG2 jest także biblioteką na licencji BSD o strukturze danych podobnej do JGraphT. Oferuje algorytmy układania, których obecnie brakuje w JGraphT. Najnowszym popełnić jest od 2010 roku i pakiety
hep.aida.*
są LGPL (za pośrednictwem biblioteki colt , która jest importowana przez JUNG ). Zapobiega to wykorzystaniu JUNG w projektach pod parasolem ASF i EFS. Może należy użyć widelca github i usunąć tę zależność. Zatwierdzenie f4ca0cd odzwierciedla ostatnie zatwierdzenie CVS. Obecne zatwierdzenia wydają się usuwać funkcje wizualizacji. Zatwierdź d0fb491c dodaje.gitignore
.Prefuse przechowuje wykresy przy użyciu struktury macierzowej, która nie jest wydajna pod względem pamięci dla rzadkich wykresów. Licencja: BSD
Eclipse Zest ma wbudowane algorytmy układu wykresów, których można używać niezależnie od SWT. Zobacz org.eclipse.zest.layouts.al algorytmy . Zastosowana struktura grafu to Eclipse Draw2d , w której Węzły są obiektami jawnymi i nie są wstrzykiwane przez Generics (jak ma to miejsce w Apache Commons Graph, JGraphT i JUNG2).
źródło
http://neo4j.org/ to baza danych grafów, która zawiera wiele algorytmów grafów i skaluje się lepiej niż większość bibliotek w pamięci.
źródło
W projekcie uniwersyteckim bawiłem się yFiles firmy yWorks i stwierdziłem, że ma całkiem niezłe API.
źródło
sprawdź plany :
Blueprints to kolekcja interfejsów, implementacji, uzupełnień i pakietów testowych dla modelu danych wykresu właściwości. Plany są analogiczne do JDBC, ale dla baz danych grafów. W stosie oprogramowania open source TinkerPop Blueprints służy jako podstawowa technologia dla:
Rury : leniwa struktura przepływu danych
Gremlin : język przejścia przez wykres
Ramki : Maper obiekt-wykres
Piec : pakiet algorytmów graficznych
Rexster : serwer grafów
źródło
http://incubator.apache.org/hama/ to rozproszony pakiet naukowy w Hadoop dla ogromnych danych matrycowych i graficznych.
źródło
JDSL (biblioteka struktur danych w Javie) powinna być wystarczająca, jeśli lubisz algorytmy graficzne - http://www.cs.brown.edu/cgc/jdsl/
źródło
W zakresie wizualizacji nasza grupa odniosła pewien sukces z fuse . Rozszerzyliśmy go, aby obsługiwał architektoniczne panele podłogowe i diagramy bąbelkowe, i nie narzekał zbytnio. Mają też nowy zestaw narzędzi Flex o nazwie Flare, który używa bardzo podobnego interfejsu API.
AKTUALIZACJA: Muszę się zgodzić z tym komentarzem, w końcu napisaliśmy wiele niestandardowych funkcji / omijając ograniczenia prefuse. Nie mogę powiedzieć, że lepiej byłoby zacząć od zera, ponieważ byliśmy w stanie wykazać postęp od pierwszego dnia, używając prefuse. Z drugiej strony, jeśli robimy drugą implementację tych samych rzeczy, mogę pominąć fuse, ponieważ znacznie lepiej rozumiemy wymagania.
źródło
Wypróbuj Annas, który jest pakietem graficznym o otwartym kodzie źródłowym, łatwym do opanowania
http://annas.googlecode.com
źródło
Dobrze jest również przekonać się, że wykres można przedstawić w następujący sposób:
i zaimplementuj większość algorytmów, które uważasz za interesujące. Jeśli wpadniesz na to pytanie w trakcie sesji treningowej na wykresach, to jest najlepsza biblioteka do rozważenia. ;)
Możesz także preferować macierz przylegania dla najpopularniejszych algorytmów:
lub macierz dla niektórych operacji:
źródło
Nie wiem, czy nazwałbym to gotowym do produkcji, ale jest jGABL .
źródło
Jeśli potrzebujesz wydajności, możesz rzucić okiem na Grph. Biblioteka jest rozwijana na Uniwersytecie Francuskim i CNRS / Inria.
http://www.i3s.unice.fr/~hogie/grph/
Projekt jest aktywny i zapewniane jest reaktywne wsparcie!
źródło
Implementacje algorytmu grafu instruktażowego w java można znaleźć tutaj (autorstwa prof. Sedgewicka i in.): Http://algs4.cs.princeton.edu/code/
Zostałem im przedstawiony podczas uczestniczenia w tych wyjątkowych kursach algorytmicznych na Coursera (również prowadzonych przez prof. Sedgewicka):
https://www.coursera.org/course/algs4partI
https://www.coursera.org/course/algs4partII
źródło
Jeśli faktycznie szukasz bibliotek wykresów, a nie bibliotek Node / Edge Graph, sugerowałbym splurgowanie biblioteki Big Faceless Graph ( BFG ). Jest o wiele łatwiejszy w użyciu niż JFreeChart, wygląda ładniej, działa szybciej, ma więcej opcji wyjściowych, naprawdę nie ma porównania.
źródło
JGraph z http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html
Zapewnia potężne oprogramowanie do pracy z wykresami (bezpośrednie lub pośrednie). Generuje również kod Graphivz, możesz zobaczyć reprezentacje graficzne. Możesz umieścić własne algorytmy kodu w pakiecie, na przykład: kod cofania. Pakiet zawiera kilka algorytmów: Dijkstra, powrót do minimalnego kosztu ścieżki, itp.
źródło