در کارت گرافیک برای بالا بردن سرعت، پردازش بخش‌های مختلف به صورت موازی انجام می‌شود. این پردازش‌ها را می‌توان به شکل یک درخت نشان داد. در این سوال به پردازش درختی از توابع می‌پردازیم. به شما یک درخت دودویی از توابع به شکل زیر داده می شود. درخت دودویی هر یال جهت‌دار به این معناست که تابعی که یال از آن خارج شده باید قبل از تابعی که یال به آن وارد شده محاسبه شود. (یا می‌توان گفت تابع دوم برای انجام محاسباتش نیاز به خروجی تابع اول دارد). توابع در سه لیست fs و gs و hs از طریق کلاس Functions به شما داده می‌شوند (برای مثال، f[0] همان \(f1\) است). در ضمن توجه داشته باشید که تمام توابع بدون آرگومان ورودی هستند.

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

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

  • با چهار ترد با نام‎های 1 و 2 و 3 و 4: با ترد \(i\)ام، \(fi\) پردازش شود.
  • با دو ترد با نام‎های 1 و 2: با ترد \(i\)ام، \(gi\) پردازش شود.
  • با یک ترد با نام 1: با ترد \(i\)ام، \(hi\) پردازش شود.

دقت کنید که محاسبات هر مرحله (هر طبقه درخت) باید به صورت همزمان انجام شود. (برای مثال \(f1\) و \(f2\) باید همزمان محاسبه شوند).

مثال

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

F1 by 1 - F4 by 4 - F2 by 2 - F3 by 3 - G1 by 1 - G2 by 2 - H1 by 1 - 

توجه داشته باشید که تمامی Fها قبل از Gها و تمامی Gها قبل از Hها چاپ می‎شود.

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

یک فایل zip که وقتی آن را باز می‌کنیم، فقط فایل ThreadSolution.java را ببینیم.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.