سؤال

لدي مجموعة من شجرة الكائنات مع عمق في مكان ما في 20s.كل من العقد في هذه الشجرة يحتاج إلى الوصول إلى شجرة الجذر.

اثنين من الحلول:

  1. كل عقدة يمكن تخزين إشارة إلى الجذر مباشرة (النفايات الذاكرة)
    • أنا يمكن بحساب الجذر في وقت التشغيل عن طريق "الصعود" (النفايات دورات)
    • يمكنني استخدام حقول ثابتة (ولكن هذا لا يرقى إلى جلوبل)

يمكن للشخص تقديم التصميم الذي لا يستخدم العالمية (في أي شكل) ولكن أكثر كفاءة هذا #1 أو #2 في كل من الذاكرة أو دورات على التوالي ؟

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

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

المحلول

تمر الجذر كمعلمة إلى أيهما وظائف في العقدة التي تحتاج إليها.

تحرير:الخيارات هي حقا التالية:

  1. متجر الجذر الإشارة في عقدة
  2. لا تقم بتخزين الجذر المرجعية في كل
  3. متجر الجذر الإشارة في عالمي
  4. متجر الجذر إشارة على المكدس (اقتراحي ، إما الزائر نمط أو متكررة)

أعتقد أن هذا كل الاحتمالات, لا يوجد خيار 5.

نصائح أخرى

لماذا عليك القيام به بعيدا مع جلوبل?أنا أفهم وصمة globals كونها سيئة لكن في بعض الأحيان مجرد وجود البيانات العالمية هيكل مع جميع العناصر هو أسرع حل.

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

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

تحرير:واحدة من تطبيقات أعمل على عقدة شجرة تحتوي على حوالي 55K العقد.ونحن بناء هيكل الشجرة ولكن أيضا الحفاظ على مجموعة س(1) عمليات البحث.أفضل بكثير ثم O(m*n) كنا نحصل عند استخدام العودية FindNodeByID الأسلوب.

مرور الجذر كما paramter عموما أفضل.إذا كنت تستخدم نوعا من التكرار للتنقل الشجرة بديل هو متجر إشارة إلى الجذر في ذلك.

نقطة رقم 1 هو سابق لأوانه تحسين الذاكرة.#2 هو سابق لأوانه الأداء الأمثل.هل لمحة التطبيق الخاص بك لتحديد ما إذا كانت الذاكرة أو وحدة المعالجة المركزية الاختناقات تسبب لك المشاكل ؟ إذا لم يكن كذلك ، لماذا التضحية أكثر للصيانة تصميم "تحسين" هذا لا يساعد المستخدمين ؟

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

هل يمكن اشتقاق فئة من TreeView ثم إضافة المفرد ساكنة الملكية.وبهذه الطريقة يتم بشكل فعال إضافة العالمية في مجال مراجع مثيل واحد من الدرجة ولكن تستفيد من كونها مساحة نطاقها إلى تلك الفئة.

تجاهل نفوره من الطبقات الداخلية, أنا يمكن تعريف شجرة فئة وتحديد العقد الطبقات الداخلية.كل من العقد سيكون لديك الوصول إلى الشجرة الدولة بما في ذلك جذوره.

هذا قد ينتهي الأمر نفسه كما #1 اعتمادا على كيفية جافا ويتعلق العقد إلى والديهم.(أنا لست متأكدا من أنني سوف تضطر إلى تعريف ذلك)

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