الأشجار
القسم 2.2 الأشجار
الأهداف
بعد إتمام هذا القسم، ينبغي أن تكون قادرًا على ما يلي.
- اثبت حقائقَ أساسية عن الأشجار.
- استعمل مبرهيناتَ عن الأشجار لحل المسائل.
- ميّز بين الأشجار الممتدة (spanning trees) وأنشئها.
معاينة القسم
استكشف!
تأمّل الرسم البياني المرسوم أدناه.
- أوجد رسمًا فرعيًا بأصغر عدد ممكن من الحوافّ يبقى متصلًا ويحتوي على جميع الرؤوس.
- أوجد رسمًا فرعيًا بأكبر عدد ممكن من الحوافّ لا يحتوي على أيّ دورة.
- ما الذي تلاحظه في عدد الحوافّ في أمثلتك أعلاه؟ هل هذا مصادفة؟
إحدى أكثر طرائق دراسة نظرية الرسوم البيانية نفعًا وشيعًا هي أن تقتصر على رسومَ بيانية من نوعٍ بعينه. فمثلًا، يمكنك أن تحاول أن تفهم فهمًا حقيقيًّا الرسومَ البيانية الكاملة (complete graphs) وحدها، أو الرسومَ البيانية ثنائيةَ الطرف (bipartite graphs) وحدها، بدلًا من محاولة فهم جميع الرسوم البيانية على العموم. وهذا هو ما سنفعله الآن، إذ سننظر في الأشجار (trees). ونرجو أن يكون في وسعنا في نهاية هذا القسم أن نفهم هذه الفئة من الرسوم البيانية فهمًا أفضل، وأيضًا أن نفهم لماذا هي مهمةٌ بما يكفي لاستحقاق قسمٍ خاصٍّ بها.
تعريف 2.2.1. الأشجار والغابات.
الشجرة (tree) رسمٌ بياني متصل لا يحتوي على أيّ دورة. 4 وأحيانًا تُصاغ هذه العبارة على النحو: «الشجرة رسمٌ بياني متصل لا دوريّ (acyclic)»؛ فكلمة «لا دوريّ» ليست سوى كلمةٍ فخمة بالمعنى «لا يحتوي على دورات».
والغابة (forest) رسمٌ بياني لا يحتوي على أيّ دورة. ولاحظ أنّ هذا يعني أنّ الغابة المتصلة شجرة.
أفيوافق التعريف أعلاه حدسك فيما ينبغي أن نسمّيه شجرةً من الرسوم البيانية؟ حاول أن تفكّر في أمثلة للأشجار، وتأكّد من أنّها تحقّق التعريف. ومن الأمور التي يجدر بك تذكّرها أنّ الأشجار التي ندرسها في نظرية الرسوم البيانية ترتبط بالأشجار التي قد تراها في تخصّصاتٍ أخرى، غير أنّ هذا الارتباط ليس تامًّا. فمثلًا، في علم الأنساب (anthropology) قد تدرس أشجارَ العائلة (family trees)، مثل التي أدناه،
! ويبدو الأمر حسنًا إلى هذا الحدّ، لكن مع أنّ جدّيك (على الأرجح) ليسا من الدم نفسه، فإنّنا إذا عدنا في النسب إلى الخلف بما يكفي، فمن المرجّح أن يكون لهما سلفٌ مشترك واحدٌ على الأقلّ. وإن تتبّعتَ الشجرة منك عائدًا إلى ذلك الجدّ المشترك، ثمّ نزلتَ فيها عبر جدّك الآخر، لوجدتَ دورة، ومن ثمّ لا يكون الرسم البياني شجرة.
ولعلّك صادفت أيضًا شيئًا يُسمّى شجرة قرار (decision tree)، مثل الخوارزمية التي تقرّر ما إذا كان متتاليةٌ ما متقاربة أم متباعدة. وأحيانًا تحتوي هذه أيضًا على دورات، إذ قد يقودك القرار المتّخذ في عقدةٍ ما إلى العودة إلى خطوةٍ سابقة.
وفي مثالَي الشجرة أعلاه خاصيةٌ أخرى جديرة بالذكر: إذ إنّ لرؤوس الشجرة ترتيبًا واضحًا. فلا يتضمّن تعريف الشجرة هذه البنية المضافة، غير أنّه يمكننا فرض بنيةٍ من هذا النوع بالنظر في الأشجار الجذورية (rooted trees)، حيث نكتفي بتعيين رأسٍ واحد بوصفه الجذر (root). وسننظر في هذه الأشجار بتفصيلٍ أكثر لاحقًا في هذا القسم.
وفي هذا القسم سنستكشف بعض الخواصّ الأساسية للأشجار، وستكون مقدّمةً ممتازة لكتابة البراهين عن الرسوم البيانية. وسننظر أيضًا في نوعٍ خاصّ من الأشجار يُسمّى الشجرة الممتدة (spanning tree)، وهي شجرة تتضمّن جميع رؤوس رسمٍ بياني متصل. وأخيرًا سننظر بإيجاز في الأشجار الجذورية.
ورقة العمل: نشاط تمهيدي
1.
خُذ ورقةً وارسم 8 رؤوس في دائرة.
وسنضيف حوافّ إلى هذا الرسم البياني مستوفين بعض الشروط.
(a)
أوّلًا، أضف أصغر عدد ممكن من الحوافّ بحيث يصبح الرسم البياني الناتج متصلًا. أي أنّه يجب أن يكون هناك مسارٌ بين كلّ زوج من الرؤوس (والمسار قد يستعمل أكثر من حافة، بالطبع).
كم حافةً في الرسم البياني الذي رسمته؟
(b)
هل كان الرسم البياني الناتج الذي وجدتَه شجرةً؟
- نعم، لأنّ الرسم البياني متصل ولا يحتوي على دورات
- لا، الرسم البياني يحتوي على دورة
- لا، الرسم البياني غير متصل
- لا، الرسم البياني غير متصل ويحتوي على دورة
(c)
والآن ابدأ من جديد برسمٍ بياني فارغ. وفي هذه المرّة، أضف أكبر عدد ممكن من الحوافّ بحيث لا يحتوي الرسم البياني الناتج على أيّ دورة.
كم حافةً في الرسم البياني الذي رسمته؟
(d)
هل كان الرسم البياني الناتج الذي وجدتَه شجرةً؟
- نعم، لأنّ الرسم البياني متصل ولا يحتوي على دورات
- لا، الرسم البياني يحتوي على دورة
- لا، الرسم البياني غير متصل
- لا، الرسم البياني غير متصل ويحتوي على دورة
قسم فرعي: خواصّ الأشجار
نريد أن نفهم الأشجار فهمًا حقيقيًّا. أي ينبغي أن نكتشف خواصّ الأشجار: ما الذي يجعلها مميّزة، وما الذي يميّز خواصّها.
الشجرة رسمٌ بياني متصل لا يحتوي على دورات. فهل هناك ما يمكننا قوله أيضًا؟ سيكون من الجيّد أن تتوفّر لدينا شروطٌ أخرى مكافئة كي يكون الرسم البياني شجرة. أي نودّ أن نعرف ما إذا كانت هناك خواصّ في نظرية الرسوم البيانية تملكها جميع الأشجار، بل وحتى يقتصر عليها الأشجار وحدها.
وكي نتمكّن من تلمّس نوع ما يمكننا قوله، سننظر في ثلاث دعاوى (propositions) عن الأشجار. وهذه ستوضّح أيضًا تقنياتَ براهين مهمّة تنطبق على الرسوم البيانية على العموم، وتكون أصعب قليلًا في حالة الأشجار.
أمّا الدعوى الأولى فتقدّم تعريفًا بديلًا للشجرة. أي أنّها تعطي الشرطين اللازم والكافي كي يكون الرسم البياني شجرة.
دعوى 2.2.2.
الرسم البياني يكون شجرةً إذا وفقط إذا كان بين كلّ زوج من الرؤوس المتمايزة في مسارٌ فريد.
البرهان.
هذه عبارة «إذا وفقط إذا»، لذا علينا إثبات استلزامَين. نبدأ بإثبات أنّه إذا كان شجرةً، فإنّ بين كلّ زوج من الرؤوس المتمايزة يوجد مسارٌ فريد.
افترض أنّ شجرة، وليكن و رأسَين متمايزَين (وإذا كان في رأسٌ واحدٌ فقط، فإنّ النتيجة محقّقة تلقائيًّا). علينا إثبات أمرَين لإثبات وجود مسارٍ فريد بين و: وجود مسار، وعدم وجود أكثر من مسار. أمّا الأمر الأول فذلك بداهة؛ ولأنّ شجرة، فإنّها متصلة، ومن ثمّ هناك مسارٌ بين كلّ زوج من الرؤوس.
ولإثبات أنّ المسار فريد، نفترض وجود مسارَين بين و فنصل إلى تناقض. قد يبدأ المساران متطابقَين، لكن بما أنّهما مختلفان، فإنّ هناك رأسًا أوّل تنفرج بعده المساران. غير أنّه، بما أنّ المسارَين ينتهيان معًا عند فإنّ هناك رأسًا أوّل بعد يشتركان فيه، ولنسمّه والآن تأمّل المسارَين من إلى وهذان معًا يشكّلان دورة، وهذا يناقض افتراضنا بأنّ شجرة.
والآن ننظر في العكس: إذا كان بين كلّ زوج من الرؤوس المتمايزة في مسارٌ فريد، فإنّ شجرة. فافترض الفرضية: بين كلّ زوج من الرؤوس المتمايزة في يوجد مسارٌ فريد. ولإثبات أنّ شجرة، علينا إثبات أنّها متصلة ولا تحتوي على دورات.
النصف الأول من هذا سهل: متصلة، لأنّ هناك مسارًا بين كلّ زوج من الرؤوس. ولإثبات أنّ لا تحتوي على دورات، نفترض أنّها تحتوي، طلبًا للتناقض. وليكن و رأسَين متمايزَين في دورةٍ من دورات وبما أنّه يمكننا أن ننتقل من إلى بالذهاب مع اتجاه الساعة أو عكسه حول الدورة، فإنّ هناك مسارَين من إلى ممّا يناقض افتراضنا.
وقد أثبتنا الاتجاهَين، ومن ثمّ أكملنا البرهان.
اقرأ البرهان أعلاه قراءةً متأنّية جدًّا. ولاحظ أنّ في كلّ من الاتجاهين كان هناك جزءان: وجود المسارات، ويونّيّة المسارات (وهذا يتعلّق واقعةً بكونه لا توجد دورات). وفي هذه الحالة كان هذان الجزءان منفصلَين حقًّا. وفي الحقيقة، لو اكتفينا بالنظر في الرسوم البيانية الخالية من الدورات (أي الغابات)، لاستطعنا أن نُجري أجزاء البرهان التي تستكشف يونّيّة المسارات بين الرؤوس، حتى لو لم تكن هناك مسارات موجودة بين الرؤوس.
وتتيح لنا هذه الملاحظة أن نُصوغ النتيجة (corollary) التالية. 5 والنتيجة (corollary) هي نوعٌ آخر من العبارات القابلة للإثبات، مثل الدعوى أو النظرية، غير أنّها تتبع مباشرةً عبارةً أخرى أُثبتت من قبل، أو برهانَها.
نتيجة 2.2.3.
الرسم البياني يكون غابةً إذا وفقط إذا كان بين كلّ زوج من الرؤوس في مسارٌ واحدٌ على الأكثر.
نحن لا نعطي برهانَ النتيجة (فهي، بعد كلّ شيء، يُفترض أن تتبع مباشرةً من الدعوى)، لكن من أجل التمرين نطلب إليك أن تقدّم برهانًا متأنّيًا في التمارين. وحين تفعل ذلك، حاول أن تستعمل البرهان بنقيض المضمون (proof by contrapositive) بدلًا من البرهان بالتناقض.
وتخبرنا الدعوى الثانية أنّ جميع الأشجار لها أوراق (leaves)، أي رؤوسًا من الدرجة الأولى.
دعوى 2.2.4.
أيّ شجرةٍ فيها رأسان على الأقلّ تملك رأسَين من الدرجة الأولى على الأقلّ.
البرهان.
نعطي برهانًا بالتناقض. وليكن شجرةً فيها رأسان على الأقلّ، ونفرض، على خلاف المطلوب، أنّه لا يوجد رأسان من الدرجة الأولى.
وليكن مسارًا في من أطول طولٍ ممكن. وليكن و طرفَي هذا المسار. وبما أنّ لا تملك رأسَين من الدرجة الأولى، فلا بدّ أن يكون أحدهما على الأقلّ من الدرجة الثانية أو أعلى. لنقل إنّ ذلك هو ونحن نعرف أنّ مجاورٌ لرأسٍ ما في المسار لكنّه يجب أن يكون الآن مجاورًا لرأسٍ آخر، لنسمّه
وأين لا يمكن أن يكون رأسًا من رؤوس لأنّه لو كان كذلك لكان بين و مساران متمايزان: الحافة بينهما، والجزء الأول من (حتى ). لكنّ لا يمكن أيضًا أن يكون خارج فإنّه لو كان كذلك لكان هناك مسارٌ من إلى أطول من وهو أطول طولٍ ممكن.
وهذا التناقض يثبت أنّه لا بدّ من وجود رأسَين على الأقلّ من الدرجة الأولى. وفي الحقيقة يمكننا القول بأكثر قليلًا من ذلك: لا بدّ أن يكون لكلٍّ من و درجةٌ واحدة.
والدعوى مفيدةٌ جدًّا عند إثبات عباراتٍ عن الأشجار، لأنّنا نُثبت عباراتٍ عن الأشجار كثيرًا ما بالتعريض (induction). وهذه تقنيةُ برهانٍ نستعرضها بالتفصيل في القسم 4.5، أمّا الآن فنحن لا نحتاج إلّا أن نفهم أنّها مفيدةٌ لمقارنة شجرةٍ معطاةٍ بأشجار أصغر منها. فإلإثبات أنّ أمرًا ما صحيحٌ لشجرةٍ فيها رأسًا، سنفترض أنّ الأمر صحيح لجميع الأشجار التي فيها رأسًا. وبحذف رأسٍ من الدرجة الأولى نحصل على هذه الشجرة الأصغر، ثمّ لا يلزمنا إلّا أن نبيّن أنّ إعادة الرأس إلى مكانه لا تُفسد أمورَنا.
هل توجد شجرةٌ فيها بالضبط 7 رؤوس و7 حوافّ؟ حاول أن ترسم واحدة. وهل يمكن لشجرةٍ فيها 7 رؤوس أن تملك 5 حوافّ فقط؟ وهناك سببٌ جيّد يجعل هذين يبدو مستحيلَي الرسم.
دعوى 2.2.5.
ليكن شجرةً فيها رأسًا و حافة. عندئذٍ
سنثبت أنّ هذه الدعوى صحيحةٌ لكلّ القيم المحتملة لـ ولاحظ أنّه إذا كان فلا بدّ أن تكون في الشجرة حوافّ، إذن نعم، ثمّ يمكننا أن ننظر في الأشجار التي فيها رأسًا (هناك واحدةٌ فقط، وفيها حافة) ثمّ في جميع الأشجار التي فيها رؤوس، ثمّ وهكذا، لكنّ ذلك يستغرق إلى الأبد. حرفيًّا!
وبدلًا من ذلك، سنُجري صيغةً من البرهان بالتناقض تُسمّى المجرمَ الأدنى (minimal criminal). سنفترض أنّ الدعوى غير صحيحة (كما تفعل في أيّ برهان بالتناقض). ويجني هذا أنّ هناك شجرةً أصغر لا تصدّق عليها الدعوى. فإذا كان هذا المثالُ المضادّ الأصغر (أي المجرم الأدنى) فيه رؤوس، فإنّنا نُضمن أنّ جميع الأشجار التي فيها رؤوس ليست أمثلةَ مضادّة. ولنرَ كيف يجري هذا.
البرهان.
افترض، طلبًا للتناقض، أنّ الدعوى ليست صحيحةً لكلّ الأشجار. وليكن شجرةً الدعوى فيها غير صحيحة، وهي التي لها أصغر عددٍ من الرؤوس بين جميع الأمثلة المضادّة. وليكن عددَ رؤوس
وبما أنّ الشجرة الوحيدة ذات الرأس الواحد ليس فيها حوافّ، فلا يمكن أن تكون شجرتُنا ومن ثمّ يمكننا أن نفترض وعلى وجه الخصوص، نعرف من دعوى 2.2.4 أنّ يجب أن تحتوي على رأسٍ واحدٍ على الأقلّ من الدرجة الأولى، لنسمّه
وليكن الشجرةَ الناتجة عن حذف من (مع حافّتها الملاصقة). وبما أنّنا حذفنا ورقة، فإنّ ما زالت شجرة (المساراتُ الفريدة بين أزواج الرؤوس في هي نفسها المساراتُ الفريدة بينها في ).
والآن في عددٌ من الرؤوس يساوي . وبما أنّ كانت أصغر شجرةٍ الدعوى فيها غير صحيحة، فنحن نعلم أنّ الدعوى صحيحةٌ لـ إذن لا بدّ أن يكون في حافةٌ واحدةٌ أقلّ من عدد الرؤوس؛ أي أنّ في عددًا من الحوافّ يساوي . لكنّ في حافةً واحدةً أكثر من إذن فيها حافة. وهذا يناقض افتراضنا بأنّ لا تحقّق الدعوى، وبذلك يكتمل برهانُنا.
قسم فرعي: الأشجار الممتدة
ومن مزايا الأشجار أنّها تمتحنا طرائقَ بسيطةً قليلة للتنقّل بين الرؤوس. فإذا لم يكن رسمٌ بياني متصل شجرة، فلا يزال بإمكاننا استعمال خوارزميات اجتياز (traversal) هذه إن حدّدنا رسمًا فرعيًا هو شجرة.
وقبل ذلك يجدر بنا أن نتأمّل ما إذا كان هذا منطقيًّا أصلًا. فبمعطى أيّ رسمٍ بياني متصل هل يوجد دائمًا رسمٌ فرعي هو شجرة؟ والحقيقة أنّ ذلك سهلٌ فضلًا: يمكنك أن تكتفي بأخذ رأسٍ واحدٍ من أمّا إن أردنا أن تخبرنا هذه الرسم الفرعي بكيفية زيارة جميع الرؤوس، فنريده أن يتضمّن جميع الرؤوس. ونسمّي شجرةً من هذا النوع شجرةً ممتدة (spanning tree).
تعريف 2.2.6.
بمعطى رسمٍ بياني متصل تكون الشجرةُ الممتدة لـ رسمًا فرعيًا من يكون شجرةً ويتضمّن جميع رؤوس
ويتبين أنّ كلّ رسمٍ بياني متصل يملك واحدة (وكثيرًا ما يملك).
نظرية 2.2.7.
كلّ رسمٍ بياني متصل يملك شجرةً ممتدة.
وكيف نعرف ذلك؟ يمكننا أن نعطي خوارزميةً لـالعثور على شجرةٍ ممتدة! ابدأ برسمٍ بياني متصل فإذا لم تكن هناك دورات، فإنّ شجرةً أصلًا وقد انتهينا. وإن كانت هناك دورة، فلتكن أيّ حافةٍ في تلك الدورة، ولنتأمّل الرسمَ البياني الجديد (أي الرسم البياني الذي تحصل عليه بحذف ). فهذه الشجرة ما زالت متصلة: ولأنّ كانت تنتمي إلى دورة، فكان بين طرفيها مساران على الأقلّ. والآن كرّر: إذا لم تكن في دورات، فقد انتهينا؛ وإلّا فعرّف لتكون حيث حافةٌ في دورةٍ ما في وواصل المضيّ قدمًا. ولابدّ أن تتوقّف هذه العمليّة في وقتٍ ما، لأنّ عدد الحوافّ القابلة للحذف محدود. وسيكون الناتجُ شجرةً، وبما أنّنا لم نحذف أيّ رأس، ستكون شجرةً ممتدّة.
وليست هذه بأيّ حال الخوارزميةَ الوحيدة للعثور على شجرةٍ ممتدة. فكان بإمكانك أن تبدأ بالرسم البياني الفارغ وتضيف حوافَّ تنتمي إلى ما دام إضافتُها لا تنشئ دورة. ولك بعض الخيارات في تحديد الحوافّ التي تضيفها أوّلًا: يمكنك دائمًا أن تضيف حافةً مجاورَةً للحوافّ التي أضفتها من قبل (بعد الأولى بالطبع)، أو تضيفها بترتيبٍ آخر. وأيّ شجرةٍ ممتدة تنتهي إليها يعتمد على هذه الاختيارات.
مثال 2.2.8.
أوجد شجرتين ممتدتين مختلفتين للرسم البياني،
الحلّ. إليك شجرتين ممتدتين.
ورغم أنّنا لن نتناول هذا بالتفصيل، فإنّ هذه الخوارزميات تُطبَّق عادةً على الرسوم البيانية المُوزونة (weighted). فهنا لكلّ حافةٍ وزنٌ أو تكاليفُ تُسند إليها. والهدف هو العثور على شجرةٍ ممتدة يكون مجموعُ أوزانها أصغر ما يمكن. وتُسمّى شجرةٌ من هذا النوع شجرةَ الحدّ الأدنى (minimum spanning tree). والعثورُ على شجرة الحدّ الأدنى يستعمل الخوارزميات نفسها التي وصفناها أعلاه في جوهرها، لكن حين تختار حافةً لإضافتها فإنّك تختار دائمًا الأصغر (أو حين تحذف حافةً فإنّك تحذف دائمًا الأكبر). 6 فإذا أضفت أصغر حافةٍ مجاورَةٍ للحوافّ التي أضفتها من قبل، فأنت تستعمل خوارزمية بريم (Prim's algorithm). وإذا أضفت أصغر حافةٍ في الرسم البياني كلّه، فأنت تتبع خوارزمية كروسكال (Kruskal's algorithm).
قسم فرعي: الأشجار الجذورية
حتى الآن كنا ننظر إلى الأشجار بوصفها نوعًا بعينه من الرسوم البيانية فحسب. غير أنّه من المفيد غالبًا أن نضيف إلى الأشجار بنيةً إضافية تساعدنا في حل المسائل. فالبيانات مُنظَّمة في الغالب على صورة شجرة. فكتابنا هذا، مثلًا، له بنيةٌ شجرية: ارسم رأسًا للكتاب نفسه. ثمّ ارسم رأسًا لكلّ فصل، مربوطًا برأس الكتاب. وتحت كلّ فصل، ارسم رأسًا لكلّ قسم، مربوطًا بالفصل الذي ينتمي إليه. ولن يكون في الرسم البياني أيّ دورات؛ بل سيكون شجرةً، لكنّها شجرةٌ ذات تسلسلٍ هرميٍّ واضحٍ لا يظهر إن لم نُعيّن «رأس الكتاب» بوصفه «القمة».
وبمجرد أن يُعيَّن رأسٌ واحدٌ من رؤوس الشجرة بوصفه الجذر (root)، أمكن أن نُميّز كلّ رأسٍ آخر فيها بموقعه نسبةً إلى الجذر. والأمر بهذا يعمل لأنّ بين أيّ رأسَين في الشجرة مسارًا فريدًا. ومن ثمّ نستطيع من أيّ رأس أن نعود إلى الجذر بطريقةٍ واحدةٍ بالضبط. وهذا يتيح لنا أيضًا أن نصف كيف ترتبط الرؤوسُ المتمايزة في شجرةٍ جذورية ببعضها.
فإذا كان رأسان متجاورَين، قلنا إنّ أحدهما الأصل (parent) للآخر، والآخر ابنُ الأصل (child). ومن بين الرأسَين، يكون الأصل هو الرأس الأقرب إلى الجذر. ومن ثمّ يكون جذرُ الشجرة أصلًا، لكنّه ليس ابنَ أيّ رأس (وهو فريدٌ في هذا المعنى: فجميع الرؤوس غير الجذر لها أصلٌ واحدٌ بالضبط).
ومن غير المستغرب أن يُسمّى ابنُ الابن حفيدًا (grandchild) للرأس (وهو الجدّ له). والأعمّ من ذلك نقول إنّ الرأس يكون من نسل (descendent) الرأس بشرط أن يكون رأسًا على المسار من إلى الجذر. وعندئذٍ نسمي سلفًا (ancestor) لـ
وفي معظم الأشجار (وفي الحقيقة إلّا المسارات التي يكون أحدُ طرفيَها هو الجذر) توجد أزواجٌ من الرؤوس لا يكون أيٌّ منها من نسل الآخر. ويمكننا تسمية هذين قرينَين (cousins) أو شقيقَين (siblings). وفي الحقيقة تُسمّى الرؤوسُ و شقيقَين بشرط أن يكون لهما الأصلُ نفسه. ولاحظ أنّ الشقيقَين لا يكونان متجاورَين أبدًا (هل ترى لماذا؟).
مثال 2.2.9.
تأمّل الشجرةَ أدناه.
فإذا عيّنّا الرأسَ بوصفه الجذر، فإنّ و تكون أبناءَ وهي شقيقةً بعضها بعض. ومن الأشياء الأخرى التي يمكننا قولها إنّ ابنُ ومن نسلِ أمّا الرأسُ فمن نسلِ بل هو في الواقع حفيدُ والرؤوسُ و شقيقة، لأنّ لهما الأصلَ المشترك
ولاحظ كيف يتغيّر هذا إن اخترنا رأسًا مختلفًا ليكون الجذر. فإذا كان هو الجذر، فإنّ ابنَه الوحيدَ هو ولَه بدوره ابنٌ واحدٌ فقط، هو عندئذٍ يكون ابنَ (لا العكس)، ويكون من نسلِ لا سلفًا له. أمّا و فأخوان الآن.
كلُّ هذه اللغة المزخرفة تساعدنا على وصف كيفية التنقّل في شجرة. فاجتيازُ شجرة، أي زيارةُ كلّ رأسٍ بترتيبٍ ما، خطوةٌ أساسيةٌ في خوارزمياتَ كثيرة. وحتى إن لم تكن الشجرةُ جذورية، يمكننا دائمًا تشكيل شجرةٍ جذورية باختيار أيّ رأسٍ ليكون الجذر. وإليك مثالًا على كيف قد يكون ذلك مفيدًا.
مثال 2.2.10.
اشرح لماذا كلُّ شجرةٍ رسمٌ بياني ثنائي الطرف (bipartite graph).
الحلّ. لإثبات أنّ رسمًا بيانيًا ثنائي الطرف، علينا أن نقسم الرؤوس إلى مجموعتَين، و بحيث لا يكون رأسان في المجموعة نفسها متجاورَين. وإليك خوارزميةً تفعل ذلك بالضبط.
عيّن أيّ رأسٍ ليكون الجذر. ضع هذا الرأس في المجموعة والآن ضع جميع أبناء الجذر في المجموعة ولا شيءٌ من هذه الأبناء متجاور (فهم شُقَقاء)، إذن نحن على ما يرام حتى الآن. والآن ضع في كلَّ ابنٍ لكلّ رأسٍ في (أي كلَّ حفيدٍ للجذر). وواصل المضيّ حتى تُسنَد جميعُ الرؤوس إلى إحدى المجموعتَين، مبدّلًا بين و في كلّ «جيل». أي أنّ الرأس يكون في المجموعة إذا وفقط إذا كان ابنَ رأسٍ في المجموعة
والمفتاحُ في الطريقة التي قسّمنا بها الشجرةَ في المثال هو معرفةُ أيّ رأسٍ نسنِد إلى مجموعةٍ تالية. فقد اخترنا زيارةَ جميع رؤوس الجيل نفسه قبل أيّ رأسٍ من الجيل التالي. واسمُ هذا عادةً البحثَ في العرض (breadth-first search) (ونقول «بحث» لأنّك كثيرًا ما تجتاز شجرةً بعينابِ رؤوسٍ ذات خواصّ معيّنة).
وفي المقابل، كان بإمكاننا أيضًا أن نقسم الشجرةَ بترتيبٍ مختلف. ابدأ بالجذر؛ ضعه في ثمّ ابحث عن ابنٍ واحدٍ للجذر تضعه في ثمّ ابحث عن ابنٍ لذلك الرأس، وضعه في ثمّ ابحث عن ابنه، وضعه في وهكذا. وحين تصل إلى رأسٍ ليس له أبناء، ارجع إلى أصله، وانظر إلى ما إذا كان لهذا الأصل أبناءٌ آخرون. فنحن نبتعد عن الجذر بأقصى سرعة، ثمّ نتراجع إلى الوراء حتى نستطيع المضيّ قدمًا من جديد. واسمُ هذا البحثَ في العمق (depth-first search).
ويمكن لهذه الشروح الخوارزمية أن تصلح برهانًا على أنّ كلّ شجرةٍ ثنائية الطرف، وإن كان يلزم العنايةُ لإثبات أنّ الخوارزميّتين صحيحتان. ويُطلب في التمارين منهجٌ آخر لإثبات أنّ جميع الأشجار ثنائية الطرف، بالاعتماد على التعريض.
أسئلة القراءة
1.
لنفترض أنّ شجرةٌ فيها 10 رؤوس. أيُّ العبارات التالية لا بدّ أن تكون صحيحةً عن اختر كلّ ما ينطبق.
- في مسارٌ فريد بين كلّ زوج من الرؤوس.
- لو حذفتَ أيّ حافةٍ من لكان الرسمُ البياني الناتج غير متصل.
- لو أضفتَ أيّ حافةٍ بين رأسَين في (لم يكونا متجاورَين من قبل)، لكان في الرسم البياني الناتج دورة.
- في رأسان بالضبط من الدرجة الأولى.
2.
إذا كانت شجرةٌ فيها 20 رأسًا، فكم حافةً فيها؟
عدد الحوافّ:
3.
ما الأسئلة التي خطرت ببالك بعد قراءة هذا القسم؟ اكتب سؤالًا واحدًا على الأقلّ عن محتوى هذا القسم يثير فضولك.
تمارين: مسائل تدريبية
1.
هل العباراتُ التالية صحيحةٌ أم خاطئة؟
- هناك رسمٌ بياني متصل له شجرةٌ ممتدة واحدةٌ بالضبط.
- إذا كان في رسمٍ بياني رأسان أكثر من الحوافّ، فإنّه غير متصل.
- كلُّ رسمٍ بياني ثنائي الطرف شجرة.
- كلُّ غابة متصلة شجرة.
- إذا كان في رسمٍ بياني رأسٌ واحدٌ أكثر من عدد حوافّه بالضبط، فإنّ الرسم البياني شجرة.
2.
غابةٌ فيها 50 رأسًا و44 حافة. كم مكوّنًا مترابطًا (connected component) في هذا الرسم البياني؟
3.
رسمٌ بياني متصل فيه 12 رأسًا يحتوي على 17 حافة. ودون أن تعرف أيّ رسمٍ بيانيٍّ بعينه هذا، فما أصغرُ عددٍ وأكبرُ عددٍ ممكنَين من الحوافّ يمكنك حذفُهما للحصول على شجرةٍ ممتدة؟
أصغر عدد من الحوافّ يمكن حذفه:
أكبر عدد من الحوافّ يمكن حذفه:
4.
معدّل درجة شجرةٍ يساوي 1.96 (أي أنّك إذا جمعتَ درجات الرؤوس وقسمتَها على عدد الرؤوس حصلتَ على 1.96).
كم رأسًا في هذه الشجرة؟
5.
شجرةٌ تحتوي على عددٍ ما من الأوراق (رؤوسٍ من الدرجة الأولى) وأربعةَ رؤوسٍ ليست أوراقًا. ودرجاتُ الرؤوس غير الأوراق هي 10 و7 و4 و2. كم ورقةً في الشجرة؟
أصغر عدد ممكن من الأوراق:
أكبر عدد ممكن من الأوراق:
تمارين: تمارين إضافية
1.
أيُّ من الرسوم البيانية التالية أشجار؟
- حيث و
- حيث و
- حيث و
- حيث و
2.
لكلِّ تتابعِ درجاتٍ أدناه، قرّر ما إذا كان يمكن أن يكون بالتأكيد، أو لا يمكن أبدًا، أو يمكنه محتملًا أن يكون تتابعَ درجاتٍ لشجرة. وتذكّر أنّ تتابعَ الدرجات يسرد درجاتَ (عدد الحوافّ الملاصقة للرأس) جميع رؤوس رسمٍ بيانيٍ بترتيبٍ غير متزايد.
3.
لكلِّ تتابعِ درجاتٍ أدناه، قرّر ما إذا كان يمكن أن يكون بالتأكيد، أو لا يمكن أبدًا، أو يمكنه محتملًا أن يكون تتابعَ درجاتٍ لشجرة. برّر إجاباتك.
تلميح. احذر: قد لا تكون الرسومُ البيانية متصلة.
4.
لنفترض أنّ لديك رسمًا بيانيًا فيه رأسًا و حافة يحقّق هل لا بدّ أن يكون الرسمُ البياني شجرةً؟ برّر إجابتك.
تلميح. جرّب التمرين 2.
5.
اثبت أنّ أيّ رسمٍ بياني (لا بالضرورة أن يكون شجرةً) فيه رأسًا و حافة ويحقّق لن يكون متصلًا.
تلميح. جرّب البرهانَ بالتناقض، وتأمّل شجرةً ممتدةً من الرسم البياني.
6.
إذا كان رسمٌ بياني فيه رأسًا و حافة متصلًا ويحوي فهل لا بدّ أن يحتوي على دورة؟ برّر إجابتك.
7.
نعرّف الغابة بأنّها رسمٌ بياني لا دورات فيه.
- اشرح لماذا هذا اسمٌ مناسب. أي اشرح لماذا الغابةُ اتّحادُ أشجار.
- لنفترض أنّ غابةٌ تتكوّن من شجرة و رأسًا. كم حافةً في ؟ اشرح.
- اثبت أنّ أيّ رسمٍ بياني فيه رأسًا و حافة ويحقّق لا بدّ أن يحتوي على دورة (أي ألّا يكون غابةً).
تلميح. أمّا الجزء (b) فإنّ تجريب بعض الأمثلة البسيطة ينبغي أن يعطيك الصيغة. ثمّ لا يلزمك إلّا إثبات أنّها صحيحة.
8.
قدّم برهانًا متأنّيًا لـ نتيجة 2.2.3: الرسمُ البياني يكون غابةً إذا وفقط إذا كان بين كلّ زوج من الرؤوس مسارٌ واحدٌ على الأكثر. استعمل البرهانَ بنقيض المضمون (لا البرهانَ بالتناقض) في الاتجاهَين.
تلميح. تأمّل برهانَ دعوى 2.2.2 يعطيك معظمَ ما تحتاج إليه، لكن تأكّد من أن تُقصر ذلك على الأجزاء ذاتِ الصلة، وانتبه إلى ألّا تستعمل البرهانَ بالتناقض.
9.
قدّم برهانَ المجرم الأدنى (minimal criminal) متأنّيًا على أنّ كلَّ شجرةٍ ثنائية الطرف.
تلميح. الأصغريةُ هنا ينبغي أن تكون بحسب عدد الرؤوس. فإذا كان لديك مثالٌ مضادٌّ أدنى وحذفتَ منه رأسًا ورقًا، فإنّ الرسمَ البياني الناتج سيكون شجرةً أصغر، ومن ثمّ...
10.
تأمّل الشجرةَ المرسومة أدناه.
- لنفترض أنّنا عيّنّا الرأسَ بوصفه الجذر. اذكر أبناءَ كلّ رأسٍ وأصولَه وأشقّاءَه. هل لأيّ رأسٍ غير أحفاد؟
- لنفترض أنّ لم يُختَر جذرًا. هل يغيّر اختيارُنا لجذر الشجرة عددَ أبناء ؟ وعددَ أحفاده؟ وكم عددُ كلٍّ منهما؟
- وفي الحقيقة، اختر أيّ رأسٍ في الشجرة ولنفترض أنّه ليس الجذر. اشرح لماذا لا يعتمد عددُ أبناء ذلك الرأس على أيّ رأسٍ آخر يكون الجذر.
- هل ينطبق الجزءُ السابق على أشجارٍ أخرى؟ أعطِ مثالًا لشجرةٍ مختلفةٍ ينطبق فيها. ثمّ إمّا اثبت أنّه ينطبق دائمًا أو أعطِ مثالًا لشجرةٍ لا ينطبق فيها.
تلميح. إذا كان هو الجذر، فإنّ سيكون له ثلاثةُ أبناء ( و)، جميعُهم شُقَقاء ويكون لهم جميعًا أصلًا. ولن يكون لـ أيُّ أبناء.
وعلى وجهِ العموم، كيف يمكنك تحديد عدد أبناء رأسٍ ما إن لم يكن جذرًا؟
11.
ليكن شجرةً جذورية تحتوي على الرؤوس و (من بين غيرها، محتملًا). اثبت أنّه إذا كان من نسلِ و معًا، فإنّ يكون من نسلِ أو يكون من نسلِ
12.
ما لم تكن شجرةً أصلًا، فإنّ رسمًا بيانيًا معطى سيعطي أشجارًا ممتدةً متعدّدة. وفي أيّ حدٍّ يجب أن تكون هذه متشابهةً أو مختلفة؟
- هل يجب أن تكون جميعُ الأشجار الممتدة لرسمٍ بيانيٍّ معطى متمايزةً (isomorphic) بعضها ببعض؟ اشرح لماذا أو أعطِ مثالًا مضادًّا.
- هل يجب أن يكون لجميع الأشجار الممتدة لرسمٍ بيانيٍّ معطى العددُ نفسه من الحوافّ؟ اشرح لماذا أو أعطِ مثالًا مضادًّا.
- هل يجب أن يكون لجميع الأشجار الممتدة لرسمٍ بياني العددُ نفسه من الأوراق (الرؤوسِ من الدرجة الأولى)؟ اشرح لماذا أو أعطِ مثالًا مضادًّا.
13.
أوجد جميعَ الأشجار الممتدة للرسم البياني أدناه. كم شجرةً ممتدةً مختلفةً توجد؟ وكم شجرةً ممتدةً مختلفةً توجد بنسبة التمايز (up to isomorphism) (أي أنّك إذا جمعتَ جميعَ الأشجار الممتدة في مجموعاتٍ بحسب تمايزها، فكم مجموعةً ستحصل عليها)؟
14.
أعطِ مثالًا لرسمٍ بيانيٍّ له 7 أشجار ممتدةٍ مختلفةٍ بالضبط. ولاحظ أنّه من المقبول أن تكون بعضُ هذه الأشجار الممتدة أو كلُّها متمايزة.
تلميح. هناك مثالٌ بـ 7 حوافّ.
15.
اثبت أنّ كلَّ رسمٍ بيانيٍّ متصلٍ ليس هو نفسه شجرةً لا بدّ أن يملك ثلاثَ أشجارٍ ممتدةٍ مختلفةٍ على الأقلّ (وإن كانت قد تكون متمايزة).
تلميح. سيكون التمرينُ السابق مفيدًا.
16.
تأمّل الحوافَّ التي لا بدّ أن تكون في كلّ شجرةٍ ممتدةٍ لرسمٍ بياني. هل يجب أن يملك كلُّ رسمٍ بيانيٍّ حافةً من هذا النوع؟ أعطِ مثالًا لرسمٍ بيانيٍّ له حافةٌ واحدةٌ بالضبط من هذا النوع.
تلميح. لاحظ أنّ حافةً من هذا النوع، إذا حُذفت، لقطعتْ الاتصال في الرسم البياني. ونسمّي الرسومَ البيانية التي تملك حافةً من هذا النوع 1-متّصلة (1-connected).