- شروع کننده موضوع
- #1
MiladRZ
کاربر جدید
- ارسالها
- 3
- امتیاز
- 4
- نام مرکز سمپاد
- شهید سلطانی کرج
- شهر
- کرج
سلام من میلاد رضایی هستم از بچه های کرج http://acm.sgu.ru/teaminfo.php?id=051583
خوب هدفم از این پست یه جورایی معرفی خودم و همچنین معرفی یکی از مسئله های خیلی قشنگ تو گراف به اسم توپولوژیکال سرت هستش البته فکر کنم بیشترتون بلد باشین
فرض کنید شما یه دانشجو هستید که می خواید برای دانشگاه خود یه برنامه ریزی کنید که هر ترم چه درس هایی رو بخونید. فرض کنید هر ترم فقط می تونید یه درس رو بخونید و همچنین بعضی درس ها پیش نیاز دارن که برای خوندن اونا اول باید پیش نیاز اونارو خونده باشین
ورودی : یه n که تعداد کله درس هاست و , یه m که تو m خط بعدی تو هر خط 2 به صورت a , b میاد که نشون میده a پیش نیاز b هستش
خروجی : یه ترتیب که بتونیم بر اساس اون برنامه درس خوندنمونو بچینیم
خوب باید یه الگوریتم بدیم که مسئله رو حل کنه ولی چه جوری؟
بی مقدمه می رم سره اصله مطلب :
سعی می کنیم از روی مسئله یک گراف جهت دار بسازیم به صورتی که اگر درس a پیش نیاز درس b بود یه یال از a به b میکشیم
شرح الگوریتم:
در مرحله اول سعی می کنیم راسی را پیدا کنیم که درجه آن 0 باشد واضح است که این راس در هر گونه گرافی وجود دارد (سعی کنید با اکسترمال اثبات کنید) این راس را حذف می کنیم و آن را چاپ می کنیم وقتی این راس حذف می شود راس های خروجی از آن نیز حذف می شه خوب دوباره به مرحله اول برمی گردیم و اینکار را تا جایی ادامه میدهیم که همه راس ها چاپ شده باشند
اثبات الگوریتم: سعی کنید با استقرا اثبات کنید (منظورم ثابت حلقست فکرکنم!!!)
اگر اشتباه نکنم برنامه از (O(V + E هستش
خوب اینم یه سری تمرین براتون که برین توپوژیکال سرت رو کامل یاد بگیرین با حله اینا(البته دومی زیاد ربط نداره ها!!!)
http://acm.timus.ru/problem.aspx?space=1&num=1022
http://acm.timus.ru/problem.aspx?space=1&num=1280
اینم کدهای منه برای سوال ها که جفتش اکسپت هم شدن
http://paste.ubuntu.com/1400162/
http://paste.ubuntu.com/1400165/
بازم اگه توضیحم بد بود بزارین به حساب بی تجربگیم
راستی اگه کسی تو ترجمه کتاب ها مشکل داره می تونم کمکش کنم
خوب هدفم از این پست یه جورایی معرفی خودم و همچنین معرفی یکی از مسئله های خیلی قشنگ تو گراف به اسم توپولوژیکال سرت هستش البته فکر کنم بیشترتون بلد باشین
فرض کنید شما یه دانشجو هستید که می خواید برای دانشگاه خود یه برنامه ریزی کنید که هر ترم چه درس هایی رو بخونید. فرض کنید هر ترم فقط می تونید یه درس رو بخونید و همچنین بعضی درس ها پیش نیاز دارن که برای خوندن اونا اول باید پیش نیاز اونارو خونده باشین
ورودی : یه n که تعداد کله درس هاست و , یه m که تو m خط بعدی تو هر خط 2 به صورت a , b میاد که نشون میده a پیش نیاز b هستش
خروجی : یه ترتیب که بتونیم بر اساس اون برنامه درس خوندنمونو بچینیم
خوب باید یه الگوریتم بدیم که مسئله رو حل کنه ولی چه جوری؟
بی مقدمه می رم سره اصله مطلب :
سعی می کنیم از روی مسئله یک گراف جهت دار بسازیم به صورتی که اگر درس a پیش نیاز درس b بود یه یال از a به b میکشیم
شرح الگوریتم:
در مرحله اول سعی می کنیم راسی را پیدا کنیم که درجه آن 0 باشد واضح است که این راس در هر گونه گرافی وجود دارد (سعی کنید با اکسترمال اثبات کنید) این راس را حذف می کنیم و آن را چاپ می کنیم وقتی این راس حذف می شود راس های خروجی از آن نیز حذف می شه خوب دوباره به مرحله اول برمی گردیم و اینکار را تا جایی ادامه میدهیم که همه راس ها چاپ شده باشند
اثبات الگوریتم: سعی کنید با استقرا اثبات کنید (منظورم ثابت حلقست فکرکنم!!!)
اگر اشتباه نکنم برنامه از (O(V + E هستش
خوب اینم یه سری تمرین براتون که برین توپوژیکال سرت رو کامل یاد بگیرین با حله اینا(البته دومی زیاد ربط نداره ها!!!)
http://acm.timus.ru/problem.aspx?space=1&num=1022
http://acm.timus.ru/problem.aspx?space=1&num=1280
اینم کدهای منه برای سوال ها که جفتش اکسپت هم شدن
http://paste.ubuntu.com/1400162/
http://paste.ubuntu.com/1400165/
بازم اگه توضیحم بد بود بزارین به حساب بی تجربگیم
راستی اگه کسی تو ترجمه کتاب ها مشکل داره می تونم کمکش کنم