هشت الگوریتمی که به عنوان برنامه نویس باید بلد باشید(قسمت اول)

الگوریتم به عنوان یک عنصر بسیار مهم در دنیای دیجیتال در حالتی گاهی برای بسیاری از ما ممکن است مبهم و پیچیده به نظر برسد. اما در واقع، الگوریتم ها بیش از آنچیزی که به نظر می رسد، ما را در زندگی روزمره و حتی در انجام فعالیت های روزانه یاری می کنند. الگوریتم ها نقش بسیار مهمی در علوم کامپیوتر، ریاضیات و حتی در زندگی روزمره ما ایفا می کنند.اگر به دنیای برنامه‌نویسی و علوم کامپیوتر وارد شده باشید، حتما با مفهوم الگوریتم آشنا هستید. الگوریتم‌ها در برنامه‌نویسی اساسی‌ترین ابزارهایی هستند که برنامه‌نویسان برای حل مسائل و انجام برنامه‌های خود استفاده می‌کنند.اما الگوریتم واقعا چیست؟الگوریتم مجموعه ای از دستورالعمل ها یا رویه ای برای حل یک مسئله خاص یا دستیابی به یک کار خاص است. الگوریتم‌ها را می‌توان در هر زبان برنامه‌نویسی بیان کرد و می‌تواند به سادگی دنباله‌ای از عملیات اصلی یا به پیچیدگی یک فرآیند چند مرحله‌ای شامل ساختارهای داده و منطق مختلف باشد. هدف اصلی یک الگوریتم دریافت ورودی، پردازش آن و ارائه خروجی مورد انتظار است. الگوریتم ها را می توان بر اساس پیچیدگی زمانی و مکانی، تکنیک مورد استفاده برای حل مسئله و نوع مسئله ای که حل می کند طبقه بندی کرد. نمونه‌هایی از الگوریتم‌ها عبارتند از مرتب‌سازی، جستجو، پیمایش نمودار، دستکاری رشته‌ها، عملیات ریاضی و بسیاری موارد دیگر...برای درک بهتر الگوریتم، می توانید آن را با یک دستورالعمل قابل اجرا برای حل یک مسئله تصور کنید. به عنوان مثال ساده، فرض کنید می خواهید مسئله تعیین بزرگترین عدد در یک لیست اعداد را حل کنید. یک الگوریتم ساده برای حل این مسئله می تواند شامل مراحل زیر باشد:1. ایجاد متغیری به نامmax و مقدار دهی اولیه آن با اولین عضو لیست. 2. بررسی هر عضو در لیست و مقایسه آن با مقدار فعلی max. 3. اگر عضو بررسی شده بزرگتر از max بود آن عضو جایگزین عضو قبلی میشود.هشت الگوریتم که در مورد آن صحبت میکنیم!1-الگوریتم مرتب سازی(Sorting algorithms)مرتب سازی یک عملیات اسای در علوم کامپیوتر است و چندین الگوریتم کارآمد مانند مرتب سازی سریع،مرتب سازی ادغامی و مرتب سازی هرمی برای آن وجود دارد.2-الگوریتم جستجو(Searching algorithms)جستجوی یک عنصر در یک مجموعه بزرگ از داده کار رایجی است و چندین الگوریتم کارآمد برای آن وجود دارد مانند جستجوی باینری و جستجوی جداول هش.3-الگوریتم گراف(Graph algorithms)الگوریتم گراف در علوم کامپیوتر و ریاضیات یک مجموعه از قوانین و مراحل مشخص است که برای حل مسائل مرتبط با گراف ها استفاده می شود. گراف یک ساختار داده است که شامل گره ها (نقاط) و یال ها (رؤوس) است که بین گره ها ارتباط برقرار می کنند. الگوریتم های گراف در بسیاری از زمینه ها مانند شبکه های اجتماعی، جستجو در وب، مسائل روتینگ در شبکه ها، نقشه برداری، برنامه ریزی ترافیک و غیره استفاده می شوند.4-برنامه نویسی پویا(Dynamic programming)برنامه نویسی پویا تکنیکی است برای حل مسائل از طریق تجزیه آنها به مسائل فرعی کوچکتر و ذخیره راه حل های این مسائل فرعی برای جلوگیری از محاسبات اضافی .5-الگوریتم‌های حریصانه(Greedy algorithms)الگوریتم های حریصانه به الگوریتم هایی اطلاق می شود که در هر مرحله بهترین تصمیم را می گیرند بدون آنکه تاثیر آن را بر روی مراحل بعدی در نظر بگیرند. این الگوریتم ها به صورت مستقل و هر مرحله را به عنوان یک مسئله مجزا حل می کنند و بهترین راه حل ممکن برای آن مسئله را ارائه می دهند.6-الگوریتم تقسیم و حل(Divide and Conquer algorithms)الگوریتم‌های تقسیم و حل یک روش حل مسائل محاسباتی هستند که براساس تقسیم مسئله به بخش‌های کوچکتر و حل هر بخش به صورت جداگانه عمل می‌کنند. این روش بر مبنای ایده‌ای به نام تقسیم و حل در ریاضیات استوار است که می‌گوید می‌توان مسئله‌های پیچیده‌تر را با تقسیم آن‌ها به قطعات کوچکتر و حل جداگانه آن‌ها ساده‌تر حل کرد.7-الگوریتم عقب گرد یا بازگشت به عقب(Backtracking programming)الگوریتم عقبگرد یکی از الگوریتم‌های مهم در علم کامپیوتر است که به صورت گسترده در برنامه‌نویسی استفاده می‌شود. این الگوریتم به راحتی قابل فهم است و برخلاف دیگر الگوریتم‌ها، قابلیت اجرای سریع را دارد. مفهوم اصلی الگوریتم عقبگرد به این شکل است که ما در حالی که به جلو می‌رویم، از نقطه‌ی پایان به عقب برمی‌گردیم و مجددا به مبدا بازمی‌گردیم. .8-الگوریتم تصادفی(Randomized algorithms)یک راه حل جذاب برای مسائلی که نیاز به تصمیم‌گیری‌های تصادفی دارند در دنیای هوش مصنوعی و علم داده‌ها، مسائلی وجود دارند که نیاز به تصمیم‌گیری‌های تصادفی دارند. از مثال‌هایی که به ذهن می‌رسد می‌توان به مسئله پیدا کردن مسیر کوتاهتر برای یک راننده تا مسائلی که مربوط به پیش‌بینی افتراقی هواشناسی است اشاره کرد. یک راه حل جذاب برای رسیدن به پاسخ اینگونه مسائل، استفاده از الگوریتم تصادفی است.نتیجه گیریالگوریتم ها بخش جدانشدنی دنیای ریاضیات و برنامه نویسی هستند،در نگاه اول این الگوریتم ها برای برنامه نویسان تازه کار بسیار بی اهمیت و بدون استفاده است اما با بالاتر رفتن تجربه متوجه میشوید بدون داشتن دانش کافی راجب الگوریتم کار سختی را پیش رو خواهید داشت.در سری های بعد این سری مقاله هر کدام از این الگوریتم ها را به صورت جزیی توضیح خواهم داد.