Jgrapht: تحسين تنفيذ تلوين الرسم البياني (Brelaz DFS والمزيد)

تم إنشاؤها على ١٨ أبريل ٢٠١٩  ·  5تعليقات  ·  مصدر: jgrapht/jgrapht

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

وبالتالي ، فإن ناتج هذه الخوارزميات عبارة عن رسم بياني ملون بالكامل يستخدم نفس كمية الألوان مثل الرقم اللوني.

لقد قمنا بدمج هذه الخوارزميات في مكتبة JGrapht. هل هذا شيء قد يثير اهتمامك؟

التعليق الأكثر فائدة

سيكون بالتأكيد من الفائدة.

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

علاوة على ذلك ، لدينا بالفعل بعض خوارزميات التلوين الجشعة. على سبيل المثال ، تم تنفيذ خوارزمية الكشف عن مجريات الأمور DSATUR في الفئة SaturationDegreeColoring .

إذا كنت تقصد بـ DSATUR الفرع الدقيق وخوارزمية DSATUR المقيدة بواسطة Brelaz ، فإننا نفتقد ذلك وسيكون من الرائع تضمينه في المكتبة. علاوة على ذلك ، فإن الإصدارات المحسّنة مثل خوارزمية PASS هي أيضًا موضع ترحيب كبير.

ال 5 كومينتر

سيكون بالتأكيد من الفائدة.

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

علاوة على ذلك ، لدينا بالفعل بعض خوارزميات التلوين الجشعة. على سبيل المثال ، تم تنفيذ خوارزمية الكشف عن مجريات الأمور DSATUR في الفئة SaturationDegreeColoring .

إذا كنت تقصد بـ DSATUR الفرع الدقيق وخوارزمية DSATUR المقيدة بواسطة Brelaz ، فإننا نفتقد ذلك وسيكون من الرائع تضمينه في المكتبة. علاوة على ذلك ، فإن الإصدارات المحسّنة مثل خوارزمية PASS هي أيضًا موضع ترحيب كبير.

مهلا! من الجيد سماع أن هناك مصلحة! أنا أتحدث بالفعل عن فرع وخوارزمية DSATUR منضم لـ Brelaz. قد يكون تحميله في طلب سحب مختلف صعبًا بعض الشيء بسبب التبعيات الداخلية. نظرًا لأن كل خوارزميات التراجع الثلاثة هذه بها الكثير من أوجه التشابه ، فقد قررنا أن يكون لدينا هيكل وراثي للحد من الكود المكرر. إنه مشابه للهيكل المستخدم لـ BaseBronKerboschCliqueFinder وفئاته الفرعية اللاحقة. علاوة على ذلك ، يتم استخدام أداة cliquefinder في خوارزميات التراجع لتلوين أفضل زمرة مسبقًا. يمكننا إزالة هذا من خوارزميات التراجع واستخدام مكتشف الزمر bronkerbosch بدلاً من ذلك إذا كان ذلك سيكون أفضل. سيكون الحجم الإجمالي لطلب السحب الكامل 5 ملفات فئة بالإضافة إلى (BaseBackTrack و BackTrackColoringBrown و BackTrackColoringDSATUR و BackTrackColoringPass و PattabiramanMaximumCliqueFinder) حالات الاختبار الخاصة بها. ما هي نصيحتك بخصوص طلب السحب في هذه الحالة؟

هل يمكننا الانقسام إلى طلبين سحب؟

  • علاقات عامة واحدة مع مكتشف الزمرة ، والتي يمكنها تنفيذ واجهة CliqueAlgorithm
  • علاقات عامة واحدة مع خوارزميات التلوين الثلاثة + الفئة الأساسية.

من أجل فصل الجزأين ، يمكن أن تتوقع خوارزميات التلوين كوسيطة مُنشئ ، وهي وظيفة من شأنها إرجاع خوارزمية الزمرة المرغوبة. أعتقد أن شيئًا مثل Function<Graph<V,E>, CliqueAlgorithm<V>> يمكن أن يفي بالغرض.

نستخدم أيضًا نظام تسمية مختلفًا قليلاً. نفضل BaseBacktrackColoring, BrownBacktrackColoring, PassBacktrackColoring, DsaturBacktrackColoring .

شكرا لك على ملاحظاتك. سنحاول تقديم طلب سحب معًا في أقرب وقت ممكن. علاوة على ذلك ، في الوقت الحالي ، ستعيد خوارزمية الزمرة الخاصة بنا مجموعة واحدة فقط كحد أقصى (أي واحدة مع أكثر القمم مجتمعة). لقد فعلنا هذا لأنه يجعل الحساب أسرع ، ونحن مهتمون فقط بالتلوين المسبق لعصابة واحدة. ومع ذلك ، بناءً على خوارزميات الزمرة ، من الشائع إرجاع مجموعة من جميع المجموعات القصوى. هل تفضل أن ننفذ هذا أيضًا ، ثم نجعله جزءًا من واجهة MaximalCliqueEnumerationAlgorithm الخاصة بك؟

MaximalCliqueEnumerationAlgorithm هو واجهة للخوارزميات التي تعدد مجموعات "الحد الأقصى" ولكن ليس بالضرورة "الحد الأقصى".

إذا كان تطبيقك يبحث عن الحد الأقصى من الزمرة ، فسيكون من الأفضل تنفيذ CliqueAlgorithm .

بعد إلقاء نظرة سريعة على الورقة التي أعدها باتابيرامان وآخرون ، سيكون من الأفضل إعادة تسمية الفصل بشيء لا يسمي الخوارزمية باستخدام المؤلف الأول فقط. ربما شيء مثل PPGLCMaximumCliqueFinder . عادةً ما نقوم أيضًا بتضمين المراجع المناسبة في Javadoc.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

haerrel picture haerrel  ·  5تعليقات

jsichi picture jsichi  ·  12تعليقات

jsichi picture jsichi  ·  12تعليقات

nikhilbhardwaj picture nikhilbhardwaj  ·  3تعليقات

simlu picture simlu  ·  14تعليقات