الگوریتم امروز

وبلاگ تخصصی الگوریتم

الگوریتم امروز

وبلاگ تخصصی الگوریتم

وبلاگ علمی و مخصوص مباحث الگوریتمی است.
نظر خصوصی نگذارید چون جواب نمی‌دهم نظر عمومی بگذارید بدون نام هم که باشد همانجا جواب می‌دهم.

بایگانی

۳۴ مطلب در تیر ۱۳۹۳ ثبت شده است

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ تیر ۹۳ ، ۱۰:۳۲
سپیده آقاملائی

این یک حالت همیشه زنده از بازی زندگی است (یک بلوک ۲*۲ از خانه‌های زنده) که اینجا مثلاً برای زمان ۱۰ امتحان شده است که آخرین عدد فایل است (در یک خط جدا نوشته شده) و می‌توانید آن را عوض کنید. درست کردن فایل تست برای مسأله کار سختی نیست ولی گفتم اگر کسی خواست..

نمونه‌ی ۱۰۰*۱۰۰:

دریافت
حجم: 19.7 کیلوبایت

نمونه‌ی ۱۰۰۰*۱۰۰۰:

دریافت
حجم: 1.91 مگابایت

۰ نظر موافقین ۰ مخالفین ۰ ۰۲ تیر ۹۳ ، ۰۹:۲۴
سپیده آقاملائی
این قسمت سر کلاس درس داده نشد اما جالب بود به همین دلیل اینجا می‌نویسم.
با توجه به شرط‌های موازی بودن با محورهای مختصات و داشتن یک رأس روی نقاط ورودی، به ازای هر نقطه ۴ مستطیل ممکن داریم.
در حالت کلی گفتیم که مسأله NP-hard است اما اگر اجازه دهیم دو مستطیل از مستطیل‌ها مجاز باشند حل می‌شود.
یکی از این دو حالت مجاز را با xi و دیگری را با xi' نشان می‌دهیم (برای هر نقطه pi). در نتیجه تقاطع دو مستطیل به صورت یک عبارت با دو جمله نشان داده می‌شود. پس به مسأله‌ی 2-SAT تبدیل می‌شود و در زمان خطی از مرتبه تعداد تقاطع‌های مستطیل‌ها حل می‌شود.
لم ۱: اگر مستطیلی بیشتر از ۲۴ مستطیل دیگر را قطع کند جواب نداریم.
نتیجه: تعداد تقاطع مستطیل‌ها ثابت است پس از مرتبه O(n^2) تقاطع داریم. (انتخاب دو مستطیل متقاطع * ۲۴) که این حالت می‌تواند اتفاق بیفتد:
اگر تعداد تقاطع‌های مستطیل‌ها p تا باشد، می‌توان در زمان O(n log n + p) آنها را پیدا کرد و حالت جواب نداشتن را تشخیص داد.
برای این مسأله الگوریتم O(n log^2 n) ارائه شده است و برای حالت خاص آن که مربع‌های هم‌اندازه باشد الگوریتم O(n lg n) وجود دارد.
*الگوریتم برای حالت کلی:
ابتدا به هر نقطه ۴ مربع با اندازه‌ی صفر نسبت می‌دهیم، سپس طول ضلع را بزرگ می‌کنیم تا وقتی که یک نقطه‌ی دیگر در آن بیفتد یا تقاطع طوری رخ بدهد که به یک حالت دو مستطیل مجاز برسیم که در این صورت الگوریتم دو مستطیل را اجرا می‌کنیم. این افزایش طول ضلع را تا جایی که هیچ مربعی دور یک نقطه نباشد یا نشود برای دو مستطیل مجاز جواب پیدا کرد؛ ادامه می‌دهیم.
*تحلیل:
حالت بد وقتی رخ می‌دهد که همه‌ی نقاط روی پوسته محدب باشند در این صورت همیشه می‌توان یک مربع را بزرگتر کرد که باعث می‌شود طول ضلع به بینهایت میل کند! فرض کنیم این حالت را جدا کنیم.
لم: تعداد مربع‌هایی که نقطه‌ای در آنها نیست و مربع حول یک نقطه را قطع می‌کنند حداکثر ۲ است.
ضریب تقریب: طول ضلع مربع‌های الگوریتم حداقل نصف جواب بهینه است.
با توجه به اینکه حداکثر ۲ مربع حول یک نقطه می‌توانند شامل نقطه باشند و لم قبل ثابت می‌شود.
زمان اجرا: در حالت عادی باید O(n^2) شود اما با استفاده از یک sweep که O(n log n) زمان می‌برد و محاسبه‌ی جواب 2-SAT در هر گام که O(n) زمان می‌برد، اگر جوابها را تا پایان رویدادها حساب کنیم و بعداً با باینری سرچ جواب بهینه را پیدا کنیم، می‌توانیم زمان کل الگوریتم را به O(n lg n) برسانیم.
*تعمیم:
با یک تبدیل آفین می‌توان آن را به حالت‌های دیگر هم تعمیم داد.
*اثبات NP-complete بودن:
مسأله‌ی 3-SAT را به این مسأله تبدیل می‌کنیم. نقاط را طوری می‌چینیم که فقط دو مستطیل مجاز داشته باشند که به این حالت‌ها xi و x'i می‌گوییم. در نتیجه برای نقاط مجاور آنها هم جواب به صورت یکتا معلوم می‌شود که به آن هم یک متغیر نسبت می‌دهیم. در نتیجه به ازای هر نقطه متغیر دو قطر و متغیر مستطیل‌های خود آن را باید در نظر بگیریم که در کل ۳ تا متغیر می‌شود. پس اینکه تصمیم بگیریم که n نقطه را می‌توان با مستطیل‌ها پوشاند NP-complete است.
۰ نظر موافقین ۰ مخالفین ۰ ۰۱ تیر ۹۳ ، ۱۳:۱۲
سپیده آقاملائی

یادتون هست وقتی که کتاب‌های صفر و یک مد شده بودند. (یک ربطی به فیزیک داشت و ما می‌خواندیم که بگوییم خوانده‌ایم.)

حالا این پروژه‌ی موازی را دیدم یادم افتاد. :)) به درد نخورتر از این چیزی ندیده‌ام! :) تا جایی که یادم است قرار بود پروژه مفید و کاربردی باشد...

من ایمیل زدم درخواست دادم مهلتش تمدید بشود الآن تا ۵شنبه وقت دارد.

۰ نظر موافقین ۰ مخالفین ۰ ۰۱ تیر ۹۳ ، ۱۱:۴۲
سپیده آقاملائی