project1.pdf

‫به نام خدا‬
‫طراحی و تحلیل الگوریتمها‬
‫استاد‪ :‬دکتر بیگی‬
‫دانشگاه صنعتی شریف‬
‫دانشکده مهندسی کامپیوتر‬
‫تمرین برنامهنویسی ‪۱‬‬
‫مسئلهی نزدیکترین جفت‬
‫تاریخ اعالم‪۱۳۸۵/۲/۱۷ :‬‬
‫موعد تحویل‪۱۳۸۵/۳/۲ :‬‬
‫‪۱‬‬
‫میخواهیم از بین ‪ n‬نقطه داده شده نزدیکترین جفت به هم را بیابیم‪.‬‬
‫در فضای دوبعدی این مسئله یک الگوریتم بدیهی از )‪ O(n2‬دارد؛ اما در اینجا هدف این است که یک الگوریتم بهینه با‬
‫استفاده از تقسیم و حل از )‪ O(n log n‬را ارائه و پیادهسازی نمایید‪.‬‬
‫توجه‪ :‬برای سادگی بیشتر فرض میشود که مختصات نقاط عدد صحیح و مثبت هستند و همچنین نزدیکترین جفت‬
‫ال در شکل باال دو نقطه ‪ p‬و ‪ q‬دارای کمترین فاصله از یکدیگر میباشند و هیچ دو نقطه دیگری دارای این‬
‫یکتاست‪ .‬مث ً‬
‫مقدار فاصله از یکدیگر نمیباشند‪.‬‬
‫نمره اضافی‪ :‬در این قسمت باید مسئله را در حالت کلی ‪-d‬بعدی )‪ (d ≥ 1‬در )‪ O(n(log n)d-1‬حل کنید و برنامه آن را‬
‫بنویسید‪ .‬واضح است که در قسمت قبل ‪ d = 2‬میباشد‪) .‬توجه‪ :‬فرمول )‪ O(n(log n)d-1‬در مورد ‪ d = 1‬صادق نیست و‬
‫برای حالت ‪ d = 1‬هم مسئله از )‪ O(n log n‬است‪(.‬‬
‫‪Closest Pair ۱‬‬
‫مالحظات‪ :‬برای نوشتن برنامهها میتوانید از ‪ C/C++‬و یا ‪ Java‬استفاده کنید و کد شما باید قابل کامپایل در کامپایلر‬
‫استاندارد مربوطه باشد‪ .‬نام فایل اصلی باید ‪ ClosestPair.c‬یا ‪ ClosestPair.cpp‬یا ‪ ClosestPair.java‬باشد‪.‬‬
‫مجموعه فایلهای خود را در قالب یک ‪ zip‬فایل که نام آن به فرم ‪ proj1-81234567‬میباشد به‬
‫‪ [email protected]‬تا موعد تحویل ارسال کنید و عنوان ‪ e-mail‬ارسالی را هم به فرم نام ‪ zip‬فایل قرار دهید و از‬
‫فرستادن فایلهای ‪ .exe‬و ‪ .bat‬خودداری کنید‪.‬‬
‫تذکر مهم‪ :‬در مورد برنامههای مشابه نمرهی آن بین افراد دخیل تقسیم میشود‪.‬‬
‫جزئیات ورودی و خروجی‬
‫ورودی و خروجی از طریق فایل میباشد که در ادامه به توضیح آن میپردازیم‪.‬‬
‫• ورودی‬
‫فایل ورودی ‪ ClosestPair.in‬میباشد‪ .‬در خط اول آن دو عدد تعداد نقاط و تعداد ابعاد قرار دارد و در خطوط‬
‫بعد مختصات نقاط به ازای ابعاد مختلف آمده است‪.‬‬
‫• خروجی‬
‫فایل خروجی ‪ ClosestPair.out‬است و حاوی دو عدد‪ ،‬به ترتیب صعودی که بیانگر شماره نزدیکترین نقاط به‬
‫هم هستند‪ ،‬میباشد‪.‬‬
‫• مثال‬
‫‪ClosestPair.out‬‬
‫‪ClosestPair.in‬‬
‫‪3 4‬‬
‫‪4 2‬‬
‫‪1 1‬‬
‫‪2 7‬‬
‫‪4 3‬‬
‫‪6 2‬‬