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

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



بنابراین پیدا کردن اعداد بزرگ اول ، یکی از اولویت های شرکت های بزرگ است. طبق قوانین ریاضی بی نهایت عدد اول داریم ، پروژه GIMPS به کمک ابر رایانه ها دائما مشغول پیدا کردن بزرگترین عدد اول است و به کسی که بتونه بزرگتر از عدد اول فعلی کشف شده عدد اولی رو کشف کنه جایزه های چندصد میلیون تومنی میده ، فعلا بزرگترین عدد اول کشف شده در حالی که دارم این مطلب رو مینویسم بیش از 17 میلیون رقم داره و برابر با:257,885,161 − 1که البته شخصی که این عدد رو سال 2013 کشف کرد برنده جایزه 100 هزار دلاری شد.بنابراین اهمیت این قضیه خیلی مهمه. حالا فرض کنید الگوریتم ضعیفی برای پیدا کردن عدد اول داشتیم ، اگه به یه دانشجو بگی الگوریتمی بنویس که اعداد اول زیر 1000 را پیدا کنه میاد و یه حلقه میزاره که از 1 تا خود عدد رو چک می کنه ببینه تقسیم پذیر هست یا نه ، در صورتی که اگه تا نصف عدد یا حتی تا جذر عدد رو هم بررسی کنه کافیه (اینجا ریاضیات بکار میاد) ، پس ببینید سرعت برنامه تا چند برابر میتونه با طراحی الگوریتم های بهتر افزایش پیدا کنه ، اگه الگوریتم های جدید برای پیدا کردن اعداد اول بهینه نمیشدند احتمالا عدد ذکر شده با ابرکامپیوتر به جای سال 2013 سال 2020 کشف می شد!!برای همین هر روز نیاز به الگوریتم های جدید احساس میشه و بهینه تر و سریعترین الگوریتم ها رو از پیچیدگی زمانیشون بررسی میکنن.اگه اعداد اول بزرگ کشف نشه ممکنه هکری به سیستم وزارت دفاع آمریکا وصل بشه و بتونه موشکا رو به هر کشوری خواست پرتاب کنه!! ، عابربانکا رو هک کنه ، بانکا رو هک کنه و حساباتون رو خالی کنه! دوست دارید؟!!!!مثلا توی مسیریابی موشکهای هدایت شونده امروزی از الگوریتم مسیریابی استفاده میکنند که توی کتابهای طراحی الگوریتم مثال کوچکی ازش برای پیدا کردن پنیر توسط موش هست!!! ، پس هر چه این الگوریتم ها بهینه تر تکنولوژی های روز هم بالاتر.



مسابقات برنامه نویسی ACM هم برای این منظور هر ساله برگذار میشه و برنامه نویسا با الگوریتم ها به رقابت هم میرن که تو ایران هم دانشگاه صنعتی شریف و بعضی دانشگاه های دیگه این مسابقات رو میزارن که البته هر ساله هم میبینیم که شرکت های بزرگی مثل گوگل و یاهو ... چشمشون به برنده های این مسابقاته و اونا رو استخدام میکنن.البته شما برای برنامه نویسی و طراحی نرم افزارها نیازی نیست برای یه جستجو یا مرتب کردن ، این همه کد و الگوریتم بنویسید ، در محیط های برنامه نویسی C#‎‎‎‎ و ... دستورات مرتب کردن و جستجو و ... به صورت توابع آماده و قابل استفاده هستند (Array.Sort) و طراحی الگوریتم ها صرفا جهت باز شدن ذهن برنامه نویس و طراحی الگوریتم های جدید می باشد.پس خواهش می کنم به عنوان دانشجوی فناوری اطلاعات ، مهندسی نرم افزار یا علوم کامپیوتر از درس طراحی الگوریتم ها ناله نکنید!

http://kashkooli.ir/post/3