مكتبة خوارزمية الرسم البياني جافا جيدة؟[مغلق]

StackOverflow https://stackoverflow.com/questions/51574

  •  09-06-2019
  •  | 
  •  

سؤال

هل كان لدى أي شخص تجارب جيدة مع أي مكتبات Java لخوارزميات الرسم البياني.لقد حاولت JGraph ووجدتها على ما يرام، وهناك الكثير من العناصر المختلفة في Google.هل هناك أي شيء يستخدمه الأشخاص بالفعل بنجاح في كود الإنتاج أو قد يوصون به؟

للتوضيح، أنا لا أبحث عن مكتبة تنتج رسومًا بيانية/مخططات، أنا أبحث عن مكتبة تساعد في خوارزميات الرسم البياني، على سبيل المثال الحد الأدنى من الشجرة الممتدة، وعقد خوارزمية كروسكال، والحواف، وما إلى ذلك.من الناحية المثالية، تحتوي على بعض الخوارزميات/هياكل البيانات الجيدة في Java OO API اللطيفة.

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم JGraph، فيجب عليك تجربته JGraphT والذي تم تصميمه للخوارزميات.إحدى ميزاته هي التصور باستخدام مكتبة JGraph.لا يزال متطورًا، لكنه مستقر جدًا.لقد قمت بتحليل مدى تعقيد خوارزميات JGraphT منذ بعض الوقت.بعضها ليس الأسرع، ولكن إذا كنت ستنفذها بنفسك وتحتاج إلى عرض الرسم البياني الخاص بك، فقد يكون هذا هو الخيار الأفضل.لقد أحببت حقًا استخدام واجهة برمجة التطبيقات الخاصة به، عندما اضطررت بسرعة إلى كتابة تطبيق يعمل على الرسم البياني وعرضه لاحقًا.

نصائح أخرى

ملخص:

الدفع 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);

يونغ يعد خيارًا جيدًا للتصور، ويحتوي أيضًا على مجموعة جيدة إلى حد ما من خوارزميات الرسم البياني المتاحة، بما في ذلك العديد من الآليات المختلفة لإنشاء رسم بياني عشوائي، وتجديد الأسلاك، وما إلى ذلك.لقد وجدت أيضًا أنه من السهل إلى حد ما التوسع والتكيف عند الضرورة.

عروض أباتشي كومنز الرسم البياني المشاعات.تحت http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ يمكن للمرء فحص المصدر.نموذج استخدام API هو في SVN, ، أيضاً.يرى https://issues.Apache.org/jira/browse/SANDBOX-458 للحصول على قائمة بالخوارزميات المنفذة، ومقارنتها أيضًا بـ Jung، وGraphT، وPrefuse، jBPT

جوجل الجوافة إذا كنت بحاجة إلى هياكل بيانات جيدة فقط.

JGraphT هي مكتبة رسوم بيانية تحتوي على العديد من الخوارزميات المطبقة ولديها (في رأيي) نموذج رسم بياني جيد. مثال مرحبا بالعالم.رخصة:إل جي بي إل + الدوري الإنجليزي.

JUNG2 هي أيضًا مكتبة مرخصة من BSD ولها بنية بيانات مشابهة لـ JGraphT.وهو يقدم خوارزميات التخطيط، وهي مفقودة حاليًا في JGraphT.أحدث التزام هو من عام 2010 والحزم hep.aida.* هي LGPL (عبر مكتبة كولت, ، أيّ يتم استيراده بواسطة JUNG).وهذا يمنع استخدام JUNG في المشاريع تحت مظلة ASF وESF.ربما ينبغي للمرء استخدام شوكة جيثب وإزالة تلك التبعية. ارتكاب f4ca0cd يعكس التزام CVS الأخير.يبدو أن الالتزامات الحالية تزيل وظيفة التصور. ارتكاب d0fb491c يضيف أ .gitignore.

Prefuse يخزن الرسوم البيانية باستخدام بنية مصفوفة، وهي ليست فعالة في الذاكرة بالنسبة للرسوم البيانية المتفرقة.رخصة:بي إس دي

الكسوف تلذذ قام ببناء خوارزميات تخطيط الرسم البياني، والتي يمكن استخدامها بشكل مستقل عن SWT.يرى org.Eclipse.zest.layouts.algorithms.هيكل الرسم البياني المستخدم هو واحد من كسوف Draw2d, ، أين العقد هي كائنات صريحة ولا يتم حقنه عبر الأدوية العامة (كما يحدث في Apache Commons Graph وJGraphT وJUNG2).

http://neo4j.org/ هي قاعدة بيانات للرسم البياني تحتوي على العديد من خوارزميات الرسم البياني ومقاييسه بشكل أفضل من معظم مكتبات الذاكرة.

في أحد مشاريع الجامعة قمت بالتلاعب بـ yFiles بواسطة yWorks ووجدت أنه يحتوي على واجهة برمجة تطبيقات جيدة جدًا.

الدفع المخططات:

المخططات عبارة عن مجموعة من الواجهات والتطبيقات والإضافات ومجموعات الاختبار لنموذج بيانات الرسم البياني للملكية.المخططات مشابهة لـ JDBC، لكنها مخصصة لقواعد بيانات الرسوم البيانية.ضمن مجموعة برامج TinkerPop مفتوحة المصدر، تعمل Blueprints كتقنية أساسية من أجل:

أنابيب:إطار عمل كسول لتدفق البيانات

شبح:لغة اجتياز الرسم البياني

إطارات:مخطط كائن إلى رسم بياني

فرن:حزمة خوارزميات الرسم البياني

ريكسستر:خادم الرسم البياني

http://incubator.Apache.org/hama/ عبارة عن حزمة علمية موزعة على Hadoop لبيانات المصفوفة والرسوم البيانية الضخمة.

يجب أن تكون JDSL (مكتبة هياكل البيانات في Java) جيدة بما يكفي إذا كنت من محبي خوارزميات الرسم البياني - http://www.cs.brown.edu/cgc/jdsl/

للتصور حققت مجموعتنا بعض النجاح prefus.لقد قمنا بتوسيعها للتعامل مع ألواح الأرضية المعمارية والمخططات الفقاعية، ولم تشتكي كثيرًا.لديهم مجموعة أدوات Flex جديدة تسمى أيضًا Flare والتي تستخدم واجهة برمجة تطبيقات مشابهة جدًا.

تحديث:يجب أن أتفق مع التعليق، لقد انتهى بنا الأمر إلى كتابة الكثير من الوظائف المخصصة/التغلب على القيود المسبقة.لا أستطيع أن أقول إن البدء من الصفر كان سيكون أفضل على الرغم من أننا تمكنا من إظهار التقدم من اليوم الأول باستخدام prefuse.من ناحية أخرى، إذا كنا نقوم بتنفيذ ثاني لنفس الأشياء، فقد أتخطى prefuse لأننا سنفهم المتطلبات بشكل أفضل كثيرًا.

جرب Annas، فهي حزمة رسومية مفتوحة المصدر يسهل التعامل معها

http://annas.googlecode.com

من الجيد أيضًا أن تكون مقتنعًا بأنه يمكن تمثيل الرسم البياني ببساطة كما يلي:

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

وقم بتنفيذ معظم الخوارزميات التي تجدها مثيرة للاهتمام بنفسك.إذا صادفك هذا السؤال في منتصف إحدى جلسات التدريب/التعلم حول الرسوم البيانية، فهذا هو أفضل ليب يجب مراعاته.;)

يمكنك أيضًا تفضيل مصفوفة الجوار لمعظم الخوارزميات الشائعة:

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

أو مصفوفة لبعض العمليات :

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

لا أعرف إذا كنت سأسميها جاهزة للإنتاج، ولكن هناك jGABL.

إذا كنت بحاجة إلى الأداء، يمكنك إلقاء نظرة على Grph.تم تطوير المكتبة في الجامعة الفرنسية والمركز الوطني للبحث العلمي/إنريا.

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

المشروع نشط ويتم توفير الدعم التفاعلي!

يمكن العثور على تطبيقات خوارزمية الرسم البياني التعليمي في جافا هنا (بواسطة الأستاذ.سيدجويك وآخرون):http://algs4.cs.princeton.edu/code/

لقد تعرفت عليهم أثناء حضوري دورات الخوارزمية الاستثنائية هذه على كورسيرا (التي يدرسها أيضًا البروفيسور.سيدجويك):

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

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

إذا كنت تبحث بالفعل عن مكتبات الرسوم البيانية وليس عن مكتبات Node/Edge Graph، فإنني أقترح الإسراف في شراء مكتبة Big Faceless Graph (بفج).إنه أسهل في الاستخدام من JFreeChart، ويبدو أجمل، ويعمل بشكل أسرع، ويحتوي على المزيد من خيارات الإخراج، ولا يوجد مقارنة حقًا.

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

يوفر برنامجًا قويًا للعمل مع الرسوم البيانية (المباشرة أو غير المباشرة).يقوم أيضًا بإنشاء كود Graphivz، ويمكنك رؤية تمثيلات الرسومات.يمكنك وضع خوارزميات التعليمات البرمجية الخاصة بك في الحزمة، على سبيل المثال:رمز التراجع.توفر الحزمة بعض الخوارزميات:Dijkstra، التراجع عن تكلفة المسار الأدنى، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top