GuilanCS | علوم کامپیوتر
1.04K subscribers
1.61K photos
60 videos
225 files
1.01K links
💻انجمن علمی علوم کامپیوتر دانشگاه گیلان

🔶اینستاگرام انجمن:https://instagram.com/csguilan

🔷ارتباط با دبیر انجمن(اسماعیل ذوالفقاری):
@anon7vip


🔗گروه دانشجویان:
Download Telegram
📢📢📢 انجمن علمی علوم کامپیوتر برگزار می کند...📢📢📢
کارگاه یک روزه ی " مقاله نویسی به زبان انگلیسی "

می دانیم که تحقیق و پژوهش از اهمیت ویژه ای برخوردار است و به جرات میتوان گفت که اکثر پیشرفت ها بر پایه تحقیق و پژوهش استوار است. مهم تر آنکه، تهیه ی مقاله ، شاید درست ترین شیوه برای ارائه ی نتایج حاصل ازیک تحقیق و پژوهش است.
لذا ازآنجا که نوشتن صحیح و مناسب یک مقاله،پیش از هرچیزی ،مستلزم دانستن چهارچوب کلی و قواعد مقاله نویسی است ، انجمن علمی علوم کامپیوترتصمیم دارد کارگاهی یک روزه ،با موضوعیت مقاله نویسی ( به زبان انگلیسی)
برگزار کند.

از همه ی علاقمندان به پژوهش و مقاله نویسی دعوت میشود تا ازاین فرصت استفاده کنند.
زمان برگزاری کارگاه به زودی اعلام خواهد شد...

کارگاه یک روزه ی مقاله نویسی به زبان انگلیسی
زیر نظرِ جناب دکتر هاشم صابری
دوستان عزیز خسته نباشید ..
جلسه ی چهارم آموزش الگوریتم رو از کانال persian developers براتون فوروارد میکنیم .. انشاءالله براتون مفید باشه
📝 قسمت چهارم آموزش الگوریتم 📝


🌴🌱🌿🍀🍃🌷🌼🌸💐🌳🌲🎄🌵
در این جلسه قصد داریم 3 الگوریتم بسیار مهم در روش تقسیم و حل رو بیان کنیم و پیچیدگی زمانی اونهارو هم مورد بررسی قرار بدیم . و ان شاءالله بعد از اون میریم سراغ یک تعریف مقدماتی از برنامه ریزی پویا
اولین الگوریتمی که میخوایم بررسی کنیم ، الگوریتم جست و جوی دودویی به روش بازگشتی هست .همونطور که گفته شد ، در تقسیم و حل ما روش بالا به پایین رو اعمال می کنیم . هدف از جست و جوی دودویی ، پیدا کردن یک عنصر (عدد) در یک آرایه هست . مکانیزم این جست و جو هم به این شکل هست که فرض کنید عددی که ما به دنبال اون هستیم ، x باشه . یعنی میخوایم x رو در یک آرایه پیدا کنیم . بر اساس این الگوریتم ، عنصر x با عنصر میانی آرایه مقایسه میشه . 3 حالت به وجود میاد . اگر دو تا عدد مساوی باشن که مسئله حل میشه . اگه کوچکتر از عنصر میانی باشه ، به زیر آرایه ی سمت چپ میریم و اگر بزرگتر باشه هم به زیر آرایه ی سمت راست خواهیم رفت .
⚡️تذکر مهم: از ساختار این الگوریتم هم مشخصه که فقط زمانی میتونیم از این الگوریتم استفاده کنیم که آرایه به صورت غیر نزولی (صعودی ) مرتب شده باشه .
مثلا فرض کنیم عدد 19 رو بخوایم توی آرایه ی زیر پیدا کنیم :
در اولین گام ، آرایه به دو زیر آرایه تقسیم میشه . عنصر میانی عدد 29 هست که با 19 برابر نیست . چون 29>19 پس باید به زیر آرایه ی سمت چپ بریم یعنی این آرایه

10 11 14 18 19
حالا مرحله ی گذشته برای آرایه ی جدید ما اجرا خواهد شد و درنتیجه ی ادامه ی همین روند ، عدد مورد نظر پیدا میشه .
خب حالا بریم سراغ شبه کد این الگوریتم
اما پیچیدگی زمانی این الگوریتم به چه صورت هست ؟
ببینید دوستان ، اگه ما پیچیدگی این الگوریتم رو با T(n) نشون بدیم ، به این معناست که داریم پیچیدگی زمانی رو برای n متغیر ( آرایه ای با طول n ) بررسی می کنیم . اگه مرحله ی اول انجام بشه ، یعنی یک مقایسه بین عدد x و عنصر میانی آرایه صورت گرفته و نصف آرایه دور ریخته میشه و همون مکانیزم برای n/2 عضو باقیمانده ی آرایه تکرار خواهد شد . در واقع بین T(n) و T(n/2) فقط 1 واحد زمانی فاصله هست . پس ما میتونیم ادعا کنیم که رابطه ی زیر رو داریم :
با استفاده از قضیه ی اساسی پیچیدگی الگوریتم (تئوری Master) واضح هست که پیچیدگی این الگوریتم از مرتبه ی log n خواهد بود .
اما الگوریتم بعدی مرتب سازی ادغامی هست . دراینجا هدف ما مرتب سازی یک آرایه ی به هم ریخته به روش ادغام هست . (merge sort)
یه اصطلاحی هست به نام" ادغام دوطرفه" و به معنی ترکیب دو آرایه ی مرتب شده در یک آرایه هست . وقتی شما به طور متوالی از فرایند ادغام استفاده کنید ، میتونید تمام اعضای یک آرایه رو مرتب کنید . مثلا اگه یک آرایه ی 8 عضوی داشته باشید ، با تقسیم اون به دو زیر آرایه ی 4 عضوی آنها رو مرتب و سپس ادغام کنید . یعنی با استفاده از این الگوریتم ، کل آرایه ابتدا تقسیم میشه و راه حل ما روی اونها اعمال میشه و سپس با ادغام زیر آرایه ها ، کل آرایه به دست میاد و شما میتونید متوجه بشید که در این الگوریتم هم از روش تقسیم و حل داره استفاده میشه .
ما نیاز به دو الگوریتم داریم .. یکی برای ادغام و دیگری برای مرتب سازی ادغامی که هردو رو به صورت شبه کد بیان می کنیم .