http://en.wikipedia.org/wiki/Lazy_caterer%27s_sequence
http://ocw.mit.edu/courses/mathematics/18-319-geometric-combinatorics-fall-2005/
من یک جمله توی دفترم دارم که هر ریسهای میتواند ۲ تا ریسهی دیگر بسازد که به نظرم غلطه. الآن که با کتاب چک کردم درسته که هر دو مثالی که زده برای حالتهای با ۲ تا نخ بوده ولی هیچ محدودیتی روی تعدادش نگذاشته. در نتیجه من بیخودی این حالت را حساب کردم. :|
مثال فیبوناچی هم طبیعتاً ربطی به این قضایا نداره چون اون خودش رابطه بازگشتیاش حل کردنش به صورت موازی O(n) زمان میخواهد. (طول مسیر بحرانی)
-------
برای مرتب سازی روی مدل پروانهای هم bitonic sort را نوشتم در حالی که به خاطر اینکه روی پروانه داریم اجرا میکنیم ترتیبش یک جور دیگه باید باشه که من سر جلسه هر کاری کردم بهتر از اون نشد. توی کتاب هم گفته به صورت بازگشتی این کار را انجام میدهیم و اصلاً معلوم نیست چطوری این کار را کرده. :|
--------
فکر کنم هدف سوال ۲ هم این بود که حلقه موازی بنویسیم نه اینکه مثل من کل مسأله را در زمان log n حل کنیم! :) :|
۱- multithreaded programming
الف) برنامهی ترانهادهی ماتریس و اثبات درستی آن
ب) اگر بعد از هر فراخوانی زیرمسأله یک sync بگذاریم چه میشود؟
۲- یک برنامه چندریسهای بنویسید که اعداد را به دو قسمت کمتر مساوی میانگین و بیشتر از میانگین تقسیم کند اما ترتیب اعداد ورودی را به هم نزند.
۳- در برنامهی MST موازی قسمت های زیر را چه کسی برای چی در چه زمانی و ... انجام میداد؟
الف) P(i) = P(P(i)
ب) L(i) = L(P(i))
۴- مسیریابی:
الف) مثالی بزنید که 2n/3 بافر نیاز داشته باشد. (قسمت هر پردازنده در صورت سوال غلط بود)
ب) آن را با مرتب سازی حل کنید. زمان؟
ج) آن را با پیش پردازش حل کنید. زمان؟
۵- الگوریتم parallel prefix را برای مدل hypercube بنویسید.
۶- مرتب سازی روی مدل پروانهای/hypercube را بنویسید.
http://www.cs.duke.edu/~pankaj/publications/slides/kinetic-range.pdf