java करण अच्छा जावा ग्राफ एल्गोरिदम पुस्तकालय?




पुस्तकालय वर्गीकरण प्रायोगिक (15)

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

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


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


मुझे नहीं पता कि मैं इसे उत्पादन तैयार jGABL , लेकिन jGABL


यदि आपको प्रदर्शन की आवश्यकता है, तो आप Grph पर एक नज़र डाल सकते हैं। पुस्तकालय फ्रेंच विश्वविद्यालय और सीएनआरएस / इरिया में विकसित किया गया है।

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

परियोजना सक्रिय है और प्रतिक्रियाशील समर्थन प्रदान किया जाता है!


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

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


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

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

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

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

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

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


JGraphT को एक बहुत ही सरल और शक्तिशाली जावा ग्राफ लाइब्रेरी के लिए देखें जो बहुत अच्छी तरह से किया जाता है और, किसी भी भ्रम को दूर करने के लिए, जेजीआरफ़ से अलग है । कुछ नमूना कोड :

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

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

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


सारांश:

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

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


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


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


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


Blueprints :

ब्लूप्रिंट्स संपत्ति ग्राफ डेटा मॉडल के लिए इंटरफेस, कार्यान्वयन, निष्पादन, और परीक्षण सूट का संग्रह है। ब्लूप्रिंट जेडीबीसी के समान है, लेकिन ग्राफ डेटाबेस के लिए। टिंकरपॉप ओपन सोर्स सॉफ़्टवेयर स्टैक के भीतर, ब्लूप्रिंट्स के लिए आधारभूत तकनीक के रूप में कार्य करता है:

Pipes : एक आलसी, डेटा प्रवाह ढांचे

Gremlin : एक ग्राफ ट्रैवर्सल भाषा

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

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

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


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

Coursera पर इन असाधारण एल्गोरिदम पाठ्यक्रमों में भाग लेने के दौरान मुझे उनके साथ पेश किया गया था (प्रोफेसर सेडगेविक द्वारा भी सिखाया गया):

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

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


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





graph