آرین سلیمان‌زاده
  • خانه
  • وبلاگ
  • پادکست‌ها
  • ویدیوها
  • تماس با من
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
پنل•تماس سریع

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

درخواست همکاری یا مشاوره

پیام خود را درباره همکاری، مشاوره، توسعه محصول یا پروژه نرم‌افزاری ارسال کنید.

LinkedInپاسخ سریع
خانه/مقاله‌ها/الگوریتم Bellman-Ford چیست؟ کوتاه‌ترین مسیر با وزن منفی
AlgorithmsGraph Algorithmsمقاله

الگوریتم Bellman-Ford چیست؟ کوتاه‌ترین مسیر با وزن منفی

Bellman-Ford کوتاه‌ترین مسیر تک‌مبدأ را با پشتیبانی از وزن منفی پیدا می‌کند و چرخه منفی را هم تشخیص می‌دهد.

۳۰ مرداد ۱۴۰۵8 دقیقه مطالعه0 بازدید
#Graph#Algorithms#JavaScript#TypeScript#Bellman-Ford

Arian Soleimanzadeh

Software Engineer & Researcher

Bellman-Ford algorithm visual guide

Arian Soleimanzadeh

هوش مصنوعی · کد · محصول

پژوهش + مهندسی
در این صفحه
این الگوریتم چه مسئله‌ای را حل می‌کند؟ایده اصلی به ساده‌ترین شکلمراحل اجرانمونه کد JavaScriptمثال‌های واقعی و دنیای کارپیچیدگی زمانی و فضاییچه زمانی استفاده کنیم؟چه زمانی مناسب نیست؟جمع‌بندی

Bellman-Ford کوتاه‌ترین مسیر تک‌مبدأ را با پشتیبانی از وزن منفی پیدا می‌کند و چرخه منفی را هم تشخیص می‌دهد. در این مقاله قرار نیست فقط چند خط کد ببینیم؛ ابتدا مسئله را شهودی می‌فهمیم، بعد مراحل، کاربردهای واقعی، هزینه اجرای الگوریتم و محدودیت‌های آن را بررسی می‌کنیم.

این الگوریتم چه مسئله‌ای را حل می‌کند؟

Bellman-Ford زمانی ارزشمند است که ساختار مسئله را به صورت گراف ببینیم. قبل از کدنویسی باید بدانیم Vertexها چه چیزی هستند، Edgeها چه رابطه‌ای را نشان می‌دهند و خروجی مورد انتظار دقیقاً چیست.

ایده اصلی به ساده‌ترین شکل

تمام یال‌ها را بارها Relax می‌کنیم تا فاصله‌ها دیگر بهتر نشوند.

مراحل اجرا

  1. فاصله مبدأ صفر و بقیه Infinity.
  2. تمام یال‌ها را V-1 بار Relax می‌کنیم.
  3. اگر مسیر جدید کوتاه‌تر بود dist را آپدیت می‌کنیم.
  4. یک دور اضافه برای تشخیص negative cycle اجرا می‌کنیم.

نمونه کد JavaScript

JavaScript
1234567891011
function bellmanFord(vertices, edges, source) {
  const dist = Object.fromEntries(vertices.map(v => [v, Infinity]));
  dist[source] = 0;
  for (let i = 0; i < vertices.length - 1; i++)
    for (const [u,v,w] of edges)
      if (dist[u] !== Infinity && dist[u] + w < dist[v]) dist[v] = dist[u] + w;
  for (const [u,v,w] of edges)
    if (dist[u] !== Infinity && dist[u] + w < dist[v])
      throw new Error("Negative cycle");
  return dist;
}

مثال‌های واقعی و دنیای کار

  • مدل‌های سود/زیان
  • Distance Vector Routing
  • Credit/Penalty Graph
  • تشخیص Negative Cycle

پیچیدگی زمانی و فضایی

O(VE) زمان و O(V) حافظه

چه زمانی استفاده کنیم؟

وجود وزن منفی یا نیاز به تشخیص چرخه منفی

چه زمانی مناسب نیست؟

با وزن‌های غیرمنفی Dijkstra معمولاً سریع‌تر است.

جمع‌بندی

Bellman-Ford را زمانی انتخاب کنید که نوع گراف و هدف مسئله با ویژگی‌های آن هم‌خوان باشد. مهم‌ترین نکته این است که الگوریتم را به خاطر اسمش استفاده نکنیم؛ ابتدا مسئله را مدل کنیم و سپس ابزار مناسب را انتخاب کنیم.

در این صفحه
این الگوریتم چه مسئله‌ای را حل می‌کند؟ایده اصلی به ساده‌ترین شکلمراحل اجرانمونه کد JavaScriptمثال‌های واقعی و دنیای کارپیچیدگی زمانی و فضاییچه زمانی استفاده کنیم؟چه زمانی مناسب نیست؟جمع‌بندی

جزئیات مقاله

اطلاعات انتشار، زمان مطالعه و تعداد بازدید این محتوا.

انتشار

۳۰ مرداد ۱۴۰۵

آخرین ویرایش

۳۰ مرداد ۱۴۰۵

زمان مطالعه

8 دقیقه مطالعه

بازدید

0

نویسنده

Arian Soleimanzadeh

مقاله قبلی

Bridge در گراف چیست؟ پیدا کردن یال‌های بحرانی شبکه

مقاله بعدی

Floyd-Warshall چیست؟ کوتاه‌ترین مسیر بین تمام جفت رأس‌ها

آرین سلیمان‌زاده

پورتفولیوی شخصی با تمرکز بر Agentic CRM، سامانه‌های هوشمند کسب‌وکار، مهندسی مدرن وب، طراحی سیستم‌های رابط کاربری و توسعه محصولات نرم‌افزاری کاربردی.

لینک‌های سریع

  • درباره من
  • وبلاگ
  • تماس

ارتباط

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

در دسترس: روزهای کاری

معمولاً پاسخ در ۲۴ ساعت

خبرنامه

به‌روزرسانی‌های مربوط به نوشته‌ها، پروژه‌ها و انتشارهای جدید را دریافت کنید.

© 2026 ariansoleimanzadeh.site — تمامی حقوق محفوظ است.

لینکدین