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

در زمان مسابقه می‌توانید سوال‌های خود را از قسمت "سوال بپرسید" مطرح کنید.

موازی‌کاری


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

فایل Source را دانلود کرده و محتوای آن را ببینید. شما باید متد solve از کلاس Parallelism را مطابق با توضیحات زیر پیاده‌سازی کنید.

شما باید پردازش این درخت را از پایین‌ترین سطح (برگ‌ها) شروع کرده و به بالاترین سطح که ریشه درخت در آن قرار دارد برسید. هر Node درخت، دارای سه ویژگی اندیس و پدر و تابع است.

  • اندیس (index): اندیس نود را تعیین می‌کند. نودهای موجود در هر سطح، یک اندیس یکتا دارند.
  • پدر (parent): نود پدر را تعیین می‌کند. برای نود ریشه مقدار آن null است.
  • تابع (func): تابع نود را تعیین می‌کند. برای پردازش هر نود این تابع باید فراخوانی شود.

پردازش درخت باید به این صورت باشد که:

  1. نودهای هر سطح از درخت به صورت موازی و همزمان با هم پردازش شوند (متد funcشان اجرا شود)
  2. فقط زمانی که کار پردازش نودهای یک سطح تمام شد، پردازش نودهای سطح بالاتر می‌تواند آغاز شود.
  3. در هر سطح از درخت، هر نود باید با یک ترد هم‌نام با اندیسش پردازش شود.

نکته🔗

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

مثال🔗

با اجرای متد main از کلاس Main خروجی زیر یکی خروجی‌‎های صحیح محتمل است.

D1 by 1 - F1 by 1 - F2 by 2 - G1 by 1 - G2 by 2 - H1 by 1 -  
Plain text

درختی که در این مثال داده شده است، چنین ساختاری دارد:

.
└── H1
    ├── G1
    ├── G2
        ├── F1
               ├── D1
        ├── F2
Plain text

توجه داشته باشید که تمامی Dها قبل از Fها و تمامی Fها قبل از Gها و تمامی Gها قبل از Hها چاپ شده‌اند. هم‌چنین هر نود توسط ترد هم‌نام با اندیسش پردازش شده است.

آنچه باید آپلود کنید🔗

یک فایل زیپ آپلود کنید که در آن بسته ir.mci.parallel به صورت زیر وجود داشته باشد:

.
└── ir
    └── mci
        └── parallel
            └── Parallelism.java
Plain text

به صورتی که وقتی فایل زیپ را باز می‌کنیم، دقیقا شاخه‌ ir را ببینیم که درون آن شاخه mci و درون آن نیز شاخه parallel قرار دارد. در داخل parallel فایل‌ Parallelism.java باید قرار داشته باشد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.