البحث العميق أولاً

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

قام عالم الرياضيات الفرنسي شارل بيير تريمو [ 1 ] بدراسة نسخة من البحث العميق أولاً كاستراتيجية لحل المتاهات . [ 2 ] [ 3 ]

ملكيات

يختلف تحليل الوقت والمساحة لخوارزمية البحث العمقي أولاً (DFS) باختلاف مجال تطبيقها. في علوم الحاسوب النظرية، تُستخدم خوارزمية DFS عادةً لاجتياز رسم بياني كامل، وتستغرق وقتًايا(|V|+|هـ|){\displaystyle O(|V|+|E|)}، [ 4 ] حيث|V|{\displaystyle |V|}يمثل عدد الرؤوس و|هـ|{\displaystyle |E|}عدد الحواف . يتناسب هذا العدد خطيًا مع حجم الرسم البياني. وفي هذه التطبيقات، فإنه يستخدم أيضًا مساحةيا(|V|){\displaystyle O(|V|)}في أسوأ الأحوال، يتم تخزين مجموعة الرؤوس على مسار البحث الحالي بالإضافة إلى مجموعة الرؤوس التي تمت زيارتها مسبقًا. وبالتالي، في هذا السياق، تكون حدود الوقت والمساحة مماثلة لحدود البحث بالعرض أولًا ، ويعتمد اختيار أي من هاتين الخوارزميتين بشكل أقل على تعقيدهما وأكثر على الخصائص المختلفة لترتيب الرؤوس التي تنتجها كل خوارزمية.

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

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

مثال

مثال متحرك لعملية بحث العمق أولاً

بالنسبة للرسم البياني التالي:

رسم بياني غير موجه ذو حواف AB، BD، BF، FE، AC، CG، AE

يبدأ البحث العميق أولاً من العقدة A، بافتراض اختيار الحواف اليسرى في الرسم البياني الموضح قبل الحواف اليمنى، وبافتراض أن البحث يتذكر العقد التي تمت زيارتها سابقًا ولن يكررها (نظرًا لصغر حجم الرسم البياني)، فإنه سيزور العقد بالترتيب التالي: A، B، D، F، E، C، G. تشكل الحواف التي تم اجتيازها في هذا البحث شجرة تريموكس ، وهي بنية ذات تطبيقات مهمة في نظرية الرسوم البيانية . أما إجراء البحث نفسه دون تذكر العقد التي تمت زيارتها سابقًا فيؤدي إلى زيارة العقد بالترتيب A، B، D، F، E، A، B، D، F، E، وهكذا إلى ما لا نهاية، عالقًا في حلقة A، B، D، F، E، دون الوصول إلى C أو G.

يُعد التعميق التكراري إحدى التقنيات لتجنب هذه الحلقة اللانهائية، وسيصل إلى جميع العقد.

الأنواع الأربعة من الحواف التي تحددها الشجرة الممتدة

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

ترتيب الرؤوس

من الممكن أيضاً استخدام البحث العميق أولاً لترتيب رؤوس الرسم البياني أو الشجرة ترتيباً خطياً. وهناك أربع طرق ممكنة للقيام بذلك:

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

بالنسبة للأشجار الثنائية، يوجد أيضًا الترتيب الداخلي والترتيب الداخلي العكسي .

على سبيل المثال، عند البحث في الرسم البياني الموجه أدناه بدءًا من العقدة A، يكون تسلسل المرور إما ABDBACA أو ACDCABA (ويُترك اختيار زيارة B أو C أولًا من A للخوارزمية). تجدر الإشارة إلى أن الزيارات المتكررة على شكل تراجع إلى عقدة ما، للتحقق مما إذا كان لديها جيران لم تتم زيارتهم بعد، تُحتسب هنا (حتى لو لم يكن لديها أي جيران). وبالتالي، فإن الترتيبات المسبقة الممكنة هي ABDC وACDB، بينما الترتيبات اللاحقة الممكنة هي DBCA وDCBA، والترتيبات اللاحقة العكسية الممكنة هي ACBD وABC D.

رسم بياني موجه ذو حواف AB، BD، AC، CD

يُنتج الترتيب العكسي اللاحق فرزًا طوبولوجيًا لأي رسم بياني موجه غير دوري . يُعد هذا الترتيب مفيدًا أيضًا في تحليل تدفق التحكم، حيث إنه غالبًا ما يُمثل تبسيطًا طبيعيًا لتدفقات التحكم. قد يُمثل الرسم البياني أعلاه تدفق التحكم في جزء الكود أدناه، ومن الطبيعي اعتبار هذا الكود بالترتيب ABCD أو ACBD، ولكن ليس من الطبيعي استخدام الترتيب ABDC أو ACD B.

إذا ( أ ) فإن { ب } آخر { ج } د

الشفرة الزائفة

أ
بج
دهـF

0

1
إعادة تشغيل العقدة السابقة بدء التشغيل
عرض توضيحي تفاعلي للبحث العميق أولاً

تطبيق تكراري لخوارزمية البحث العمقي أولاً: [ 5 ]

الإجراء DFS( G , v ) هو: قم بتصنيف الرأس v على أنه مكتشف لجميع الحواف الموجهة من v إلى w الموجودة في G.adjacentEdges ( v ). إذا لم يتم تصنيف الرأس w على أنه مكتشف، فقم باستدعاء DFS( G , w ) بشكل متكرر.

تطبيق غير تكراري لخوارزمية البحث العمقي أولاً مع تعقيد مساحة في أسوأ الحالاتيا(|هـ|){\displaystyle O(|E|)}، مع إمكانية وجود رؤوس مكررة على المكدس: [ 6 ]

الإجراء DFS_iterative( G , v ) هو: ليكن S مكدسًا ، أضف إليه v . طالما أن S غير فارغ، قم بإزالة v من S. إذا لم يتم تصنيف v على أنه مكتشف، فقم بتصنيفه على أنه مكتشف. لكل حافة من v إلى w في G.adjacentEdges ( v ) ، أضف w إلى S.
رسم بياني غير موجه ذو حواف AB، BD، BF، FE، AC، CG، AE
الرسم البياني الموضح أعلاه هو مثال تم نسخه من الأعلى

تزور هاتان النسختان من خوارزمية البحث العمقي أولاً (DFS) جيران كل رأس بترتيب معاكس: أول جار يزوره النموذج التكراري هو أول جار في قائمة الحواف المتجاورة، بينما في النموذج التكراري، أول جار يزوره هو آخر جار في قائمة الحواف المتجاورة. تزور النسخة التكرارية العقد من الرسم البياني المثال بالترتيب التالي: A، B، D، F، E، C، G. أما النسخة غير التكرارية فتزور العقد بالترتيب التالي: A، E، F، B، D، C، G.

يشبه التنفيذ غير التكراري البحث بالعرض أولاً، ولكنه يختلف عنه في جانبين:

  1. يستخدم مكدسًا بدلًا من طابور، و
  2. يؤدي ذلك إلى تأخير التحقق مما إذا تم اكتشاف رأس ما حتى يتم إخراج الرأس من المكدس بدلاً من إجراء هذا الفحص قبل إضافة الرأس.

إذا كانت G شجرة ، فإن استبدال طابور خوارزمية البحث بالعرض أولاً بمكدس سيؤدي إلى خوارزمية بحث بالعمق أولاً. بالنسبة للرسوم البيانية العامة، فإن استبدال مكدس تطبيق البحث بالعمق أولاً التكراري بطابور سيؤدي أيضاً إلى خوارزمية بحث بالعرض أولاً، وإن كانت غير قياسية إلى حد ما. [ 7 ]

هناك تطبيق آخر محتمل للبحث التكراري العميق أولاً يستخدم مكدسًا من مُكرِّرات قائمة جيران العقدة، بدلاً من مكدس العقد. وهذا يُنتج نفس عملية الاجتياز التي يُنتجها البحث التكراري العميق أولاً. [ 8 ]

الإجراء DFS_iterative( G , v ) هو: ليكن S مكدسًا قم بتصنيف v على أنه مكتشف ، ثم أضف مؤشر G.adjacentEdges ( v ) إلى S. طالما أن S غير فارغة ، إذا كان S.peek ().hasNext() موجودًا، فقم بتعيين w إلى S.peek ().next(). إذا لم يتم تصنيف w على أنه مكتشف، فقم بتصنيفه على أنه مكتشف، ثم أضف مؤشر G.adjacentEdges ( w ) إلى S. وإلا، فقم بإزالة العنصر من S.

التطبيقات

خوارزمية عشوائية مشابهة لخوارزمية البحث العميق أولاً تُستخدم في إنشاء المتاهة.

تتضمن الخوارزميات التي تستخدم البحث العميق أولاً كعنصر أساسي ما يلي:

تعقيد

قام جون ريف بدراسة التعقيد الحسابي لخوارزمية البحث العمقي أولاً (DFS) . وبشكل أدق، بالنظر إلى رسم بيانيجي{\displaystyle G}، يتركيا=(v1،...،vن){\displaystyle O=(v_{1},\dots ,v_{n})}ليكن هذا الترتيب الذي تحسبه خوارزمية البحث العميق التكرارية القياسية. يُسمى هذا الترتيب بترتيب البحث العميق المعجمي. درس جون ريف تعقيد حساب ترتيب البحث العميق المعجمي، بالنظر إلى رسم بياني ومصدر. نسخة القرار من المشكلة (اختبار ما إذا كان رأس u يقع قبل رأس v في هذا الترتيب) هي مسألة P- كاملة ، [ 12 ] مما يعني أنها "كابوس للمعالجة المتوازية ". [ 13 ] : 189

يمكن حساب ترتيب البحث العميق أولاً (ليس بالضرورة الترتيب المعجمي) بواسطة خوارزمية متوازية عشوائية في فئة التعقيد RNC . [ 14 ] وحتى عام 1997، ظل من غير المعروف ما إذا كان من الممكن إنشاء اجتياز عميق أولاً بواسطة خوارزمية متوازية حتمية، في فئة التعقيد NC . [ 15 ]

انظر أيضاً

ملحوظات

  1. شارل بيير تريمو (1859-1882) المدرسة المتعددة التقنيات في باريس (1876:)، مهندس التلغراف الفرنسيفي مؤتمر عام، 2 ديسمبر 2010 - من قبل البروفيسور جان بيليتييه-تيبير في أكاديمية ماكون (بورغوندي - فرنسا) - (نُشر الملخص في حوليات الأكاديمية، مارس 2011 - ISSN 0980-6032 ) 
  2. إيفن، شيمون (2011)، خوارزميات الرسوم البيانية ( الطبعة الثانية)، مطبعة جامعة كامبريدج، الصفحات 46-48 ، رقم ISBN   978-0-521-73653-4.
  3. سيدجويك، روبرت (2002)، الخوارزميات في لغة C++: خوارزميات الرسوم البيانية ( الطبعة الثالثة)، بيرسون للتعليم، رقم ISBN  978-0-201-36118-6.
  4. ^ كورمين، توماس هـ، تشارلز إي ليسرسون، ورونالد إل ريفست. ص 606
  5. ^ جودريتش وتاماسيا. كورمين، وليسرسون، وريفست، وستاين
  6. الصفحة 93، تصميم الخوارزميات، كلاينبرغ وتاردوس
  7. "اجتياز الرسم البياني القائم على المكدس لا يساوي البحث العميق أولاً" . 11011110.github.io . تم ​​الاسترجاع في 10 يونيو 2020 .
  8. سيدجويك، روبرت (2010). الخوارزميات في جافا . أديسون-ويسلي. ISBN 978-0-201-36121-6. OCLC 837386973 . 
  9. هوبكروفت، جون ؛ تارجان، روبرت إي. (1974)، "اختبار التسطيح الفعال" (ملف PDF) ، مجلة رابطة آلات الحوسبة ، 21 (4): 549-568 ، doi : 10.1145/321850.321852 ، hdl : 1813/6011 ، S2CID 6279825 .
  10. دي فرايسيكس، هـ.؛ أوسونا دي مينديز، بروزنستيل، ب. (2006)، "أشجار تريموكس والتسطيح"، المجلة الدولية لأسس علوم الحاسوب ، 17 (5): 1017-1030 ، arXiv : math/0610935 ، Bibcode : 2006math.....10935D ، doi : 10.1142/S0129054106004248 ، S2CID 40107560 .
  11. باتشيلي، فرانسوا؛ حاجي ميرصادقي، مير أميد؛ خيزيلي، علي (2018)، "أشجار العائلة الأبدية وديناميكيات الرسوم البيانية العشوائية أحادية المعامل"، في سوبيتسكي، فلوريان (محرر)، أحادية المعامل في الرسوم البيانية المولدة عشوائيًا: جلسة خاصة للجمعية الرياضية الأمريكية، 8-9 أكتوبر 2016، دنفر، كولورادو ، الرياضيات المعاصرة، المجلد 719، بروفيدنس، رود آيلاند: الجمعية الرياضية الأمريكية، الصفحات 85-127 ، arXiv : 1608.05940 ، doi : 10.1090/conm/719/14471 ، ISBN   978-1-4704-3914-9، MR 3880014 ، S2CID 119173820  انظر المثال 3.7، صفحة 93
  12. ريف، جون هـ. (1985). "البحث العميق أولاً هو تسلسلي بطبيعته". رسائل معالجة المعلومات . 20 (5): 229-234 . doi : 10.1016/0020-0190(85)90024-9 .
  13. ميلهورن، كورت ؛ ساندرز، بيتر (2008). الخوارزميات وهياكل البيانات: مجموعة الأدوات الأساسية (ملف PDF) . سبرينغر. مؤرشف (ملف PDF) من الأصل بتاريخ 2015-09-08.
  14. ↑ أغاروال، أ.؛ أندرسون، ر. ج. (1988)، "خوارزمية NC عشوائية للبحث العميق أولاً"، كومبيناتوريكا ، 8 (1): 1-12 ، doi : 10.1007/BF02122548 ، MR 0951989 ، S2CID 29440871  .
  15. ^ كارجر ، ديفيد ر . موتواني، راجيف (1997)، “ خوارزمية NC للحد الأدنى من التخفيضات”، مجلة SIAM للحوسبة ، 26 (1): 255–272 ، CiteSeerX 10.1.1.33.1701 ، دوى : 10.1137 / S0097539794273083 ، MR 1431256  .

مراجع