زمان کنونی: ۰۸ اردیبهشت ۱۴۰۳, ۰۴:۱۹ ب.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

الگوریتم پریم(با ماتریس مجاورت)

ارسال:
  

saria پرسیده:

الگوریتم پریم(با ماتریس مجاورت)

میخواستم یکی لگوریتم پریم که با ماتریس مجاورت پیاده سازی میشه رو توضیح بده !
میدونم این الگوریتم یه ماتریس از وزن های کم تولید میکنه .......
میخوام که الگوریتم به زبان الگوریتمی(for i=2 to n do nearest[i=1]) نوشته بشه و گفته شه که دفیفا هر خط تو کدوم مرحله است؟
دوستان میتونند کمکم کنند؟؟

۰
ارسال:
  

۵۴m4n3h پاسخ داده:

RE: الگوریتم پریم(با ماتریس مجاورت)

کد:
function Prim(L[1..n,1..n]):set of edges
۱/ {initialization‌: only node 1 is in B}
۲/T  <--  {will contain the edges of the minimum spanning tree}
۳/ for i=2 to n do
۴/ nearest[i]  <-- 1
۵/ mindist[i]  <--L[i,1]
۶/ {greedy loop}
۷/ repeat n-1 times
۸/ min <-- INF
۹/ for j <-- 2 to n do
۱۰/ if 0 mindist[j] < min Then
۱۱/ min <--  mindist[j]
۱۲/ k  <-- j
۱۳/ T=T [ {nearest[k],k}
۱۴/ mindist[k] <--  -1{add k to B}
۱۵/ for j <--  2 to n do
۱۶/ if L[j,k] < mindist[j] Then
۱۷/ mindist[j] <-- L[j,k]
۱۸/ nearest[j] <-- k Return T

کلاً الگوریتمش این طوریه که توی هر مرحله یه سری راس مارک شده داره و یه سری راس مارک نشده و توی هر مرحله کوتاهترین یالی که یک راس مارک نشده را به یک راس مارک شده وصل میکند پیدا کرده و به مجموعه‌ی یال های انتخاب شده می افزاییم آن سر دیگرش را مارک میکنیم و سایر راس‌ها را update میکنیم.

از راس شماره یک شروع میکنیم و اون رو مارک میکنیم، بعد چون تنها راس مارک شده راس ۱ هست، پس تنها یالی که بین هر راس با یک راس مارک نشده می تواند وجود داشته باشد، تا همین راس ۱ است پس در خط ۴ و ۵ نزدیکترین راس مارک شده به هر کس را راس ۱ قرار میدهد.
[mindist[j‌، اگر j مارک نشده باشد کمترین فاصله ای که بین j و یکی از راس های مارک شده تا کنون پیدا شده است را نگه میدارد (فاصله اش تا نزدیکترین راس مارک شده) و اگر j مارک شده باشد مقدار ۱- دارد
[nearest[j اندیس نزدیکترین راس مارک شده به j را نگه میدارد
از خط ۹ تا خط ۱۲ کوچکترین یالی که یک سر آن مارک شده و یک سر آن مارک نشده را می یابد (k سر مارک نشده‌ی این یال است) و در خط ۱۳ این یال را به مجموعه یال هایی که تا کنون انتخاب شده می افزاید و در خط ۱۴ راس k را مارک میکند.
از خط ۱۵ تا ۱۷ بررسی میکند که اگر فاصله‌ی j تا راسی که جدیداً مارک شده کمتر از فاصله اش تا یال های مارک شده‌ی قبلی بود، مقدارش را به فاصله‌ی جدید تغییر میدهد.
این کار را آن قدر تکرار میکند تا همه‌ی راس‌ها مارک شوند.



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
Sad ذخیره ماتریس پایین مثلثی / بالا مثلثی به شیوه سطری یا ستونی shayesteNEY ۵ ۹,۹۹۳ ۲۲ مهر ۱۳۹۹ ۱۱:۲۸ ب.ظ
آخرین ارسال: Negiiin
  ضرب ماتریس ها roller1829 ۰ ۱,۸۶۲ ۱۹ مهر ۱۳۹۸ ۰۲:۴۸ ب.ظ
آخرین ارسال: roller1829
  ماتریس ها در متلب safoora s ۱ ۱,۹۴۱ ۱۲ مرداد ۱۳۹۷ ۱۲:۲۲ ب.ظ
آخرین ارسال: BBumir
  صعودی کردن ماتریس mدرn The BesT ۷ ۶,۷۵۱ ۲۳ اردیبهشت ۱۳۹۷ ۰۲:۲۴ ب.ظ
آخرین ارسال: Behnam‌
Sad دخیره ماتریس قطری و سه قطری hossein14 ۰ ۱,۸۸۹ ۲۷ آبان ۱۳۹۶ ۱۲:۱۷ ب.ظ
آخرین ارسال: hossein14
  حل مشتق ماتریس hanie_M ۰ ۳,۶۰۷ ۲۵ آبان ۱۳۹۶ ۱۱:۵۹ ب.ظ
آخرین ارسال: hanie_M
  تبدیل تصویر به ماتریس در نرم افزار متلب negar.v ۳ ۸,۹۵۴ ۲۸ مهر ۱۳۹۶ ۱۲:۴۹ ق.ظ
آخرین ارسال: farahnaz
Exclamation یک سوال از ماتریس استراسن senator2011 ۱ ۲,۰۵۸ ۰۶ مرداد ۱۳۹۶ ۰۷:۴۵ ب.ظ
آخرین ارسال: BBumir
  ضرب دو ماتریس به روش استراسن shamim1395 ۱ ۴,۴۲۴ ۲۷ دى ۱۳۹۵ ۰۶:۱۴ ب.ظ
آخرین ارسال: Pure Liveliness
  کدهای الگوریتم سولین,کراسکال,پریم mohammad.chavoshipor ۲ ۲,۹۳۲ ۱۴ دى ۱۳۹۵ ۱۰:۰۵ ب.ظ
آخرین ارسال: sam7ariya

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close