الگوریتم جست وجوی عمقی depth-first search

الگوریتم جست وجوی عمقی depth-first search
جستوجوی عمقی (اول عمق) یکی از استراتژی های جست وجوی ناآگاهانه است که همیشه عمیق ترین گره را در مرز فعلی درخت جست وجو، بسط میدهد. جست وجو فورا از عمیق ترین سطح درخت جست وجو ادامه می یابد که گره های موجود در آن سطح فاقد گره های پسین هستند. وقتی آن گره ها بسط داده شدند از مرز حذف میشوند و در نتیجه ، جست وجوبه عمیق ترین گره بعدی که هنوز پسین های بررسی نشده دارد، برمیگردند.
جستوجوی عمقی از صف LIFO استفاده میکند. در صف LIFO جدیدترین گره تولید شده ، برای بسط دادن انتخاب میشود. این گره باید عمیق ترین گره بسط نیافته باشد، زیرا گره ای عمیق تر از والد است.
الگوریتم جست وجوی عمقی depth-first search :
خواص جست وجوی عمقی به این بستگی دارد که از نسخه "جست وجوی گراف" یا "جست وجوی درخت" استفاده شود.
از آنجایی که نسخه ی جست وجوی گراف حالتهای تکراری و مسیرهای زاید را ندارد، در فضاهای حالت متناهی "کامل" است، چون سرانجام هر گره ای را بسط میدهد. ولی نسخه جستوجوی درخت کامل نیست. در صورت وجود یک مسیر نامتناهی غیر هدف، هر دو نسخه با شکست مواجه میشوند.
به دلایل مشابه، هر دو نسخه غیر بهینه میباشند.
پیچیدگی زمانی جست وجوی عمقی گراف، توسط اندازه فضای حالت محدود میشود. از طرفی جست وجوی عمقی درخت ممکن است تمام گره های O(b^m) را در درخت جست وجو تولید کند که m ماکزیمم عمق هر گره است. اگر درخت نامحدود باشد، m نیز نامتناهی است.
تنها امتیاز جستوجوی عمقی نسبت به جستوجوی عرضی، پیچیدگی فضاست. برای جستوجو در گراف هیچ امتیازی ندارد اما در جستوجوی عمقی درخت، فقط یک مسیر از ریشه به گره برگ باید ذخیره شود.وقتی گره ای بسط داده شد پس از اینکه تمام نسل های آن بطور کامل بررسی شدند ، از حافظه حذف میشود. برای فضای حالتی با ضریب انشعاب b و عمق ماکزیمم d جستوجوی عمقی حداکثر O(bm) گره را ذخیره میکند. با توجه به این نکته جستوجوی عمقی درخت را بعنوان مبنای بسیاری از کارها در هوش مصنوعی بکار می بریم.