تالار گفتمان مانشت
الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - نسخه‌ی قابل چاپ

الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - ldns0098 - 13 آذر ۱۳۹۳ ۰۱:۱۵ ب.ظ

با سلام
لطفا مدیر محترم ارجاعم ندن به این تاپیک :
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

چون جوابمو اونجا نگرفتم، در واقع تیتر تاپیک شباهتی به پاسخها نداشت.
دوستان ممنون میشم یه مقایسه کلی داشته باشن.
من به دنبال یافتن تفاوت این دو الگوریتم سرچ کردم این جواب رو جایی پیدا کردم که البته قانع کننده نبود برام!
"الگوریتم فلوید وارشال برای گراف با یال منفی است و وجود یال منفی را تشخیص می دهد ولی اگر دارای دور منفی باشد آنگاه آن را تشخیص می دهد اما گزارش نمی کند .
الگوریتم بلمن-فورد گراف با یال منفی را می پذیرد و چنانچه در گراف دچار دور منفی شویم آن را گزارش می دهد."

RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - NP-Cσмρℓєтє - ۱۳ آذر ۱۳۹۳ ۰۶:۲۴ ب.ظ

دقت کنیدبه این نکته که :
الگوریتم فلوید - وارشال برای پیدا کردن یک مسیر بهینه در گراف جهتدار هست.(کوتاهترین مسیر)-----> تو برنامه نویسی پویا این الگوریتم رو داشتیم.
ولی الگوریتم بلمن فورد برای پیدا کردن یک درخت پوشای مینیمم در یک گراف است.

Re: RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - ldns0098 - 13 آذر ۱۳۹۳ ۰۷:۴۴ ب.ظ

(۱۳ آذر ۱۳۹۳ ۰۶:۲۴ ب.ظ)zahra.s نوشته شده توسط:  دقت کنیدبه این نکته که :
الگوریتم فلوید - وارشال برای پیدا کردن یک مسیر بهینه در گراف جهتدار هست.(کوتاهترین مسیر)-----> تو برنامه نویسی پویا این الگوریتم رو داشتیم.
ولی الگوریتم بلمن فورد برای پیدا کردن یک درخت پوشای مینیمم در یک گراف است.

عزیزم برای یافتن درخت پوشای مینیمم ما الگوریتمهای هوشمندانه؛ کراسکال؛ پریم رو داریم؛ این دو تا الگوریتم هر دو برای یافتن کوتاهترین مسیر هستن.

RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - NP-Cσмρℓєтє - ۱۳ آذر ۱۳۹۳ ۰۷:۵۳ ب.ظ

(۱۳ آذر ۱۳۹۳ ۰۷:۴۴ ب.ظ)ldns0098 نوشته شده توسط:  
(13 آذر ۱۳۹۳ ۰۶:۲۴ ب.ظ)zahra.s نوشته شده توسط:  دقت کنیدبه این نکته که :
الگوریتم فلوید - وارشال برای پیدا کردن یک مسیر بهینه در گراف جهتدار هست.(کوتاهترین مسیر)-----> تو برنامه نویسی پویا این الگوریتم رو داشتیم.
ولی الگوریتم بلمن فورد برای پیدا کردن یک درخت پوشای مینیمم در یک گراف است.

عزیزم برای یافتن درخت پوشای مینیمم ما الگوریتمهای هوشمندانه؛ کراسکال؛ پریم رو داریم؛ این دو تا الگوریتم هر دو برای یافتن کوتاهترین مسیر هستن.

حرف شما صحیح ولی من جایی خوندم الگوریتم فلوید برای یافتن درخت پوشا و فلوید -وارشال برای مسیر بهینه هست!Huh

RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - ldns0098 - 13 آذر ۱۳۹۳ ۰۷:۵۷ ب.ظ

(۱۳ آذر ۱۳۹۳ ۰۷:۵۳ ب.ظ)zahra.s نوشته شده توسط:  من جایی خوندم الگوریتم فلوید برای یافتن درخت پوشا و فلوید -وارشال برای مسیر بهینه هست!Huh
بعید میدونم درست باشه. کدوم کتاب بوده؟

RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - m.teymourpour - 13 آذر ۱۳۹۳ ۰۸:۱۲ ب.ظ

(۱۳ آذر ۱۳۹۳ ۰۱:۱۵ ب.ظ)ldns0098 نوشته شده توسط:  با سلام
لطفا مدیر محترم ارجاعم ندن به این تاپیک :
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

چون جوابمو اونجا نگرفتم، در واقع تیتر تاپیک شباهتی به پاسخها نداشت.
دوستان ممنون میشم یه مقایسه کلی داشته باشن.
من به دنبال یافتن تفاوت این دو الگوریتم سرچ کردم این جواب رو جایی پیدا کردم که البته قانع کننده نبود برام!
"الگوریتم فلوید وارشال برای گراف با یال منفی است و وجود یال منفی را تشخیص می دهد ولی اگر دارای دور منفی باشد آنگاه آن را تشخیص می دهد اما گزارش نمی کند .
الگوریتم بلمن-فورد گراف با یال منفی را می پذیرد و چنانچه در گراف دچار دور منفی شویم آن را گزارش می دهد."


الگوریتم فلوید واسه یافتن تمام کوتاه ترین مسیرها بکار میره(کوتاه ترین مسیر بین هر دو راس مشخص) و یک الگوریتم پویا می باشد.
این الگوریتم ماتریس های A1 تا An رو مرحله به مرحله میسازه و در مرحله K فقط رئوس ۱ تا K رو به عنوان رئوس میان بین هر دو راس در نظر میگیرد و به این سوال جواب میدهد که آیا راس kام رو بعنوان راس میانی در نظر بگیریم یا نه. اگر با وجود راس kام مسیر کوتاهتر شود آن را در نظر میگیرد در غیر این صورت درایه ij در ماترس k با درایه ij در ماتریس k-1 برابر است
الگوریتم بلمن فورد برای یافتن کوتاه ترین مسیرهای هم مبدا بکار میرود. مثلا کوتاه ترین مسیرها از راس A به سایر رئوس که به مراتب کار این الگوریتم بسیار کمتر از فلوید می باشد
روش کار این الگوریتم با فلوید فرق دارد.
این الگوریتم n-1 بار عمل relax رو تمام یالها انجام می دهد(هر بار روی تمام یال ها) در نهایت کوتاه ترین مسیرها از یک راس مشخص با سایر رئوس به دست می آید.
اگر گراف یال منفی داشته باشه هر دو الگوریتم درست کار میکنن البته به شرطی که سیکل منفی وجود نداشته باشد
اگر سیکل منفی وجود داشته باشد هر دو الگوریتم متوجه میشن و اعلام میکنن.
اگر سیکل منفی در گراف وجود داشته باشه دیگه کوتاه ترین مسیر بی معنی میشه

RE: الگوریتم "بلمن فورد" در مقایسه با "فلوید وارشال" - ldns0098 - 13 آذر ۱۳۹۳ ۰۹:۴۴ ب.ظ

با تشکر فراوان از آقای تیمورپور من یافته های خودم هم اضافه میکنم :
هدف :
  • فلوید: یافتن تمام کوتاه ترین مسیرها(کوتاه ترین مسیر بین هر دو راس مشخص) و یک الگوریتم پویا می باشد.
  • بلمن فورد: برای یافتن کوتاه ترین مسیرهای هم مبدا بکار میرود.
نحوه عملکرد:
  • فلوید: ماتریس های A1 تا An رو مرحله به مرحله میسازه و در مرحله K فقط رئوس ۱ تا K رو به عنوان رئوس میان هر دو راس در نظر میگیرد و به این سوال جواب میدهد که آیا راس kام رو بعنوان راس میانی در نظر بگیریم یا نه. اگر با وجود راس kام مسیر کوتاهتر شود آن را در نظر میگیرد در غیر این صورت درایه ij در ماتریس k با درایه ij در ماتریس k-1 برابر است.
  • بلمن فورد: این الگوریتم n-1 بار عمل relax رو تمام یالها انجام می دهد(هر بار روی تمام یال ها) در نهایت کوتاه ترین مسیرها از یک راس مشخص با سایر رئوس به دست می آید.
پیچیدگی زمانی:
  • فلوید: O(v^3)i
  • بلمن فورد:
    • کوتاهترین مسیر از راس مبدا تا راس مقصد: O(EV)i
    • کوتاهترین مسیر از راس مبدا تا راس مقصد در صورتیکه راس مبدا بتواند هر کدام از رئوس باشد:O(E*V^2)i
مثلا کوتاه ترین مسیرها از راس A به سایر رئوس که به مراتب کار این الگوریتم بسیار کمتر از فلوید می باشد
وجود یال منفی:
هر دو الگوریتم درست کار میکنن البته به شرطی که سیکل منفی وجود نداشته باشد.
اگر سیکل منفی وجود داشته باشد هر دو الگوریتم متوجه میشن و اعلام میکنن.
اگر سیکل منفی در گراف وجود داشته باشد کوتاه ترین مسیر بی معنی شده و لازم به ذکر است که دایجسترا حتی در یافتن دور منفی هم شکست میخورد.