یادداشت‌های یک معلم برنامه‌نویسی، حل مسئله، علم داده و یادگیری ماشین

 

واژه‌شناسی رمزنگاری #ریاضیات

یکی از شاخه‌های مهم علم ریاضیات دوست‌داشتنی کاربرد آن در حوزه امنیت ارتباطات و اطلاعات است. استفاده از رمزنگاری در متون مهم و حساس قدمت زیادی دارد. در زمان سزار روم روشی برای رمزنگاری استفاده می‌شده که امروزه به روش رمزنگاری سزار مشهور است. در الگوریتم سزار به جای هر حرف از متن اصلی، سومین حرف بعد از این حرف در الفبای زبان را جایگزین می‌کردند. مثلا در زبان انگلیسی به جای A از D و به جای Y از B استفاده می‌شد.


الگوریتم‌های ریشه‌یابی #ریاضیات

منظور از ریشه‌ها یک تابع مقادیری برای متغیرهای ورودی آن هستند که به ازای آنها خروجی تابع صفر شود. به عنوان مثال خروجی تابع $f(x)=2x-4$ به ازای $x=2$ صفر یا مقدار $2$ ریشه معادله $2x-4=0$ است. به همین ترتیب در مورد معادلات درجه دوم نیز می‌دانیم چطور می‌توانیم به ریشه یا ریشه‌ها در صورت موجود بودن دست پیدا کنیم. البته لزومی ندارد پاسخ معادله یک عدد صحیح یا گویای متناهی باشد. به عنوان مثل جواب معادله‌های $x^2 - 2 = 0$ و $sin(\frac{x}{2}) = 1$ به ترتیب اعداد گنگ $\sqrt{2}$ و $\pi$ هستند که در عمل امکان ذخیره‌سازی تک تک ارقام اعشاری در کامپیوتر وجود ندارد.


پیمایش درخت دودویی #ساختمان-داده
در علم کامپیوتر و ساختمان‌ داده‌های برنامه‌نویسی منظور از درخت دودویی درختی است که از یک گره به نام ریشه و حداکثر دو زیردرخت برای این گره تشکیل شده است که هر کدام از این دو زیردرخت خودشان یک درخت دودویی هستند. به دو گره ریشه این دو زیردرخت (در صورت موجود بودن) فرزندان چپ و راست گفته می‌شود. به همین ترتیب زیردرختی که فرزند راست در گره آن قرار دارد زیردرخت راست و زیردرختی که فرزند چپ در گره آن قرار دارد زیردرخت چپ گره نامیده می‌شوند.

  


الگوریتم آنلاین #الگوریتم

شاید برای شما هم پیش آمده باشد که در یک سفر بین شهری بخواهید از سرویس‌های بهداشتی بین راه استفاده کنید. اما از وضعیت نظافت سرویس‌های طول مسیر اطلاع ندارید و مشخص نیست اگر از یک سرویس بگذرید، آیا امیدی هست محل مناسب‌تر دیگری پیدا شود؟ در واقع سوال این است که چقدر احتمال دارد بهترین و تمیزترین سرویس بهداشتی را از بین گزینه‌های ممکن انتخاب کرده باشیم و حداقل چطور می‌توانیم مطمئن شویم که با احتمال بالایی انتخاب خوبی داشته‌ایم؟ چالش مهم این نوع مسائل انتخاب بهتر از بین گزینه‌هایی هست که به صورت جریانی از اطلاعات یک به یک در اختیار ما قرار می‌گیرند.


کتاب Competetive Programming #منبع-آموزشی

ویراست سوم کتاب برنامه‌نویسی رقابتی با نام کامل Competitive Programming 3: The New Lower Bound of Programming Contests با تلاش Steven Halim و Felix Halim از مربیان تیم‌های برنامه‌نویسی ACM-ICPC سنگاپور تالیف و در سال ۲۰۱۳ منتشر شده است که امروزه به عنوان یکی از منابع مناسب برای آمادگی تیم‌های شرکت‌کننده در مسابقات برنامه‌نویسی الگوریتمی بویژه مسابقات برنامه‌نویسی ACM-ICPC توصیه می‌شود.


سینوس و کسینوس را قورت بده
#ریاضیات
محاسبه سریع سینوس و کسینوس زوایای مشهور به روش جدول الگودار
الگوریتم جستجوی اول عمق (DFS)
#الگوریتم
معرفی الگوریتم جستجوی اول عمق (DFS) برای پیمایش گراف و کاربردهای آن به همراه قطعه کد به زبان برنامه‌نویسی ++C
برج هانوی
#مسئله-الگوریتمی
بررسی مسئله برج هانوی و روش‌های حل بازگشتی و غیربازگشتی آن به همراه کد به زبان ++C
معمای هشت وزیر
#مسئله-الگوریتمی
بررسی معمای هشت وزیر (n وزیر یا چند وزیر) و یک الگوریتم عقبگرد برای حل مسئله
حلقه‌های تکرار در ++C
#برنامه-نویسی
آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن
دنباله اعداد فیبوناچی
#الگوریتم
بررسی الگوریتم‌های محاسبه دنباله اعداد فیبوناچی و کارایی آنها
ضرب زنجیره‌ای ماتریس‌ها
#الگوریتم
بحث در مورد ضرب زنجیره‌ای ماتریس‌ها و روش پیاده‌سازی الگوریتم پرانتزبندی بهینه آن با روش تقسیم و حل و روش برنامه‌نویسی پویا
پیچیدگی زمانی اجرای الگوریتم
#الگوریتم
بررسی مفهوم پیچیدگی زمانی الگوریتم برای بررسی کارایی آن و مقایسه الگوریتم‌ها
الگوریتم‌های تقسیم و حل
#الگوریتم
آشنایی با تکنیک الگوریتم‌های Divide and Conquer (تقسیم و حل / تقسیم و غلبه) و کاربردهای آن در مرتب‌سازی، جستجو و حل مسائل الگوریتمی دیگر
درخت Heap
#ساختمان-داده
آشنایی با درخت Heap (هیپ، هرم یا کپه) به عنوان یکی از ساختمان های داده پرکاربرد و بررسی روش ساخت، درج گره و حذف گره و ارائه کد نمونه به زبان برنامه‌نویسی ++C