अच्छा जावा ग्राफ एल्गोरिथ्म पुस्तकालय? [बन्द है]


237

क्या किसी को ग्राफ एल्गोरिदम के लिए किसी भी जावा पुस्तकालयों के साथ अच्छे अनुभव हैं। मैंने JGraph की कोशिश की है और इसे ठीक पाया है, और गूगल में बहुत सारे हैं। क्या कोई ऐसा है जिसे लोग वास्तव में उत्पादन कोड में सफलतापूर्वक उपयोग कर रहे हैं या सुझाएंगे?

स्पष्ट करने के लिए, मैं एक ऐसे पुस्तकालय की तलाश नहीं कर रहा हूं, जो ग्राफ़ / चार्ट का निर्माण करता हो, मैं एक ऐसा खोज रहा हूं जो ग्राफ़ एल्गोरिदम के साथ मदद करता हो, जैसे न्यूनतम फैले हुए पेड़, क्रुस्कल के एल्गोरिथ्म नोड्स, किनारे, आदि। कुछ अच्छे एल्गोरिदम / डेटा के साथ आदर्श रूप से एक एक अच्छा जावा OO एपीआई में संरचनाएं।

जवाबों:


108

आप JGraph उपयोग कर रहे थे, तो आप के लिए एक कोशिश देना चाहिए JGraphT जो एल्गोरिदम के लिए बनाया गया है। इसकी एक विशेषता JGraph लाइब्रेरी का उपयोग करके विज़ुअलाइज़ेशन है। यह अभी भी विकसित है, लेकिन बहुत स्थिर है। मैंने कुछ समय पहले JGraphT एल्गोरिदम की जटिलता का विश्लेषण किया। उनमें से कुछ सबसे तेज नहीं हैं, लेकिन अगर आप उन्हें अपने दम पर लागू करने जा रहे हैं और अपना ग्राफ प्रदर्शित करने की आवश्यकता है, तो यह सबसे अच्छा विकल्प हो सकता है। मुझे वास्तव में इसके एपीआई का उपयोग करना पसंद था, जब मुझे जल्दी से एक ऐप लिखना पड़ा जो ग्राफ़ पर काम कर रहा था और बाद में इसे प्रदर्शित कर रहा था।


JGraph के पास अब एक विश्लेषण पैकेज है जिसमें कई प्रकार के विश्लेषण कार्य शामिल हैं, jgraph.github.com/mxgraph/java/docs/index.html
डेविड

63

सारांश:

  • JGraphT यदि आप डेटा संरचनाओं और एल्गोरिदम में अधिक रुचि रखते हैं।
  • JGraph यदि आपका प्राथमिक ध्यान दृश्य है।
  • जंग , yWorks , और BFG अन्य चीजें हैं जिनका उपयोग करके लोगों ने कोशिश की है।
  • Prefuse एक नहीं है, क्योंकि किसी को इसे फिर से लिखना नहीं है।
  • Google अमरूद अगर आपको केवल अच्छे डेटास्ट्रक्चर की आवश्यकता है।
  • अपाचे कॉमन्स ग्राफ । वर्तमान में निष्क्रिय है, लेकिन कई एल्गोरिदम के लिए कार्यान्वयन प्रदान करता है। कार्यान्वित एल्गोरिदम की सूची के लिए https://issues.apache.org/jira/browse/SANDBOX-458 देखें , जिसकी तुलना जंग, ग्राफ, प्रीफ्यूज़, जेबीपीटी से भी की जाती है

उनमें से बहुत बहुत जटिल हैं ... कारखाने के तरीकों और आगे का उपयोग करना। साक्षात्कार के लिए मुझे कुछ सरल करने की जरूरत है। कोई विचार?
सॉफ्टवेयरसावेंट

4
अगर ये इस तरह से जटिल हैं कि आप किस तरह की नौकरी की तलाश कर रहे हैं
maytham-'Mar

1
ग्राफ़ एल्गोरिदम यहां समझाए गए हैं geeksforgeeks.org/graph-data-structure-and-algorithms के साथ सरल कोड
mosh

40

एक बहुत ही सरल और शक्तिशाली जावा ग्राफ लाइब्रेरी के लिए JGraphT की जाँच करें जो बहुत अच्छी तरह से किया गया है और, किसी भी भ्रम को दूर करने के लिए, 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

जंग विज़ुअलाइज़ेशन के लिए एक अच्छा विकल्प है, और इसमें उपलब्ध ग्राफ़ एल्गोरिदम का एक बहुत अच्छा सेट भी है, जिसमें यादृच्छिक ग्राफ़ निर्माण, रीवाइरिंग आदि के लिए कई अलग-अलग तंत्र शामिल हैं, मैंने यह भी पाया है कि जहां आवश्यक हो, उसे विस्तार और अनुकूलित करने के लिए आमतौर पर यह काफी आसान है। ।


पैकेज hep.aida। * LGPL ( acs.lbl.gov/software/colt/license.html ) हैं। यह colt ( jung.sourceforge.net/download.html ) के माध्यम से आयात किया जाता है । यह जंग को एएसएफ और ईएसएफ की छतरी के नीचे परियोजनाओं में इस्तेमाल होने से रोकता है। हो सकता है कि किसी को github कांटा github.com/rortian/jung2 का उपयोग करना चाहिए और उस निर्भरता को दूर करना चाहिए । github.com/rortian/jung2/commit/… आखिरी CVS कमेंट को मिरर कर रहा है। वर्तमान कमेंट्स विज़ुअलाइज़ेशन की कार्यक्षमता को दूर करने के लिए प्रतीत होते हैं।
कोपोर

2010 से कोई रिलीज़ नहीं हुई है, मुझे लगता है कि इस परियोजना को छोड़ दिया गया है
यासीनो

14

Apache Commons कॉमन-ग्राफ प्रदान करता है । Http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ के तहत कोई भी स्रोत का निरीक्षण कर सकता है। नमूना एपीआई का उपयोग एसवीएन में भी है। कार्यान्वित एल्गोरिदम की सूची के लिए https://issues.apache.org/jira/browse/SANDBOX-458 देखें , जिसकी तुलना जंग, ग्राफ, प्रीफ्यूज़, जेबीपीटी से भी की जाती है

Google अमरूद अगर आपको केवल अच्छे डेटास्ट्रक्चर की आवश्यकता है।

JGraphT एक ग्राफ़ लाइब्रेरी है जिसमें कई अल्गोरिद्म लागू किए गए हैं और (मेरे उत्पीड़न में) एक अच्छा ग्राफ़ मॉडल है। हेल्लोवर्ल्ड उदाहरण । लाइसेंस: LGPL + EPL।

JUNG2 भी JDraphT के समान डेटा संरचना के साथ एक BSD- लाइसेंस प्राप्त पुस्तकालय है। यह लेआउट एल्गोरिदम प्रदान करता है, जो वर्तमान में JGraphT में गायब हैं। सबसे हालिया प्रतिबद्धता 2010 से है और पैकेज hep.aida.*एलजीपीएल ( कोल्ट लाइब्रेरी के माध्यम से , जो जंग द्वारा आयात किया जाता है ) हैं। यह जंग को एएसएफ और ईएसएफ की छतरी के नीचे परियोजनाओं में इस्तेमाल होने से रोकता है। हो सकता है कि किसी को जीथब फोर्क का इस्तेमाल करना चाहिए और उस निर्भरता को दूर करना चाहिए । प्रतिबद्ध f4ca0cd अंतिम सीवीएस कमिट को मिरर कर रहा है। वर्तमान कमेंट्स विज़ुअलाइज़ेशन की कार्यक्षमता को दूर करने के लिए प्रतीत होते हैं। प्रतिबद्ध d0fb491c एक जोड़ता है .gitignore

प्रीफ्यूज़ एक मैट्रिक्स संरचना का उपयोग करके ग्राफ़ को संग्रहीत करता है, जो विरल ग्राफ़ के लिए स्मृति कुशल नहीं है। लाइसेंस: बीएसडी

एक्लिप्स जेस्ट ने ग्राफ लेआउट एल्गोरिदम में बनाया है, जिसका उपयोग स्वतंत्र रूप से SWT के रूप में किया जा सकता है। Org.eclipse.zest.layouts.algorithms देखें । उपयोग की गई ग्राफ़ संरचना ग्रहण ड्रा 2 डी में से एक है , जहां नोड स्पष्ट वस्तुएं हैं और जेनरिक के माध्यम से इंजेक्ट नहीं की जाती हैं (जैसा कि अपाचे कॉमन्स ग्राफ, जेग्राफ, और जंग 2 में होता है)।


12

http://neo4j.org/ एक ग्राफ़ डेटाबेस है जिसमें अधिकांश ग्राफ़िक्स एल्गोरिदम और तराजू शामिल हैं जो अधिकांश इन-मेमोरी लाइब्रेरी से बेहतर हैं।


1
क्या कोई Neo4J क्लाइंट (जावा क्लाइंट) है जहाँ आप इसकी कल्पना कर सकते हैं?
विश्राम

10

एक विश्वविद्यालय परियोजना में मैंने yWorks द्वारा yFiles के साथ खिलौने बनाए और पाया कि इसमें बहुत अच्छा एपीआई था।


मैंने डेटा आइटम (एक वाणिज्यिक सॉफ़्टवेयर प्लेटफ़ॉर्म के भाग के रूप में) के बीच अन्योन्याश्रयता के दृश्य के लिए yFiles का उपयोग किया है। मैं वास्तव में किसी भी ग्राफ विश्लेषण एल्गोरिदम का उपयोग नहीं किया है, लेकिन जाँच लें कि y.algo पैकेज आपको क्या चाहिए है: yworks.com/products/yfiles/doc/api
Jonik

2
yFiles, ओपनसोर्स नहीं है, लेकिन वाणिज्यिक लाइसेंस प्रदान करता है
koppor

9

बाहर की जाँच ब्लूप्रिंट :

ब्लूप्रिंट गुण ग्राफ डेटा मॉडल के लिए इंटरफेस, कार्यान्वयन, ou कार्यान्वयन, और परीक्षण सूट का एक संग्रह है। ब्लूप्रिंट JDBC के अनुरूप है, लेकिन ग्राफ डेटाबेस के लिए। TinkerPop ओपन सोर्स सॉफ्टवेयर स्टैक के भीतर, ब्लूप्रिंट के लिए मूलभूत प्रौद्योगिकी के रूप में कार्य करता है:

पाइप्स : एक आलसी, डेटा प्रवाह की रूपरेखा

ग्रेमलिन : एक ग्राफ ट्रैवर्सल भाषा

फ्रेम्स : ऑब्जेक्ट-टू-ग्राफ मैपर

फर्नेस : एक ग्राफ एल्गोरिदम पैकेज

Rexster : एक ग्राफ सर्वर



7

JDSL (जावा में डेटा स्ट्रक्चर्स लाइब्रेरी) अच्छा होना चाहिए अगर आप ग्राफ एल्गोरिदम में हैं - http://www.cs.brown.edu/cgc/jdsl/


इसके लिए धन्यवाद, मैं इसके पार कभी नहीं आता। क्या आप इसका उपयोग कर रहे हैं?
निक फॉरेस्क्यूफ

1
हां, मैं इसका इस्तेमाल कर रहा हूं। मैंने 4 साल पहले शायद इसका इस्तेमाल करना शुरू कर दिया था। अब तक बहुत अच्छा है, मैं चाहता हूं कि .NET का एक पोर्ट भी हो।
mr.sverrir

अफसोस की बात है कि jdsl.org पेज अब एक स्पैम पेज बन गया है।
रॉस जुडसन

1
मैंने मूल पोस्ट में लिंक अपडेट किया है। धन्यवाद।
mr.sverrir

5

विज़ुअलाइज़ेशन के लिए हमारे समूह को प्रीफ़्यूज़ के साथ कुछ सफलता मिली । हमने इसे वास्तुशिल्प फ़्लोरप्लेज़ और बबल डायग्रामिंग को संभालने के लिए बढ़ाया, और इसने बहुत अधिक शिकायत नहीं की। उनके पास एक नया फ्लेक्स टूलकिट है जिसे फ्लेयर भी कहा जाता है जो बहुत ही समान एपीआई का उपयोग करता है।

अद्यतन: मुझे टिप्पणी के साथ सहमत होना होगा, हमने बहुत सी कस्टम कार्यक्षमता / प्रीफ्यूज़ सीमाओं के आसपास काम करना समाप्त कर दिया है। मैं यह नहीं कह सकता कि खरोंच से शुरू करना बेहतर होगा, क्योंकि हम पहले दिन से प्रीफ्यूज का उपयोग करके प्रगति को प्रदर्शित करने में सक्षम थे। दूसरी ओर अगर हम एक ही सामान का दूसरा कार्यान्वयन कर रहे थे, तो मैं पहले से ही छोड़ सकता हूँ क्योंकि हम आवश्यकताओं को बहुत बेहतर समझेंगे।


प्रीफ्यूज़ के साथ आपके व्यक्तिगत विचार क्या थे? मेरी आखिरी नौकरी में, एक परियोजना ने इसका उपयोग करना शुरू कर दिया, लेकिन प्रीफ्यूज के संस्करण में 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

जावा में निर्देशात्मक ग्राफ एल्गोरिथ्म कार्यान्वयन यहाँ पाया जा सकता है (प्रोफेसर द्वारा। सेडग्विक एट अल।): http://algs4.cs.princeton.edu/code/

मुझे इन असाधारण एल्गोरिथ्म पाठ्यक्रम में शामिल होने के दौरान उनसे परिचय कराया गया था (प्राध्यापक द्वारा पढ़ाया गया। सेडगविक)।

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

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


0

यदि आप वास्तव में चार्टिंग लाइब्रेरी की तलाश कर रहे हैं और नोड / एज ग्राफ़ लाइब्रेरी के लिए नहीं, तो मैं बिग फेसलेस ग्राफ लाइब्रेरी ( बीएफजी ) पर चर्चा करना चाहूंगा । यह JFreeChart की तुलना में उपयोग करने के लिए आसान है, अच्छा लग रहा है, तेजी से चलता है, अधिक आउटपुट विकल्प हैं, वास्तव में कोई तुलना नहीं है।


आपने प्रश्न को गलत समझा: यह उस तरह के ग्राफ़ के बारे में है जिसमें नोड्स और किनारे हैं, न कि जिस तरह से पीज़ और बार हैं।
अमरनाथ

-1

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

रेखांकन (प्रत्यक्ष या अप्रत्यक्ष) के साथ काम करने के लिए एक शक्तिशाली सॉफ्टवेयर प्रदान करता है। इसके अलावा ग्राफिवेज कोड उत्पन्न करता है, आप ग्राफिक्स अभ्यावेदन देख सकते हैं। आप अपने स्वयं के कोड एल्गोरिदम को पाजेब में रख सकते हैं, उदाहरण के लिए: बैकट्रैकिंग कोड। पैकेज कुछ एल्गोरिदम प्रदान करता है: दिज्क्स्त्र, न्यूनतम पथ लागत, ect ..

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.