حرفه ای شدن در الگوریتم و حل مسائل


#1

سلام .

برای تقویت مهارت در طراحی الگوریتم های پیچیده و حل مساعل باید چه کرد ؟

برخی سایت ها نوشته بودند باید ریاضیات گسسته یاد گرفت ! نظر شما چیست ؟ :roll_eyes:

اگر منبع یا کتابی میشناسید لطفا معرفی کنید ممنونم .


#2

سعی کنید کدهای دیگران رو بخونید و اگوریتم های پر کاربرد رو یاد بگیرید


#3

خیلی ممنونم :smiling_face_with_three_hearts:


#4

علاقه خیلی مهمه. اگه از شیمی خوشت میاد، الگوریتم تو زمینۀ شیمی بنویس. اگه از زیست شناسی خوشت میاد تو اون زمینه مطالعه کن.
تو زمینۀ ریاضی هم اصلاً مجبور نیستی سراغ ریاضیات گسسته بری. من از آمار و احتمالات خوشم میومد، رفتم سراغ اینا. نظریۀ مجموعه ها هم الگوریتم میشه واسش نوشت.
الگوریتم های مربوط به آرایه ها، مثل انواع و اقسام روش های جستجو، مرتب سازی و … هم خیلی کاربردی هستن.


#5

کتاب ها که عنوان algorithm , data structures دارند بخونید کلی ویدئو هم برای اینها موجوده بعد از خوندن اینا باید خیلی تمرین کنید در وب سایت هایی مثل leetcode

یک کتاب در این زمینه


#6

من جزء اون اقلیتی هستم که برنامه نویسی رو خیلی با صبر و حوصله، از یادگرفتن الگوریتم ها، شروع کردم. تا یکسال فقط الگوریتم مینوشتم. بعد رفتم سراغ زبان برنامه نویسی. و واقعاً از مسیر طولانی ای که رفتم الان راضیم.
کتابی که samdvr معرفی کرد رو دانلود کردم. مشکل کتابای انگلیسی ای که تا حالا دیدم اینه که برای مبتدی ها یا خیلی سنگینن و مطالب اضافی زیاد دارن (مثل کتابی که Thomas H. Cormen نوشته، بخصوص فصلای آخرش، الگوریتم ها رو هم با این که به شبه کد نوشته، خیلی بد نوشته) یا مثل کتابی که samdvr معرفی کرد با زبان برنامه نویسی خاصی مثل جاوا شروع کردن.
و اکثرشون رو الگوریتم های مربوط به ریاضی مانوور میدن. در حالی که تو دانشگاه دیدرو فرانسه اسم یکی از دوره های آموزش الگوریتمشون که شانسی تو اینترنت پیدا کردم و خوندم، دقیقاً اینه: “الگوریتم برای اونایی که با ریاضی حال نمیکنن”!
اصل الگوریتم شبه کد (pseudo-code) هست. و اونقدر فایده داره که واقعاً به نظرم همه باید با شبه کد شروع کنن. من همین الان هم هرموقع میخوام تابع بنویسم اول شبه کدش رو مینویسم بعد به پایتون ترجمه میکنم. موقع نوشتن شبه کد به خود مسئله فکر میکنم. موقع نوشتن کد پایتون به جزئیات و محدودیت های مربوط به زبان پایتون. و این تقسیم کار به دو مرحله واقعاً لذت بخشه. امتحانش کن.
کتابایی که من اوایل خوندم واقعاً از هر نظر عالی بودن ولی متاسفانه انگلیسی نیستن.


#7

میشه لطف کنید و لینکش رو اگر دارید بذارید


#8

کتاب های ساده تری هم هستن بستگی داره چقدر عمیق میخواهی یاد بگیری


#9

اینجاست: http://pise.info/algo/codage.htm
نویسندش که استاد دانشگاهه از بچگی از ریاضی بدش میومده. تمام تمریناش هم با جوابه.


#10

این کتابو الان دانلود کردم و یه نگاهی بش انداختم، به نظرم جالبه.


#11

ممنونم از کمکتون دوستان :smiling_face_with_three_hearts:


#12

سلام و با اجازه از دوستان.

مبحث Algorithm ها و Data Structure ها در واقع در مفهوم با هم فرق دارن.

  • Algorithm اگه به زبان ساده بگم یعنی یه سری مرحله که شما پشت سر میزاری تا به یه نتیجه ای برسی.
  • Data Structure هم که یعنی فرض کن یه قالب ساختار که Data تو اون قالب یا ساختار قرار میگیره و یه سری قوانین هم هستش که تعیین میکنه چطور به اون Data دسترسی پیدا کنی و غیره.

البته تو خیلی از کتاب ها اینطوره که از Algorithm استفاده میشه برای ساختن Data Structure ها.

که Algorithm فقط به این معنی نیست! ما تقریبا هر کاری که انجام میدیم یجور algorithm برای انجام دادنش هست، از مسواک زدن و شستن ظرف ها تا Linked lists و Tree ها همگی یه (یا چند تا) Algorithm برای انجام دادنشان وجود داره.
چیزی که اهمیت داره مفهوم Abstraction هستش که یه جورایی کل Computer Science و Software Engineering بر پایه این مفهوم بنا شدن. Layer های متعددی از Abstraction ها روی هم قرار میگیرن در حوضه CS یا SE.

اصولا برای حرفه ای شدن در هر زمینه ای، راه ساده و سریع و shortcut وجود نداره. برای حرفه ای شدن در مبحث Algorithm ها من فکر میکنم ۲ مرحله وجود داره :

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

  • مرحله دوم و مهمتر Practice هستش و Practice و Practice.
    باید اینقدر تمرین و تکرار کنی که ماهر بشی.

در مسیر حرفه ای شدن راه ساده و سریع وجود نداره.

چند کتاب پیشنهادی :

برای قدم بعدی هم کتاب های خوبی هستن مثل :


#13

چند روز پیش این کتاب (Grokking Algorithms) رو تمام کردم. الته موقع نوشتن الگوریتمها از کتابای مرجع و تخصصی تر استفاده میکردم، که حوصلۀ خوندن خودشون رو ندارم. کتاب مشابه اگر میشناسی لطفاً معرفی کن. با زبون ساده توضیح داده باشه، توش طراحی و نقاشی هم باشه :slight_smile: