درخت پوشای مینیمم توزیع شده

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

مساله درخت پوشای مینیمم توزیع شده (به انگلیسی: Distributed minimum spanning tree)، شامل درخت پوشای مینیمم توسط الگوریتم توزیع شده در شبکه (جایی که گره‌ها با عبور پیام با هم در ارتباط اند) است ، اگرچه اساس این روش شبیه الگوریتم Borůvka است. یکی از کاربردهای مهم این مساله، پیداکردن درختی برای broadcasting (پخش کردن) استفاده می‌شود. به طور خاص، زمانی را که هزینه یک پیام از طریق لبه در گراف منتقل کند قابل توجه است. MST می‌تواند هزینه کل فرایند منبع برای برقراری ارتباط با تمام فرایندهای دیگر در شبکه را به حداقل برساند. این مساله برای اولین بار در سال 1983 و در زمان O(V \log V)توسط Gallager و همکارانش پیشنهاد شد.[۱] که V تعداد رئوس در گراف است.بعدها راه حل دیگری ارائه شد O(V)[۲] و سرانجام [۳][۴] O(\sqrt V \log^* V + D) که D شبکه یا قطر گراف است.پیچیدگی زمانی کمتر راه حل مقید بوده است که در نهایت نشان داده می شود [۵] \Omega\left({\frac{\sqrt V}{\log V}}\right) .

بررسی اجمالی[ویرایش]

گراف ورودی G(V,E) در یک شبکه در نظر گرفته شده، که رئوس V گره ها و لبه های مستقل هستند. E لینک های ارتباطی هستند. لینک ها مانند مساله کلاسیک برای نمایش وزن داده شده است.

در آغاز الگوریتم، گره ها فقط وزن لینک هایی که به آن متصل هستند را می دانند.

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

درخت پوشای مینیمم در گذر مدل پیام[ویرایش]

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

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

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

با این حال، نوبری و همکاران [۶] یک الگوریتم موازی PMA، پیشنهاد دادند که به موازات الگوریتم پریم است.با توجه به این مشکلات، روش های جدید برای الگوریتم های های MST توزیع شده در مدل گذر پیام مورد نیاز شد.

الگوریتم GHS[ویرایش]

الگوریتم GHS تشکیل شده است از Gallager، Humblet و Spira .یکی از شناخته شده ترین الگوریتم های نظریه محاسبات توزیع شده است. این الگوریتم می تواند MST را در مدل گذر پیام غیرهمزمان ایجاد کند.

پیش شرط ها[ویرایش]

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

شرح الگوریتم[ویرایش]

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

  • Branch، لبه هایی که در حال حاضر مشخص شده است، بخشی از MST هستند.
  • Rejected، لبه هایی که در حال حاضر مشخص شده است، بخشی از MST نیستند.
  • Basic، لبه ها نه لبه های شاخه و نه رد لبه است.

برای آگاهی دادن به قطعات سطح صفر هر گره، به شرح زیر انجام دهید:

  1. حداقل وزن لبه آن را انتخاب کنید و مانند لبه ی شاخه ها علامت گذاری کنید.
  2. یک پیام از طریق لبه ی شاخه برای اطلاع دادن به گره در طرف دیگر ارسال کنید.
  3. برای دریافت یک پیام از طرف دیگر لبه منتظر بمانید.

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

منتشر کردن[ویرایش]

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

convergecast[ویرایش]

در این مرحله، تمام گره ها در قطعه، برای پیدا کردن حداقل وزن لبه خروجی قطعه همکاری می کنند.لبه های خروجی، لبه هایی هستند که به قطعات دیگر متصل می شوند. پیام هایی که دراین مرحله فرستاده می شوند در جهت مخالف مرحله پخش هستند.برای مقدار دهی اولیه تمام برگ ها (گره هایی که تنها یک لبه ی شاخه دارند)، یک پیام از طریق لبه ی شاخه فرستاده می شود .پیام هایی که حداقل وزن لبه ی خروجی را دارند پیدا می شوند.راه حلی برای پیدا کردن حداقل لبه خروجی بعداً مورد بحث قرار خواهد گرفت. برای هر یک از گره های بدون برگ (تعدادلبه های شاخه آن را n درنظر بگیرید)، پس از دریافت n-1 پیام convergecast، حداقل وزن پیام انتخاب می شود و با وزن های لبه های خروجی مقایسه می شود. کمترین وزن به سمت شاخه ی آن فرستاده می شود و از broadcast دریافت می شود.

تغییرهسته[ویرایش]

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

چگونه می توان حداقل وزن خروجی لبه را پیدا کرد؟[ویرایش]

همانطور که در بالا بحث شد، هر گره نیاز به پیدا کردن حداقل وزن لبه خروجی پس از دریافت پیام پخش از هسته دارد. اگر گره n یک broadcast دریافت کند، می تواند حداقل وزن اولیه ی لبه را انتخاب کند و یک پیام به گره n در سوی دیگر با استفاده از ID (شماره قطعه) و سطح آن ارسال کند . سپس گره n، تصمیم می گیرد که آیا لبه یک لبه ی خروجی است یا نه و یک پیام برای اطلاع دادن نتیجه به گره n می فرستد. این تصمیم با توجه به موارد زیر گرفته می شود:

                                                                              (Case 1: Fragment_ID(n) = Fragment_ID(n

سپس، گره n و 'n متعلق به قطعه مشابه است.

                                                   (Case 2: Fragment_ID(n) != Fragment_ID(n’) and Level(n) <= Level(n

سپس، گره n و 'n متعلق به قطعات مختلف است.

                                                    (Case 3: Fragment_ID(n) != Fragment_ID(n’) and Level(n)> Level(n

نمی‌توانیم نتیجه گیری خاصی کنیم و دلیل آن این است در حال حاضر ممکن است دو گره به همان قطعه تعلق داشته باشد. اما گره 'n به علت تاخیر پیام broadcast هنوز این حقیقت را کشف نکرده است.در این حالت، الگوریتم به شما اجازه می دهد که گره ’n ، پاسخ را تا زمانی که سطح آن بالاتر یا برابر با سطح باشد از گره n دریافت کند و به تعویق بیندازید.

چگونه می توان دو قطعه را باهم مقایسه کرد؟[ویرایش]

فرض کنید F و’F دو قطعه ای باشند که می خواهیم به هم مقایسه کنیم. که به دو روش می توان مقایسه را انجام داد:[۷][۳]

  • Merge: این روش زمانی استفاده می شود که دو قطعه ی F و ’F، حداقل وزن لبه خروجی شان را به اشتراک بگذارند . (’Level(F) = Level(F .سطح قطعه ی مقایسه شدهLevel(F) + 1 خواهد بود.
  • Absorb: این روش زمانی استفاده می شود که (’Level(F) <Level(F و قطعه ی مقایسه شده و’Level F را خواهد داشت.

علاوه بر این زمانی که از "Absorb" استفاده می شود ، F باید در حالت تغییر هسته باشد و این در صورتی است که ’F می تواند در حالت دلخواه باشد. به همین دلیل "Absorb" به حالتی که برای’F انتخاب می شود بستگی دارد. فرض کنید که e لبه ای است که ’F و F با n و’n دو گره متصل شده به e با هم ترکیب می شوند. این دو نمونه را در نظر بگیرید:

نمونه1: گره’n، پیام broadcastرا دریافت کرده است اما پیام convergecast را به هسته نفرستاده است. در این حالت، قطعه F به سادگی می تواند فرایند پخش 'F بپیوندد.تصور کنید که F و 'F در حال حاضر با’’F ترکیب شده است.بنابراین می خواهیم حداقل وزن لبه ی خروجی را از ’’F پیدا کنیم.به این منظور گره’n ،

نمونه2: گره 'n، یک پیام convergecast به هسته فرستاده است.قبل ازاینکه گره'n یک پیام convergecast بفرستد، باید حداقل وزن لبه ی خروجی انتخاب شود. همانطور که در بالا بحث شد، به لبه های دیگر یک پیام آزمایشی می فرستیم و منتظر پاسخ آن می مانیم.فرض کنید 'e لبه انتخاب شده است، ما می توانیم به شرح زیر نتیجه گیری کنیم:

  1. e’ != e
  2. (weight(e’) <weight(e


بیشترین تعداد سطوح[ویرایش]

همانطور که در بالا ذکر شد، قطعات با "Merge" یا "Absorb" ترکیب شده است. "Absorb" ، حداکثر سطح میان قطعات را تغییر نمی‌دهد. "Merge"، حداکثر سطح را یک واحد افزایش می دهد.در بدترین حالت، همه قطعات با"Merge" مقایسه می شود. به طوری که تعداد قطعات ، حدوداً بیش از نیمی در هر سطح، کاهش می یابد. بنابراین حداکثر تعداد سطوح O(\log V) ، که در آن V تعداد گره است.

الگوریتم های تقریبی[ویرایش]

الگوریتم تقریبی O(\log n) توسط مالک خان و گوپال توسعه داده شد[۸] .زمان اجرای این الگوریتم، O(D+L\log n) است که L که قطر کوتاه ترین مسیر محلی گراف است[۸].

منابع[ویرایش]

  1. Baruch Awerbuch. “Optimal Distributed Algorithms for Minimum Weight Spanning Tree, Counting, Leader Election, and Related Problems,” Proceedings of the 19th ACM Symposium on Theory of Computing (STOC), New York City, New York, May 1987.
  2. Robert G. Gallager, Pierre A. Humblet, and P. M. Spira, “A distributed algorithm for minimum-weight spanning trees,” ACM Transactions on Programming Languages and Systems, vol. 5, no. 1, pp. 66–77, January 1983.
  3. ۳٫۰ ۳٫۱ Nancy A. Lynch. Distributed Algorithms. Morgan Kaufmann, 1996.
  4. Shay Kutten and David Peleg, “Fast Distributed Construction of Smallk-Dominating Sets and Applications,” Journal of Algorithms, Volume 28, Issue 1, July 1998, Pages 40-66.
  5. David Peleg and Vitaly Rubinovich “A near tight lower bound on the time complexity of Distributed Minimum Spanning Tree Construction,“ SIAM Journal on Computing, 2000, and IEEE Symposium on Foundations of Computer Science (FOCS), 1999.
  6. Nobari, Sadegh; Cao, Thanh-Tung; Karras, Panagiotis; Bressan, Stéphane (2012), "Scalable parallel minimum spanning forest computation", Proceedings of the 17th ACM SIGPLAN symposium on Principles and Practice of Parallel Programming (New Orleans, Louisiana, USA: ACM) (11): 205–214, doi:10.1145/2145816.2145842, ISBN 978-1-4503-1160-1  Unknown parameter |keywords= ignored (help); Unknown parameter |address= ignored (|location= suggested) (help).
  7. Robert G. Gallager, Pierre A. Humblet, and P. M. Spira, “A distributed algorithm for minimum-weight spanning trees,” ACM Transactions on Programming Languages and Systems, vol. 5, no. 1, pp. 66–77, January 1983.
  8. ۸٫۰ ۸٫۱ Maleq Khan and Gopal Pandurangan. “A Fast Distributed Approximation Algorithm for Minimum Spanning Trees,” Distributed Computing, vol. 20, no. 6, pp. 391–402, Apr. 2008.
[۱][۲]
  1. Robert G. Gallager, Pierre A. Humblet, and P. M. Spira, “A distributed algorithm for minimum-weight spanning trees,” ACM Transactions on Programming Languages and Systems, vol. 5, no. 1, pp. 66–77, January 1983.
  2. Nancy A. Lynch. Distributed Algorithms. Morgan Kaufmann, 1996.