java - पुस्तकालय वर्गीकरण प्रायोगिक




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

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

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


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 में होता है)।


एनास को एक ओपन सोर्स ग्राफ पैकेज आज़माएं जो कि पकड़ने में आसान है

http://annas.googlecode.com


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

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

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

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


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


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


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

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

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


यह भी आश्वस्त होना अच्छा है कि एक ग्राफ को इस प्रकार प्रदर्शित किया जा सकता है:

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

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

आप सबसे आम एल्गोरिदम के लिए आसन्नता मैट्रिक्स भी पसंद कर सकते हैं:

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

या कुछ परिचालनों के लिए एक मैट्रिक्स:

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

सारांश:

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

http://incubator.apache.org/hama/ बड़े पैमाने पर मैट्रिक्स और ग्राफ़ डेटा के लिए हैडोप पर एक वितरित वैज्ञानिक पैकेज है।


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


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







graph