اندر مصائب ضبط فیلم کلاس‌های درسی

در طی چند روز گذشته، فردی نامه‌هایی همراه با سوالی در زمینه درس جاوا برای بنده ارسال کرد که انتشار آن‌ها شاید خالی از لطف نباشد.

نامه اول:

سلام و درود استادامیدوارم حالتان خوب باشد و به سوادتان بیفزایید!
توی یک ویدیو از دانشگاه شریف شما در حال تدریس عرض کردید که سی شارپ از جاوا گرفته شده!اگر میشه دلیلش رو بگید وگرنه به سواد شما شک داریم.
با تشکر

پاسخ نامه اول:

سلام
یعنی فکر می‌کنید جاوا از سی شار‌ گرفته شده؟ یا شباهتشان اتفاقی است؟

نامه دوم:

شما عرض کردید که سی شارپ از جاوا گرفته شده .برای این جمله شما مدرکی هم هست؟

پاسخ نامه دوم:

پاسخ سوال بنده را ندادید.

نامه سوم:

بزرگوار زبان سی شارپ به جاوا و دلفی شبیه هست سرپرست تیم‌توسعه زبان سی شارپ هجلزبرگ بود که سازنده زبان دلفی بود برا همین شبیه هستن ولی سی شارپ از خانواده زبان سی هست همچنین جاوا که از خانواده سی و سی پلاسه هیچکدوم هم ربطی بهم ندارن و هرکدوم نحوه کامپایل و اجراشون متفاوته روی چه حسابی توی ویدیو شما گفتید سی شارپ ازجاوا گرفته شده تعجب بر انگیزه! اگر میگفتید دلفی جای تامل داشت چون بهرحال سرپرست تیم سی شارپ، دلفی رو بوجود آورده دلیل شباهت‌های زیاد جاوا و سی شارپ هم به زبان سی و سی پلاس برمیگرده که والد این دو زبان هستن.

پاسخ نامه سوم؛

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

نامه چهارم:

سلام
مسئله خاصی نیست. برا بنده جالب بود یه استاد کامپیوتر با این همه تحصیلات عالی، بگه سی شارپ رو از جاوا گرفتن!این تعصب شما روی جاوا باعث این اشتباهات شده متاسفانه

پاسخ نامه چهارم

بد نیست به این صفحه وب نیز نگاهی بیاندازید. متنش را به این نامه پیوست کرده‌آم.
پی‌نوشت: ولی لحن شما به نظر جدی‌تر از این حرف‌ها می‌آید.

متن صفحه مورد نظر را هم پیوست کردم که متن را اینجا می‌آورم:

Steve Zara, Programmer for 40 years.Answered Jan 28, 2018 · Author has 2.7k answers and 870.6k answer views

There are two reasons. The first is that C# and Java are both in the C family of languages, and so inherit much of their syntax from C++. The second is that C# is Microsoft’s version of Java, developed because Microsoft failed to produce an implementation of Java that tied developers to Windows.

Many years ago, when Java started to be really successful, Microsoft wanted to produce an implementation of Java on Windows. Sun Microsystems, the inventors of Java, had already done this, but Sun’s Java was portable. Applications written for Sun’s Java would run unchanged on other platforms such as Linux and Unix. Furthermore, Sun’s license for use of the name ‘Java’ insisted that it only be used for languages that passed their compatibility tests and library naming rules (for example, other companies were not allowed to change libraries that started with the name ‘java.’ This make sure developers knew what they were getting from Java on every platform.

At the time, Microsoft considered portability to be poison. They developed a Java implementation that had Windows-specific functions in packages that started with ‘java.’. The idea was to encourage developers to write windows-specific Java code. Microsoft could have easily developed a full, compatible Java implementation and added Windows functions in a separate library. So, Sun took them to court. Microsoft lost.

Microsoft’s “Plan B” was .NET – mimic Java but just for Windows. That’s why C# is so much like Java.

Things have changed for the better. There are now portable implementations of .NET, and Microsoft support Java on their cloud systems.3.5k Views · View 24 Upvoters

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

شناسایی سرطان با استفاده از شبکه‌های عصبی

پوستر ارائه دکتر شریفی

ظاهرا دکتر شریفی، که دکتری بیوانفورماتیک دارند، در دانشکده کامپیوتر ارائه‌ای در مورد شبکه‌های عصبی و سرطان دارند. جالب است که ایشان هم بالاخره کار روی سرطان را در دستور کارهایشان قرار دادند.

اینترنا ۲۰۱۸

ظاهرا انجمن علمی دانشکده کامپیوتر سمیناری برگزار می‌کند به نام اینترنا که در آن دانشجویانی که به عنوان کارآموزی در پروژه‌های بزرگی کار کرده‌اند یا در شرکت‌های بزرگ روی پروژه‌های بزرگ کار کرده‌اند، موضوع کارشان را توضیح می‌دهند.

توضیح خود سایت در مورد سمینار این است:
در سالهای اخیر با ایجاد فرصت‌های جدید علمی، فنی و صنعتی در داخل و خارج از کشور، بسیاری از دانشجویان دانشگاه صنعتی شریف و به طور خاص دانشکده مهندسی کامپیوتر مشغول به کارهای جدی در زمینه‌های مختلف شدند. در راستای انتقال تجربیات و بحث حول فرصت‌ها و چالشها، انجمن علمی دانشکده مهندسی کامپیوتر بر آن شد که با همکاری جمعی از دانشجویان دارای تجارب جذاب در این زمینه، مجموعه سخرانی‌هایی با نام اینترنا برگزار کند. اینترنا علاوه بر بستری برای بیان برخی مسائل تخصصی در زمینه‌های مختلف علمی و فنی، نگاهی است به مسیرهای مختلف تجربه شده در کارآموزی توسط دانشجویان. روز پنجشنبه، سوم آبان ماه ۱۳۹۷، دانشکده مهندسی کامپیوتر دانشگاه صنعتی شریف میزبان اولین دوره اینترنا خواهد بود و امید است با شرکت حداکثری تمام دانشجویان، متخصصین، محققین و اساتید علاقه‌مند، یک رویداد پربار را شاهد باشیم.‎‎

حداقل به نظر خیلی جالب می‌آید! زمان سمینار پنج‌شنبه ۳ آبان است. از ما هم دعوت شده که شرکت کنیم. به نظر سمینار جالبی می‌آید، اما احتمالا آن روز خیلی سرم شلوغ باشد. حداقل به خاطر اینکه چهار مهمان پژوهشی داریم که دارند سفر می‌کنند که با هم هم‌کاری پژوهشی داشته باشیم

تئوری اطلاع شانون در تعیین بیزی اندازه نمونه

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

سمینار هفتگی پژوهشکده علوم زیستی با سخنرانی علمی آقای دکتر حمید پزشک از دانشگاه تهران و پژوهشکده علوم زیستی (IPM) با عنوان:

Shannon Information for Bayesian Sample Size Determination

تئوری اطلاع شانون در تعیین بیزی اندازه نمونه

در تاریخ پنجشنبه 26 مهر 1397 راس ساعت 10 در پژوهشکده علوم زیستی( ساختمان فرمانیه طبقه همکف کلاس A) برگزار می گردد.

*** شرکت برای عموم آزاد است ***

پژوهشکده علوم زیستی

چکیده:

The most frequently used methods for sample size determination in planning a trial are based on the required size and power of the experiment for a specified treatment effect. This approach is named the frequentist approach. In contrast, one of the Bayesian procedures which is called the fully Bayesian approach treats the problem as a decision problem and employs a utility function to find the optimal sample size of the trial by considering a tradeoff between cost and benefit of carrying out the trial. In this talk, we focus on some computational issues of applying the fully Bayesian method and show how Shannon information would be able to deal with these issues. Attachments area

پوستر ارائه دکتر پزشک در پژوهشکده علوم زیستی IPM

چای با سرطان

این هم شد اسم! به هر حال این عنوان گفت‌وگوی صمیمی ماست دوشنبه ساعت ۵. زحمتش را برخی دانشجویان کشیده‌اند و انشاء الله که جلسه خوبی باشد.

زمان اجرای الگوریتم ضرب دو ماتریس

ضرب دو ماتریس، از بدیهی‌ترین و اساسی‌ترین الگوریتم‌هایی است که برای محاسبات عددی به آن نیاز داریم.

در الگوریتم بدیهی برای ضرب دو ماتریس A و B، برای محاسبه هر درایه از ماتریس لازم است که n عدد ضرب انجام شود. در نتیجه زمان اجرای الگوریتم \(O(n^3)\) خواهد بود.

امروز در کلاس ساختمان داده سر الگوریتم استراسن بحث شد. الگوریتمی که با آن می‌توان دو ماتریس n در n را در زمان سریع‌تر از \(O(n^3)\)، یعنی در زمان \(O(n^{2.807})\) محاسبه کرد.

سوالی که مطرح شد این بود که زمان اجرای سریع‌ترین الگوریتم برای محاسبه ضرب دو ماتریس چقدر است؟ پس از الگوریتم استراسن که در سال ۱۹۶۹ ارائه شده بود، الگوریتم دیگری با زمان اجرای \(O(n^{2.376})\) در سال ۱۹۹۰ و الگوریتم سریع‌تری با زمان اجرای \(O(n^{2.3729})\) در سال ۲۰۱۳ و الگوریتم دیگری با زمان اجرای \(O(n^{2.3728639})\) در سال ۲۰۱۴ ارائه شد. نمودار زیر از ویکی‌پدیا توان n در زمان اجرای الگوریتم ضرب دو ماتریس را در طی زمان نشان می‌دهد.

فرض کنید سریع‌ترین الگوریتمی که برای ضرب دو ماتریس وجود دارد زمان اجرایش حدودا \(O(n^{\omega})\) است. سوال این است که این \(\omega\) چند است؟ تا کنون می‌دانیم \(\omega\leq 2.3728639\). از طرفی چون باید جواب را تولید کنیم و ورودی را باید بخوانیم حداقل باید به اندازه خود ماتریس‌ها زمان صرف کنیم، پس \(2\leq\omega\leq 2.3728639\). اما بیش از این نمی‌دانیم. یعنی حتی نمی‌دانیم آیا \(\omega\) از ۲ اکیدا بزرگ‌تر است یا خیر.

در هر صورت این مساله خیلی مساله جالبی است. و خیلی جالب است که پس از مدت‌ها هنوز نمی‌دانیم که آیا بیش از خواندن ماتریس‌های ورودی زمان لازم است برای تولید ضرب دو ماتریس و یا خیر. با این‌که مقدار \(\omega\) را نمی‌دانیم، ولی می‌توانیم از این مقدار برای محاسبه زمان اجرای الگوریتم‌های دیگر استفاده کنیم. مثلا در مقاله‌ها می‌بینیم که زمان اجرای الگوریتم‌شان را بر حسب \(\omega\) محاسبه کرده و گزارش می‌کنند.

منبع: صفحه انگلیسی ویکی‌پدیا در مورد ضرب ماتریس‌ها

دفاع‌های پیش رو

چند دفاع پیش رو دارم که جالب هستند.

۱) مدل تصادفی برای بررسی ویژگی‌های هندسی رشد تومور

دانشجو: میرابوطالبی
زمان: ساعت ۹ صبح ۳۱ شهریور ۹۷
مکان: ۲۱۷ دانشکده ریاضی.
خلاصه: به طول کلی ایشان یک مدل ریاضی برای مدل رشد تومور ارائه کرده‌اند و سعی کردند خواص هندسی آن را استخراج کنند. ایده این بود که سپس خواص هندسی تومور واقعی سرطان را با مدل‌های مختلف هندسی مقایسه کنند و در مورد اینکه واقعا تومور چگونه رشد می‌کند صحبت کنند.

۲) مبنای ریاضی  شبکه‌های عصبی ژرف: چارچوبی نظری برای رفتار تعمیم‌پذیری

دانشجو: بابایی
زمان: ساعت ۱۳ تاریخ ۳۱ شهریور ۹۷
مکان: دانشکده ریاضی.
خلاصه: پژوهش‌هایی انجام شده که سعی دارند توجیه کنند چرا شبکه‌های عصبی ژرف کار می‌کنند. ایشان سعی کرده‌اند آن‌ها را مطالعه کرده و ارائه کنند.

۳) بررسی روش به‌روزرسانی ضربی وزن‌ها و کاربردهای آن

دانشجو: سقایی
زمان: ۶:۳۰
مکان: دانشکده ریاضی
خلاصه: روش به‌روزرسانی ضربی وزن‌ها، یک الگوریتم ساده است که کاربردهای زیادی در حل مساله‌های تقریبی و هم‌چنین بهینه‌سازی و یادگیری برخط دارد. در این پایان‌نامه ایشان سعی کرده‌اند کاربردها و روش را توضیح بدهند.

۴) بررسی رابطه بین عملکرد سلول و تعاملات فامینه با استفاده از روش‌های مبتنی بر انجمن

زمان: یک‌شنبه ۱ مهر ساعت ۱۰
مکان: ۶۲۸ دانشکده کامپیوتر
خلاصه: به طور خلاصه ایشان سعی کرده‌اند انجمن‌ها را تشخیص دهند.

چالش CAGI 5

چالش  CAGI یک برنامه چالشی است که در آن تلاش می‌کنند رابطه ژنوتیپ با فنوتیپ را با الگوریتم‌هایی پیدا کنند. ژنوتیپ به معنای اطلاعات ژنتیکی فرد است (که به صورت رشته‌های بسیار طولانی از چهار حرف A و T و C و G) و فنوتیپ یعنی مشخصات فردی. مثلا فرض کنید می‌خواهد از اطلاعات ژنوم فرد تشخیص بدهند چقدر احتمال گرفتن یک مریضی را دارند.

برنامه پنجم CAGI شروع شده که ظاهرا شامل ۴۰ چالش است. البته تقریبا تمام چالش‌هایش در حال پایان هستند. اما به هر حال شناختن این چالش بد نیست. شاید حداقل برخی دانشجویان خواستند در برنامه‌های بعدی شرکت کنند.

فیلم آموزشی بازآرایی (refactoring) توسط دکتر صادق علی اکبری

همان‌طور که می‌دانید بازآرایی یا refactoring از اصول برنامه‌نویسی چابک است. و احتمالا می‌دانید که دکتر صادق علی اکبری از مدرسین بسیار خوب جاوا هستند. ایشان مطالب مربوط به درس بازآرایی را ظاهرا منتشر کرده‌اند. در این زمینه می‌توانید به این نوشته مراجعه کنید.

مساله تقریب فاصله ویرایش

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

Chakraborty, Diptarka, et al. “Approximating Edit Distance Within Constant Factor in Truly Sub-Quadratic Time.” (2018).

مساله فاصله ویرایش یک مساله معروف در علوم کامپیوتر است که معمولا در درس‌های ابتدایی الگوریتم تدریس می‌شوند. مساله بدین صورت است که دو رشته S و T را داریم و می‌خواهیم با کم‌ترین تغییرات شامل حذف، اضافه کردن، و یا تغییر حرف به حرف دیگر دو رشته را به هم تبدیل کنیم. هدف مساله یافتن کم‌ترین تعداد تغییرات برای تبدیل دو رشته به یکدیگر است.

در درس الگوریتم یاد می‌گیریم که الگوریتیمی با زمان اجرای متناسب با mn که m و n طول رشته‌های ورودی هستند برای مساله وجود دارد.

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

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

در سال ۲۰۱۰ الگوریتمی ارائه شد که ضریب تقریب آن یک چندجمله‌ای برحسب لگاریتم n است (اینجا فرض می‌کنید n و m برابر هستند) و زمان اجرای آن تقریبا خطی است، یعنی زمان اجرای آن n ضربدر یک چندجمله‌ای برحسب لگاریتم n است.

در سال ۲۰۱۷ نشان داده شده که اگر فرض‌های معمول پیچیدگی را قبول کنیم، الگوریتمی با ضریب کمتر از \(1+o(1)\) برای مساله وجود ندارد.

در کنفرانس FOCS امسال الگوریتمی ارائه شده که با ضریب ثابت و در زمان کمتر از توان دوم n مساله را حل می‌کند. پس از سال‌ها دستاورد خیلی جالبی است. 

الگوریتم ارائه شده الگوریتم سختی است و از قطعات مختلفی تشکیل شده. جالب اینجاست که بسیار از قطعات الگوریتم همین حالا در روش‌های مکاشفه‌ای زیست‌شناسی استفاده می‌شود. مثلا الگوریتم BLAST که زیست‌شناسان از آن استفاده می‌کنند برای مقایسه دو رشته از برخی از همین روش‌ها استفاده می‌کند، بدون اینکه این همه جزئیات و اثبات را بدانند. خیلی جالب است.