چگونه یک گراف را به صورت عمقی (DFS) و سطحی (BFS) پیمایش کنید
خلاصه
1402/12/03
پیمایش گراف به صورت عمقی (DFS) و سطحی (BFS) دو روش پرکاربرد برای مطالعه ویژگیهای گرافها هستند.
چگونه یک گراف را به صورت عمقی (DFS) و سطحی (BFS) پیمایش کنید پیمایش گراف به صورت عمقی (DFS) و سطحی (BFS) دو روش پرکاربرد برای مطالعه ویژگیهای گرافها هستند. در ادامه، روشهای پیمایش این دو نوع را توضیح میدهم: ۱. پیمایش گراف به صورت عمقی (DFS):
پیمایش عمقی یا DFS از استراتژی Last In, First Out (LIFO) استفاده میکند و میتوانید این کار را با استفاده از یک پشته (Stack) انجام دهید. مراحل اجرای DFS به شرح زیر است: انتخاب یک گره به عنوان نقطه شروع.
گره را به اعتباری برده و در لیست گرههای قابل دسترس (Visited) ثبت کنید.
همسایههای آن گره را بررسی کنید:
اگر یک همسایهای وجود داشت که قبلاً بررسی نشده باشد، آن همسایه را به عنوان گره فعلی انتخاب کنید و به مرحله 2 بازگردید.
اگر تمام همسایهها را بررسی کردید یا همه قبلاً اعتبارسنجی شده بودند، از پشته گرههای بازگشتی را حذف کرده و به گرهای که در آن آغاز شده بودید بازگردید.
۲. پیمایش گراف به صورت سطحی (BFS):
پیمایش سطحی یا BFS از استراتژی First In, First Out (FIFO) استفاده میکند و میتوانید این کار را با استفاده از یک صف (Queue) انجام دهید. مراحل اجرای BFS به شرح زیر است: انتخاب یک گره به عنوان نقطه شروع.
گره را به اعتباری برده و در لیست گرههای قابل دسترس (Visited) ثبت کنید.
همسایههای آن گره را به صف اضافه کنید.
از ابتدا صف یک گره را حذف کنید و همان مراحل 2 و 3 را برای همسایههای آن گره انجام دهید.
این فرآیند را تا زمانی که صف خالی نشود ادامه دهید.
با این دو روش، شما میتوانید تمام گرههای یک گراف را پیمایش کنید. انتخاب بین DFS و BFS بستگی به نیازها و ویژگیهای خاص مسئله دارد.
برخی از محصولات شرکت مهندسی آبان رایان البرز
سایر مقالات آموزشی شرکت نرم افزاری آبان رایان البرز :
- چگونه یک الگوریتم مرتبسازی انتخابی (Selection Sort) عمل میکند؟
- تفاوت بین دادهساختارهای Stack و Queue چیست؟
- چگونه از Salt و Hash برای ذخیرهسازی امن رمزهای عبور استفاده کنید
- چگونه از HTTPS در یک برنامه تحت وب استفاده کنید تا ارتباطات امن تر شوند؟
- چگونه از حملات Injection (مانند SQL Injection) در برنامهنویسی جلوگیری کنید؟
- چگونه از ORM (Object-Relational Mapping) در برنامهنویسی استفاده کنید
- چگونه یک پرسوجوی SELECT به منظور انتخاب اطلاعات از یک جدول در دیتابیس SQL بسازید؟
- تفاوت بین دیتابیس SQL و NoSQL چیست؟
- تفاوت بین GET و POST در HTTP چیست؟
- تفاوت بین abstract class و interface در Java چیست؟
- چگونه یک لیست (List) در Python را برعکس کنید
- چه تفاوتهایی بین زبانهای برنامهنویسی مختلف وجود دارد؟
- چه مواردی ممکن است باعث اجرای یک برنامه به درستی یا نادرستی شود؟
- منظور از کد تمیز با کد کثیف چیست؟
- چگونه با مشتریان یا کاربران همکاری میکنید تا نیازها و توقعات آنها را درک کنید؟
- تجربه شما در مواجهه با مسائل امنیتی در پروژههای نرمافزاری چگونه بوده است؟