زنگ.

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

الگوریتم Daekstra یک الگوریتم بر روی نمودارها است که کوتاه ترین مسیر بین دو رأس را در نمودار با طول غیر منفی قوس پیدا می کند. این نیز اغلب یک وظیفه محاسبه کوتاهترین مسیر از این رأس به همه دیگران است. الگوریتم به طور گسترده ای در برنامه نویسی استفاده می شود، به عنوان مثال، آن را توسط پروتکل های مسیریابی استفاده می شود.

شرح

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

در ابتدا، فاصله برای رأس اولیه فرض می شود صفر است، و فاصله به همه دیگران بی نهایت درک می شود. آرایه ای از پرچم ها نشان می دهد که آیا بالا منتقل می شود، پر از صفر است. سپس، در هر مرحله از چرخه، بالا با حداقل فاصله تا اولیه و پرچم برابر صفر جستجو شده است. برای آن، پرچم نصب شده است و تمام رأس های همسایه بررسی می شوند. اگر فاصله قبلی از Vertex منبع قبلا از مقدار فاصله تا رأس فعلی و طول رگ از آن به رأس چک شده بررسی شود، سپس فاصله تا رأس آزمایش شده به سمت فاصله تا لبه فعلی برابر است از جریان به در حال حاضر بررسی شده است. چرخه زمانی تکمیل می شود که پرچم های تمام رأس ها برابر با 1، یا زمانی که فاصله تا تمام رأس ها با پرچم 0 بی نهایت است. آخرین مورد ممکن است پس از آن و تنها اگر تعداد غیر قابل تحمل است.

الگوریتم Daekstra در pseudocode

ورود: از جانب : آرایه ای از ماتریس ورودی واقعی حساب واقعی؛ S یک رأس است که از آن کوتاه ترین مسیر و T یک رأس است که به دنبال آن است.

خروجی: v\u003e آرایه واقعی؛ و n: آرایه ای از 0..R. اگر بالا v. دروغ در کوتاه ترین مسیر از s. به که تلویزیون]- طول کوتاهترین مسیر از s. به y؛ h [y] - بالا، به طور مستقیم قبل از آن w. در کوتاه ترین مسیر.

H یک آرایه است که در آن Vertex N مربوط به Vertex M، قبلی قبلی در راه به n از S است.

T آرایه ای است که در آن رأس N به فاصله از آن مربوط می شود.

X آرایه ای است که در آن رأس n مربوط به 1 است اگر مسیر به آن شناخته شده است، و 0، اگر نه.

مقداردهی اولیه آرایه ها:

برای v. از 1 تا. r انجام دادن.

t [v.]: = (کوتاه ترین مسیر ناشناخته است)

x [v]: \u003d 0 (تمام رأس ها مشخص نشده اند)

h [s]: \u003d 0 ( s. هیچ چیز پیش از آن نیست)

t [s]: \u003d 0 (کوتاه ترین مسیر طول 0 ...)

x [s]: \u003d 1 (... و او شناخته شده است) v. : = s. (رأس فعلی)

متر: (به روز رسانی علائم)

برای و ∈ g ( و) انجام دادن.

اگر x [و] = 0 & t [و]> تلویزیون] + C. سپس.

t [و]: = تلویزیون] + C. (مسیر کوتاهتر از s. که در و از طریق v. }

H [U]:= v. (به یاد داشته باشید)

m.: =

v. : = 0

(جستجو برای پایان کوتاه ترین مسیر)

برای و از 1 تا. پ. انجام دادن.

اگر x [u] = 0 & t [u]< t. سپس.

v:= تو;

متر:= t [u] (بالا v. کوتاهترین مسیر را از بین می برد s.

اگر v. = 0 سپس.

توقف (بدون مسیر از s. که در t.) پایان اگر

اگر v.= t. سپس.

توقف (کوتاهترین مسیر از s. که در t.) پایان اگر

x [v]: \u003d 1 (کوتاهترین مسیر از s. که در v. ) قابل اعتماد و متخصص. M.

توجیه

برای اثبات صحت الگوریتم Daekstra، کافی است توجه داشته باشید که با هر عملکرد بدن چرخه، که برچسب M را شروع می کند، v.یک رأس استفاده می شود که برای کوتاه ترین مسیر از بالا شناخته شده است. sبه عبارت دیگر، اگر x [v] \u003d 1، سپس t [v] \u003d d (s، v) , و تمام رأس ها در مسیر (S، V)، تعیین شده توسط بردار N، دارای همان اموال، یعنی

vu t [و] \u003d 1 \u003d\u003e t [و] \u003d d (s، u) & t] \u003d 1.

واقعا (با القاء)، اولین بار به عنوان v. Vertex S استفاده می شود که برای کوتاه ترین مسیر خالی است و طول 0 (مسیرهای غیر خالی را نمی توان کوتاه تر کرد، زیرا طول قوس غیر منفی است). اجازه دهید T [U] \u003d D (S، U) برای تمام رأس های قبلا مشخص شده و. رأس جدید مشخص شده را در نظر بگیرید v.که از وضعیت T [v] \u003d min t [و] انتخاب شده است. توجه داشته باشید که اگر راه از طریق رأس های مشخص شده شناخته شده باشد، آن را نیز برای کوتاه ترین مسیر شناخته شده است. فرض کنید (در غیر اینصورت)، که T [v]\u003e d (s، v)، یعنی مسیری که از آن به دست آمده است s.که در کوتاه ترین نیست سپس باید رأس های غیر قابل علاج در این مسیر وجود داشته باشد. اولین رأس را در نظر بگیرید w.در این مسیر، به طوری که T [W] = 0. IIM: T [W] = d (s، w) ⩽d (s\u003e v)< Т[v],что противоречит выбору вершины u.

مشکل موقت

پیچیدگی الگوریتم Daekstra بستگی به روش پیدا کردن به دست نمی آورد که توسط بالا با حداقل فاصله تا شروع اولیه، روش ذخیره سازی چندگانه از رأس ها و روش های به روز رسانی برچسب ها. اجازه دهید n تعداد رأس ها، و از طریق M - تعداد لبه ها در ستون باشد. سپس، در ساده ترین مورد، زمانی که تمام نسخه های تنظیم شده برای جستجوی رأس ها با حداقل فاصله تا رأس اولیه مشاهده می شوند و یک آرایه برای ذخیره فواصل، زمان بهره برداری از الگوریتم - O (n 2) استفاده می شود. چرخه اصلی در مورد N بار انجام می شود، در هر یک از آنها، حداقل در مورد عملیات N صرف می شود. تعداد عملیات بر روی چرخه ها در امتداد همسایگان هر بازدید از هر دیدار، رأس، تعداد Rober M (از آنجا که هر لبه در این چرخه ها به طور هماهنگ دو بار یافت می شود و نیاز به یک تعداد ثابت از عملیات دارد) صرف می شود. بنابراین، زمان عملیات کلی الگوریتم O (n 2 + M)، اما از آنجا که M کمتر از n (n-1) است، در نهایت به نظر می رسد (n 2).

برای نمودارهای RAREFIED (یعنی، به طوری که برای M بسیار کمتر از n² است) رأس های ناخواسته را می توان در یک پشته دودویی ذخیره کرد، و به عنوان یک کلید برای استفاده از فاصله. از آنجا که چرخه در مورد N بار انجام می شود، و تعداد آرامش (تغییرات برچسب ها) بیش از M نیست، زمان بهره برداری از چنین پیاده سازی - O (NLOGN + MLOGN)

مثال

محاسبه فاصله از رأس 1 برای رأس های قابل عبور:

قبل از هر منطقه شهر (اگر شما فقط می توانید در جاده ها حرکت کنید).

گزینه 2. برخی از پروازهای شهرستانها در جهان وجود دارد، برای هر هزینه معروف. هزینه پرواز از A تا B ممکن است برابر با هزینه پرواز از B به A باشد. پیدا کردن مسیر حداقل هزینه (احتمالا با انتقال) از کپنهاگ به Barnaul.

تعریف رسمی

مثال

اجرای الگوریتم را در مثال نمودار نشان داده شده در شکل در نظر بگیرید.

اجازه دهید آن را مورد نیاز برای پیدا کردن کوتاه ترین فاصله از اول رأس به همه دیگران.

پیاده سازی در زبان های برنامه نویسی

عملکرد در زبان C (SI)

#define size 6 #define inf 1000000000 int a [اندازه] [اندازه] \u003d (INF، 5، INF، INF، INF، INF)، (1، 2، 3، 4، 5، 6)، // مسیرهای ماتریکس (1، 2، 3، 4، 5، 6)، (1، 2، 3، 4، 5، 6)، // شاخص های افقی از نقطه { 1 , 2 , 3 , 4 , 5 , 6 },{ 1 , 2 , 3 , 4 , 5 , 6 }}; // عمودی به نقطه، ارزش - وزن int d [اندازه]؛ // آرایه ای از کوتاه ترین مسیر یافت شده، شاخص ها - رأس گراف void deikstra () (int v [size]؛ // آرایه ای از برچسب های Int temp، I؛ int minindex، min؛ برای (i \u003d 0؛ i< SIZE ; i ++ ) { d [ i ] = INF ; // آرایه ای از مسیرها بی نهایت اولیه است v [i] \u003d 1؛ ) D [0] \u003d 0؛ انجام دادن ( // اجرای الگوریتم minindex \u003d inf؛ min \u003d inf؛ برای (i \u003d 0؛ من< SIZE ; i ++ ) { if ((v [ i ] == 1 ) && (d [ i ] < min )) { min = d [ i ]; minindex = i ; } } if (minindex != INF ) { for (i = 0 ; i < SIZE ; i ++ ) { if (a [ minindex ][ i ] > 0) (temp \u003d min + a [minindex] [i]؛ اگر (temp< d [ i ]) d [ i ] = temp ; } } v [ minindex ] = 0 ; } } while (minindex < INF ); }

کوتاه ترین مسیر امروزه این یک کار حیاتی است و تقریبا در همه جا استفاده می شود، از طریق پیدا کردن مسیر مطلوب بین دو اشیاء بر روی زمین (به عنوان مثال، کوتاه ترین مسیر از خانه به دانشگاه)، در سیستم های Autopilot، برای پیدا کردن مسیر مطلوب در طول حمل و نقل، تعویض اطلاعات بسته در شبکه ها و T.P.

کوتاه ترین مسیر با استفاده از یک شیء خاص ریاضی به نام Graph در نظر گرفته می شود. جستجو کردن کوتاه ترین مسیر این بین دو رأس مشخص شده در نمودار انجام می شود. نتیجه این مسیر است، یعنی توالی رأس ها و دنده ها، حادثه به دو رأس همسایه و طول آن.

سه بیشتر را در نظر بگیرید الگوریتم موثر قرار دادن کوتاه ترین مسیر:

  • الگوریتم Daekstra;
  • الگوریتم فلوید؛
  • الگوریتم های بیش از حد

این الگوریتم ها به راحتی با تعداد کمی از رأس ها در نمودار انجام می شود. با افزایش تعداد کار جستجو کوتاه ترین مسیر کامل.

الگوریتم Daekstra

این الگوریتم یک الگوریتم بر روی نمودارها است که توسط دانشمند هلند E. Dyakstroy در سال 1959 اختراع شد. الگوریتم کوتاه ترین فاصله را از یکی از رأس های گراف به همه دیگر پیدا می کند و فقط برای نمودارها بدون دنده های وزن منفی کار می کند.

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

الگوریتم Daekstra

مرحله 1. به تمام تاپس، به جز برای اولین بار، وزن یک بی نهایت برابر اختصاص داده می شود و اولین رأس 0 است.

مرحله 2. تمام رأس ها برجسته نیستند.

مرحله 3. اولین رأس فعلی اعلام شده است.

مرحله 4. وزن تمام رأس های غیرقانونی توسط فرمول ترجمه می شود: وزن رأس ناامید کننده حداقل تعداد وزن قدیمی این رأس است، مقدار وزن رأس فعلی و وزن لبه اتصال رأس فعلی با undefidant.

مرحله 5. در میان قله های ناامن، بالا با وزن کم است. اگر این یافت نشد، یعنی وزن تمام رأس ها برابر بی نهایت است، مسیر وجود ندارد. در نتیجه، خروج. در غیر این صورت، جریان بالا نتیجه است. آن اختصاص داده شده است.

مرحله 6. اگر رأس فعلی به مرحله نهایی تبدیل شود، مسیر یافت می شود، و وزن آن وزن رأس نهایی است.

مرحله 7. به مرحله 4 بروید.

در پیاده سازی نرم افزار الگوریتم Daekstra ما مجموعه ای از رأی های S را ساختیم که کوتاه ترین مسیر از رأس اولیه قبلا شناخته شده است. در هر مرحله به مجموعه S، همان رأس اضافه شده است، فاصله از رأس اولیه کمتر از سایر رأس های باقی مانده است. در این مورد، ما از آرایه D استفاده خواهیم کرد، که در آن طول ضبط می شود کوتاه ترین مسیر برای هر رأس هنگامی که مجموعه S شامل تمام رأس های گراف است، سپس آرایه D حاوی طول است کوتاه ترین مسیر از رأس اولیه به هر رأس.

علاوه بر آرایه های مشخص شده، از ماتریس C از C استفاده می کنیم، جایی که عنصر C طول لبه ها (I، J) است، اگر هیچ دنده ای وجود نداشته باشد، طول آن بر روی بی نهایت برابر است، یعنی بیش از هر طول دهانه واقعی. در واقع ماتریس C است ماتریس قایقرانیکه در آن تمام عناصر صفر با بی نهایت جایگزین می شوند.

برای تعیین خود

5.4.3. چالش کوتاهترین مسیر و الگوریتم Daekster تصمیم خود را

اجازه دهید Orgraf مجموعه G.(V., E.)، با هر قوس که با شماره مطابقت دارد
به نام قوس طولانی.

تعریف. لانا مسیر مجموع طول قوس است که این مسیر را تشکیل می دهند. وظیفه کوتاه ترین مسیرچنین می شود

انتخاب 1. طول های کوتاه ترین مسیر (راه های حداقل طول) و مسیرهای خود را از رأس ثابت پیدا کنید s. به تمام رأس های دیگر گراف.

گزینه 2. طول های کوتاه ترین مسیر ها و مسیرهای خود را بین تمام جفت رأس های این نمودار پیدا کنید.

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

توجه داشته باشید که اگر کوتاه ترین مسیر وجود داشته باشد، هر کدام از آن هاست، این نیز کوتاه ترین مسیر بین رأس های مربوطه است.

الگوریتم Daekstra حل مشکل کوتاه ترین مسیر.

الگوریتم با قوس های طول مثبت کار می کند و کوتاه ترین مسیر را از رأس ثابت تعریف می کند s. به تمام رأس های دیگر گراف. این رأس ها را نشان می دهد v. 1 , v. 2 ,…, v. n. .

تعریف. بیایید تماس بگیرید بالا تو دروغ گفتن نزدیک به بالا s.از بالا v.اگر طول کوتاه ترین مسیر از s. قبل از تو کمتر از طول کوتاه ترین مسیر از s. قبل از v.. ما می گوییم که تاپس تو و v. برابر از بالا s.اگر طول کوتاه ترین مسیر از s. قبل از تو و از s. قبل از v. مطابقت کردن

الگوریتم Daekstra به طور پیوسته، رأس گراف را به معنای نزدیکی به بالا می گیرد s. و بر اساس اصول اساسی زیر.

اگر طول قوس اعداد مثبت باشد، پس از آن

    نزدیکترین K. s. بالا - او خودش. طول کوتاهترین مسیر از s. قبل از s. برابر با 0؛

    نزدیکترین K. s. ریشه s.، دروغ از s. در فاصله یک قوس  کوتاه ترین از تمام آرک ها را ترک کنید s.;

    هر نوع متوسط \u200b\u200bکوتاه ترین مسیر از s. به برخی از رأس ها v. دروغ نزدیک به K. s.از رأس نهایی v.;

    کوتاه ترین مسیر به رأس بعدی دستور داده می شود تنها می تواند از طریق قله های قبلا سفارش داده شود.

اجازه دهید الگوریتم قبلا دستور قله را سفارش داد v. 1 , v. 2 v. k. . نشان دادن
,
طول کوتاه ترین مسیر به بالا v. من. .

تمام قوس های گراف منبع را که در یکی از رأس های مجموعه شروع می شود را در نظر بگیرید.
و به پایان می رسد در دیگر رأس های غیر ارادی. برای هر یک از قوس، به عنوان مثال
، من مجموع را محاسبه می کنم
. این مقدار برابر طول مسیر از s. که در yکه در آن رأس v. من. یک صفحه اصلی و مسیر از آن وجود دارد s. که در v. من. - کوتاه ترین مسیر اتصال s. و v. من. .

این تعریف ترین طول های تمام مسیر از آن است s. هنوز به قله ها دستور داده نشده است که تنها رأس ها رأس های متوسط \u200b\u200bهستند k. نزدیکترین K. s.. اجازه دهید کوتاه ترین این مسیرها به پایان برسد w.. سپس w. و است
با نزدیکی به K. s. رأس

از لحاظ فنی اقدامات در الگوریتم Daekstra با استفاده از دستگاه علامت گذاری رأس انجام می شود. تگ ویران v. نشان می دهد که چگونه
. هر برچسب یک عدد برابر با طول برخی از مسیر است s. قبل از v.. برچسب ها به موقع و ثابت تقسیم می شوند. در هر مرحله، تنها یک برچسب ثابت می شود. این به این معنی است که ارزش آن برابر طول کوتاه ترین مسیر به رأس مربوطه برابر است و این رأی خود دستور داده شده است. تعداد رأس بعدی دستور داده شده توسط نامه مشخص شده است r.

شرح الگوریتم.

مرحله 1 (نصب اولیه). قرار دادن
و این علامت ثابت را در نظر بگیرید. قرار دادن
,
و این علائم موقت را در نظر بگیرید. قرار دادن
.

گام 2. (مرحله مشترک) او تکرار می کند n. هنگامی که تمام رأس های گراف سفارش داده می شود.

علامت موقت را دوباره محاسبه کنید
تمام رأس های ناسازگار v. من. که شامل قوس ترک بالا است توسط قانون

با حداقل برچسب زمان، بالا را انتخاب کنید. اگر چند رأس وجود داشته باشد، هر کدام را انتخاب کنید.

بیایید w.- بالا با حداقل برچسب زمان. یک برچسب را بگیرید
ثابت و قرار دادن
.

مراحل الگوریتم Daekstra به راحتی در جدول قرار می گیرند، هر ستون آن مربوط به رأس گراف است. ردیف جدول مطابق با تکرار مرحله کلی است.

مثال. برای نمودار در شکل. 4. پیدا کردن کوتاه ترین مسیر از رأس ها
به تمام رأس های دیگر گراف. دنده ها به معنی دو قوس چند جهته از همان طول است.

تصمیم گیری در برگه 1 برچسب های رأس را در هر مرحله ثبت کرده اند. برچسب های دائمی با "+" مشخص شده اند. به ما توضیح دهید که چگونه برچسب ها محاسبه می شود.

    از رأس 1 قوس، از رأس های 2، 5، 6، 6، به یاد می آورند برچسب های این رأس ها و پر کردن رشته دوم جدول.

بالا از رأس 6 ثابت می شود
.

    از رأس 6 قوس هنوز هم رأی دائمی 2، 5، 8، 9 است. برچسب های زمان خود را دوباره محاسبه کنید

3 ردیف جدول را پر کنید حداقل برچسب های زمان 3 (Top Tag 9)،
.

    از رأس 9 قوس در رأس های هنوز هم غیر ارادی 5، 8، 11، 12. سپس

خط چهارم جدول را پر کنید در این خط، دو رأس  2 و 12 دارای حداقل تگ های زمان برابر با 4 درجه اول، به عنوان مثال، Vertex 2. سپس 12 بالا در مرحله بعدی سفارش داده می شود.

میز 1

بنابراین،
.

    از بالا 2 قوس در رأس های هنوز هم اختلال وجود دارد 3، 4، 5. یادآوری علامت های موقت این رأس ها

5 ردیف جدول را پر کنید حداقل برچسب های زمان 4 (Vertex TAG 12)،
.

6 ردیف جدول را پر کنید حداقل برچسب های زمان 5 (Top Tag 5)،
.

7 رشته جدول را پر کنید تبدیل شدن به یک برچسب ثابت از رأس 8 (آن برابر با 5)،
.

بالا 11 دستور داده شده است.

    از رأس 11 قوس در رأس های ناسازگار 7، 10. یادآوری علامت های زمان این رأس ها.

بالا 4 یک برچسب ثابت می شود.

    از رأس 4 قوس در رأس های غیر ارادی 3، 7 7 محاسبه تگ های زمان

سازماندهی رأس 3.


12 ردیف جدول را پر کنید در این مرحله، ما آخرین ردیف اختلال 10 را سفارش می دهیم.

ساخت یک درخت کوتاه ترین مسیرها.

درخت کوتاه ترین مسیر یک درخت متمرکز با ریشه در بالا است S. . تمام مسیرهای این درخت کوتاه ترین این نمودار است.

کوتاه ترین مسیر درخت بر اساس جدول است، بالا بر روی رأس به ترتیب بر روی مرتبه تبدیل شده است که در آن برچسب های ثابت دریافت کرده اند. اولین درخت در ریشه قرار می گیرد - رأس S. .

ما کوتاهترین راه را برای مثال ما ساختیم.

اول، ما ریشه را در درخت نوشتیم - رأس 1. سپس قوس به یک درخت تبدیل می شود (1.6). یکی دیگر به دستور Vertex 9 دستور داد، طول کوتاه ترین مسیر که برابر است 3. اولین بار شماره 3 در خط سوم ظاهر شد، که پر شده بود
. در نتیجه، Vertex 6 برترین مسیر کوتاه ترین مسیر به رأس 9 است. ما در چوب قوس (6.9) طول 1 را روشن می کنیم.

بالا 2 با طول کوتاهترین مسیر برابر با 4 دستور داده شد. این شماره برای اولین بار در خط سوم ظاهر شد، که پر شده بود
. در نتیجه، کوتاه ترین مسیر در رأس دوم در امتداد قوس عبور می کند (6.2). ما قوس (6.2) طول 2 را روشن می کنیم.

بعد به 12 دستور داد
. اولین بار شماره 4 در خط چهارم ظاهر می شود که پر شده بود
. درخت شامل قوس (9.12) طول 1. کل درخت از کوتاه ترین مسیر در شکل نشان داده شده است. پنج

الگوریتم کیفی می تواند اشتباه باشد اگر قوس منفی در ستون وجود داشته باشد. بنابراین، به دنبال کوتاه ترین مسیر از بالا s. \u003d 1 برای نمودار در شکل. 6، الگوریتم ابتدا دستور Vertex 3، سپس Vertex 2 را سفارش داد و کار را پایان داد. در این مورد، این کوتاه ترین مسیر به بالا 3، از نقطه نظر الگوریتم Daekstra،  یک قوس (1.3) طول 3 است.

در واقع، کوتاه ترین مسیر به رأس 3 شامل ARCS (1.2) و (2.3)، طول این مسیر 5 + (- 3) \u003d 2 است.

با توجه به حضور یک قوس (2.3) یک طول منفی -3، اصول اساسی زیر مختل شد:

    نزدیکترین K. s. پیک از آن در فاصله دو قوس قرار دارد و نه؛

    بالا ترین مسیر کوتاه ترین مسیر 1-2-3 (Vertex 2) بیشتر از رأس 1 (در فاصله 5) از رأس نهایی مسیر 3 قرار دارد.

در نتیجه، حضور قوس طول منفی، راه حل مشکل کوتاه ترین مسیر را پیچیده می کند و نیازمند استفاده از الگوریتم های پیچیده تر، به جای الگوریتم داکسترا است.

وظیفه پیدا کردن کوتاهترین مسیر الگوریتم Daekstra را حل کنید.
کوتاه ترین مسیر را از X0 به X7 پیدا کنید. شمارش توسط عناصر ماتریس هزینه تعیین می شود

ساخت این نمودار


بیایید با عنصر X0 شروع کنیم و ما آن را تگ 0 اختصاص دهیم، همه همسایگان خود را در نظر بگیریم، زیرا هنوز هیچ یادداشت وجود ندارد، شما آنها را مقادیر مربوطه اختصاص دهید:


همه همسایگان X0 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم و به بالای X1 می رویم. همسایگان آن X0، X2، X4، اما X0 مشخص شده، آن را در نظر نگیرید. برای x2: ، برچسب را ترک کنید

برای x4: جایگزینی برچسب همه همسایگان رأس X1 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم


به بالای صفحه x2 بروید همسایگان آن X0، X1، X3، X4، X5، X6، اما X0، X1 مشخص شده اند، آنها را در نظر نمی گیرند.
برای x3: ، برچسب را ترک کنید
برای x5: جایگزینی برچسب
برای x4: ، برچسب را ترک کنید
برای x6: جایگزینی برچسب
همه همسایگان بالای X2 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم.


به بالای صفحه X3 بروید همسایگان آن X0، X2، X6، اما X0، X2 مشخص شده اند، آنها را در نظر نگیرید.
برای x6: ، برچسب را ترک کنید
همه همسایگان بالای X3 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم.


به بالای صفحه X4 بروید همسایگان آن X1، X2، X5، X7، اما X1، X2 مشخص شده اند، آنها را در نظر نگیرید.
برای x5: جایگزینی برچسب
برای x7: جایگزینی برچسب
همه همسایگان بالای X4 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم.


به بالای صفحه X5 بروید همسایگان آن X2، X4، X6، X7، اما X2، X4 مشخص شده اند، آنها را در نظر نگیرید.
برای x6: ، برچسب را ترک کنید
برای x7: ، برچسب را ترک کنید
همه همسایگان بالای X5 در نظر گرفته شده اند، ما آن را علامت گذاری می کنیم.


به بالای صفحه X6 بروید همسایگان آن X2، X3، X5، X7، اما X2، X3، X5 مشخص شده اند، آنها را در نظر نمی گیرند.
برای x7: ، برچسب را ترک کنید
تمام بالای بالای X6 در نظر گرفته شده است، ما آن را علامت گذاری می کنیم. و ما X7 باقی مانده را علامت گذاری کردیم، تمام رأس ها در نظر گرفته شده اند.


نتیجه گیری: کوتاه ترین مسیر X0 آنها در X7 دارای طول 101، این مسیر: X7-X4-X1-X0 است.

زنگ.

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