dfs

کلمات اختصاری

عبارت کامل: Depth First Search
موضوع: علمی
در نظریه ٔ گراف، جستجوی عمق اول (به اختصار DFS) یک الگوریتم پیمایش گراف است که برای پیمایش یا جستجوی یک درخت یا یک گراف به کار می رود.

استراتژی جستجوی عمق اول برای پیمایش گراف، همانطور که از نامش پیداست \"جستجوی عمیق تر در گراف تا زمانی که امکان دارد\" است.

الگوریتم از ریشه شروع می کند (در گراف ها و یا درخت های بدون ریشه راس دلخواهی به عنوان ریشه انتخاب می شود) و در هر مرحله همسایه های رأس جاری را از طریق یال های خروجی رأس جاری به ترتیب بررسی کرده و به محض روبه رو شدن با همسایه ای که قبلاً دیده نشده باشد، به صورت بازگشتی برای آن رأس به عنوان رأس جاری اجرا می شود. در صورتی که همهٔ همسایه ها قبلاً دیده شده باشند، الگوریتم عقب گرد می کند و اجرای الگوریتم برای رأسی که از آن به رأس جاری رسیده ایم، ادامه می یابد. به عبارتی الگوریتم تا آنجا که ممکن است، به عمق بیشتر و بیشتر می رود و در مواجهه با بن بست عقب گرد می کند. این فرایند تامادامیکه همهٔ رأس های قابل دستیابی از ریشه دیده شوند ادامه می یابد.

همچنین در مسائلی که حالات مختلف متناظر با رئوس یک گراف اند و حل مسئله مستلزم یافتن رأس هدف با خصوصیات مشخصی است، جستجوی عمق اول به صورت غیرخلاق عمل می کند. بدین ترتیب که هر دفعه الگوریتم به اولین همسایهٔ یک رأس در گراف جستجو و در نتیجه هر دفعه به عمق بیشتر و بیشتر در گراف می رود تا به رأسی برسد که همهٔ همسایگانش دیده شده اند که در حالت اخیر، الگوریتم به اولین رأسی بر می گردد که همسایهٔ داشته باشد که هنوز دیده نشده باشد. این روند تا جایی ادامه می یابد که رأس هدف پیدا شود و یا احتمالاً همهٔ گراف پیمایش شود. البته پیاده سازی هوشمندانهٔ الگوریتم با انتخاب ترتیب مناسب برای بررسی همسایه های دیده نشدهٔ رأس جاری به صورتی که ابتدا الگوریتم به بررسی همسایه ای بپردازد که به صورت موضعی و با انتخابی حریصانه به رأس هدف نزدیک تر است، امکان پذیر خواهد بود که معمولاً در کاهش زمان اجرا مؤثر است.

از نقطه نظر عملی، برای اجرای الگوریتم، از یک پشته (stack) استفاده می شود. بدین ترتیب که هر بار با ورود به یک رأس دیده نشده، آن رأس را در پشته قرار می دهیم و هنگام عقب گرد رأس را از پشته حذف می کنیم. بنابراین در تمام طول الگوریتم اولین عنصر پشته رأس در حال بررسی است. جزئیات پیاده سازی در ادامه خواهد آمد.

وقتی در گراف های بزرگی جستجو می کنیم که امکان ذخیرهٔ کامل آنها به علت محدودیت حافظه وجود ندارد، در صورتی که طول مسیر پیمایش شده توسط الگوریتم که از ریشه شروع شده، خیلی بزرگ شود، الگوریتم با مشکل مواجه خواهد شد. در واقع این راه حل ساده که \"رئوسی را که تا به حال دیده ایم ذخیره کنیم\" همیشه کار نمی کند. چراکه ممکن است حافظهٔ کافی برای این کار نداشته باشیم. البته این مشکل با محدود کردن عمق جستجو در هر بار اجرای الگوریتم حل می شود که در نهایت به الگوریتم تعمیق تکراری (Iterative Deepening) خواهد انجامید.

انگلیسی به انگلیسی

• graph search algorithm which extends the current path as far as possible before backtracking to the last choice point and trying the next alternative path
process of filing

پیشنهاد کاربران

بپرس