الگوریتم چیست؟ معرفی، کاربردها و آموزش طراحی الگوریتم برای برنامهنویسان
احتمالا با اسباب بازیهای لگو (LEGO) آشنایی دارید. مجموعهای از قطعات کوچک که باید طبق دستورالعمل خاصی به یکدیگر متصل شوند تا شکل نهایی ساخته شود. شما باید قبل از شروع به ساخت لگو، دستورالعمل آن را مشاهده کرده و طبق آن پیش بروید تا به خروجی نهایی برسید. الگوریتم در برنامه نویسی، دقیقا چنین هدفی دارد؛ اینکه قبل از توسعه برنامه، یک دستورالعمل برای توسعه آن بنویسید که اقدامات اجرایی را به صورت کامل نمایش دهد. توضیح تخصصی الگوریتم در ویدیوی آغازین دوره جامع الگوریتم و ساختمان داده به این شکل ارائه شده:
“دنبالهای محدود شده و بدون ابهام از دستورالعملها برای حل یک مسئله یا انجام محاسبات”
در ادامه این مطلب از وبلاگ آکادمی سبزلرن، به صورت مفصل درباره الگوریتمها و کاربرد آنها در دنیای برنامه نویسی صحبت میکنیم. تاریخچه و ویژگیهای یک الگوریتم کارآمد را بررسی کرده و نحوه نوشتن الگوریتم در زبانهای برنامه نویسی را توضیح میدهیم!
الگوریتم به زبان ساده چیست؟
به زبان ساده، الگوریتم به مراحل حل یک مسئله یا انجام یک کار گفته میشود. الگوریتم مثل دستور آشپزی است که با استفاده از ورودیها (مواد غذایی) و پردازش آنها طبق دستورالعملهای تعریف شده و روند شفاف (پخت و ترکیب مواد) راه حل مسئله (غذای قابل مصرف) را ارائه میدهند. البته که مفهوم Algorithm پیچیدهتر بوده و در این حد ساده نیست!
اگر به دنبال تعریف سادهتری هستید، میتوانید الگوریتم را به عنوان یک راهنما در نظر بگیرید. یک راهنما که همه مراحل در آن به خوبی تشریح شده و نیازمندیها، اقداماتی که باید انجام شوند و خروجی مورد نظر نیز آن لحاظ شده باشد. همچنین الگوریتم باید دارای نقاط شروع و پایان باشد!
مثال ابتدای مطلب درباره اسباب بازی LEGO را به یاد بیاورید. الگوریتم، یک نقشه واضح و قدم به قدم است که مراحل ساخت یک اسباب بازی با استفاده از قطعات موجود را نشان میدهد. حالا به جای اسباب بازی، هر چیزی را میتوانید قرار دهید. کتاب خواندن، مدرسه رفتن، آزمایش علوم، درس خواندن برای آزمون، رانندگی و هر کاری که فکرش را بکنید، امکان تعریف به صورت الگوریتم را دارد!
تاریخچه الگوریتم و ریشه کلمه
واژه الگوریتم (Algorithm) از نام ابوجعفر محمد بن موسی خوارزمی، دانشمند و همهچیزدان ایرانی گرفته شده که در قرن دوم و سوم هجری شمسی (اوایل قرن 9 میلادی) زندگی میکرد. خوارزمی روشی را برای حل مسائل پیچیده محاسبات خطی و درجع دوم ابداع نمود؛ به این صورت که یک مسئله ریاضی را به مسائل کوچکتر خرد میکرد تا حل آنها آسانتر شود. به این ترتیب، او راهکاری برای حل مسائل پیچیده ریاضی با ساده سازی آنها ابداع کرد که علاوه بر سهولت بیشتر در حل مسائل، سرعت انجام را نیز افزایش میداد.
در اوایل قرن نوزدهم میلادی، دانشمندی به نام آگوستا اِیدا کینگ (Augusta Ada King) در تلاش برای تولید یک رایانه همه منظوره با نام موتور تحلیلی (Analytical engine) بود. وی در این مسیر با همکار خود چارلز ببیج (Charles Babbage) در تلاش برای توسعه این رایانه بودند که ناموفق باقی ماند. از یادداشتهای بجا مانده از آگوستا ایدا، مشخص شده که وی یک برنامه ایجاد کرده بود که شامل الگوریتم قابل پردازش توسط رایانه بود. البته آگوستا ایدا در سال 1852 درگذشت و ایده ساخت رایانههای همه منظوره، تا دهه 1940 ناموفق باقی ماند.
اما بیایید کمی درباره ریشه کلمه الگوریتم صحبت کنیم. واژه الگوریتم، تلفظ لاتین واژه Algoritmi است که قبل از آن با نام AlKhwārizmī شناخته میشد. این همان نام محمد بن موسی الخوارزمی بود که توسط مترجمان اروپایی، به شکل انگلیسی نوشته شده بود. با ترجمه کتابهای خوارزمی توسط اروپاییان، این مفهوم به سرعت در سرتاسر این قاره رواج پیدا کرد و ریاضیدانان بسیاری از این تکنیک برای حل و کاهش پیچیدگی مسائل ریاضی استفاده کردند.
ویژگیهای یک الگوریتم خوب چیست؟
اما یک الگوریتم خوب، باید چه ویژگیهایی داشته باشد؟ لیست زیر، مهمترین معیارهای یک الگوریتم کارآمد و استاندارد را نشان میدهد:
- دارای ورودی و خروجی مطلوب باشد.
- دارای نقاط شروع و پایان مشخص باشد.
- دارای گامهای محدود و مشخص باشد (از نظر شروع و پایان).
- دقیق، شفاف و بدون ابهام باشد.
- به یک زبان برنامه نویسی خاص وابسته نباشد.
- قابل اجرا باشد.
سه مورد اول، در توسعه الگوریتم بسیار حیاتی هستند و از ویژگیهای بنیادی یک الگوریتم محسوب میشوند.
انواع الگوریتمها در برنامه نویسی
عمدتا الگوریتمها را براساس عملکرد، هدفی که دنبال میکنند و روشی که برای حل مسئله استفاده میکنند، دسته بندی میکنیم. در این حالت، امکان انتخاب الگوریتم مناسب برای حل هر نوع مسئله راحتتر است و دقیقا میدانیم باید بین کدام نوع از الگوریتمها به دنبال گزینه موردنظرمان باشیم. در ادامه، برخی از مهمترین و متداولترین الگوریتمها در دنیای برنامه نویسی را به همراه توضیحات مختصر و مثالهای ساده معرفی کردهایم. البته با استفاده از تصویر زیر، علاوه بر کسب یک دید کلی، با 15 نوع الگوریتم پراستفاده در دنیای کامپیوتر آشنا شوید!

الگوریتم مرتب سازی (Sorting Algorithm)
الگوریتمهای مرتب سازی برای تنظیم دادهها بر اساس یک ترتیب مشخص مانند عددی یا الفبایی استفاده میشوند. این الگوریتمها پایه بسیاری از عملیات دادهای مانند فیلتر کردن و مقایسه هستند و در سرعت عملکرد سیستمها تأثیر زیادی دارند. علاوه بر این، در مرتب سازی دادهها برای ارائه به الگوریتمهایی که نیاز به دادههای منظم دارند، مورد استفاده قرار میگیرد.
مثال: مرتب سازی فهرست قیمت محصولات از ارزانترین تا گرانترین.
الگوریتم جستجو (Searching Algorithm)
این الگوریتمها برای یافتن عنصر یا داده خاصی در مجموعهای از اطلاعات طراحی شدهاند. بسته به ساختار داده، نوع جستجو میتواند خطی یا دودویی باشد. الگوریتمهای جستجو در پایگاه داده، موتورهای جستجو و سیستمهای فیلترینگ کاربردهای زیادی دارند و دارای زیرمجموعههای زیادی هستند.
مثال: یافتن شماره تلفن فرد خاص در دفترچه مخاطبین.
الگوریتم بازگشتی (Recursive Algorithm)
الگوریتم بازگشتی، مسئله را به نسخههای کوچکتر تقسیم میکند و تا رسیدن به حالت پایه، آن را تکرار میکند. این روش در حل مسائل پیچیده با ساختار تکراری، بسیار کارآمد است.
مثال: محاسبه فاکتوریل عدد یا جستجو در ساختار درختی فایلهای یک سیستم.
الگوریتم جستجوی دودویی (Binary Search)
الگوریتمی سریع که دادهها را نصف میکند و تنها بخشی را بررسی میکند که احتمال وجود داده در آن بیشتر است. اجرای آن نیازمند دادههای از پیش مرتبشده است. در گذشته مطلبی درباره الگوریتم باینری سرچ با جستجوی دودویی در وبلاگ سبزلرن منتشر کردیم که نحوه ساخت رو الگوریتم جستجوی دودویی را به طور کامل نشان میدهد!
مثال: جستجوی یک کلمه در یک دیکشنری دیجیتال و استخراج معنای آن.
الگوریتم مرتب سازی ادغامی (Merge Sort)
با تقسیم دادهها به دو نیم، مرتب سازی جداگانه و ادغام آنها، دادهها را با دقت بالا و زمان منطقی مرتب میکند. پایداری بالا و دقت زیاد از ویژگیهای این الگوریتم است.
مثال: مرتب سازی سفارشها در فروشگاه آنلاین.
الگوریتم مرتب سازی درجا (Insertion Sort)
دادهها را به صورت تکی بررسی کرده و هر مورد را در جای درست بین دادههای قبلی قرار میدهد. برای دادههای کمحجم، بسیار ساده و مؤثر است؛ اما در دادههای بزرگ ممکن است به مشکل بخورد.
مثال: مرتب سازی کارتهای بازی بر اساس شماره.
الگوریتم بکترکینگ (Backtracking)
این الگوریتم همه مسیرهای ممکن را بررسی کرده و در صورت خطا به مرحله قبل بازمیگردد. برای حل مسائل منطقی و پیدا کردن همه پاسخهای ممکن کاربرد دارد.
مثال: حل جدول سودوکو یا یافتن مسیر صحیح در پازل.
الگوریتم ژنتیک (Genetic Algorithm)
بر پایه نظریه تکامل طبیعی طراحی شده است و با تولید، ارزیابی و ترکیب پاسخها، بهینهترین نتیجه را پیدا میکند. در مسائل پیچیده و غیرخطی بیشترین کاربرد را دارد.
مثال: بهینه سازی مسیر پرواز برای صرفهجویی در سوخت.
الگوریتمها چگونه در زندگی روزمره کاربرد دارند؟
گفتیم الگوریتم یعنی اینکه انجام یک کار را به بخشها و مراحل کوچکتر تقسیم کرده و آنها را گام به گام انجام دهیم. حالا به این فکر کنید که در طول روز، چند بار از چنین سازوکاری استفاده میکنید؟
تصور کنید هر روز صبح که از خواب بیدار میشوید، یک روتین صبحگاهی را انجام میدهید. شستشوی صورت، مسواک، صبحانه، احتمالا یک لیوان قهوه و بعد برای رفتن به محل کار، دانشگاه یا مدرسه آماده شوید. همچنین شما هر روز از وسیله نقلیه خود استفاده میکنید و طبق شرایط خاصی، مسیری از منزل تا محل مورد نظر را طی میکنید. برای مثال ممکن است روزهای شنبه به دلیل ترافیک سنگین، از مسیر متفاوتی رانندگی کنید یا سوار وسایل نقلیه عمومی شوید! هرکدام از این کارها، به تنهایی یک الگوریتم محسوب میشود. روتین صبحگاهی شما یک الگوریتم است که هر روز طبق ترتیب خاصی انجام میشود تا به خروجی (سرحال شدن و صرف صبحانه) برسد.
در تعریف سادهتر، میتوان گفت الگوریتم درست مانند تصمیمگیری است. ورودیهای این الگوریتم، اطلاعاتی هستند که ما در اختیار داریم؛ مثل وضعیت هوا، ساعت، روز یا میزان ترافیک! پس از آن، گزینههای دردسترس براساس شرایط سنجیده میشوند که مشابه پردازش اطلاعات در الگوریتم است. خروجی نیز تصمیم نهایی ما خواهد بود!
چگونه یک الگوریتم بنویسیم؟
اشاره کردیم که یک الگوریتم خوب، الگوریتمی است که دارای نقاط شروع و پایان، ورودی و خروجی مطلوب، مراحل گام به گام و همچنین بدون ابهام و کاملا شفاف باشد. در ادامه نحوه نوشتن یک الگوریتم را به شکل ساده بررسی میکنیم.
برای نوشتن یک الگوریتم، ابتدا باید مسئله و نیازهای آن را به خوبی درک کنیم؛ زیرا باید بدانیم مسئله دقیقا به چه نیازی پاسخ میدهد و هدف نهایی آن چیست؟ در گام بعد، باید ورودیها و خروجیهای الگوریتم را بشناسیم و بدانیم چه چیزهایی در اختیار داریم و به چه چیزهایی به عنوان خروجی نیاز داریم.
در گام بعد، باید مسئله را به مراحل کوچکتر تقسیم کنیم تا حل آنها آسانتر شود. همچنین در زمان نوشتن الگوریتم، به یاد داشته باشید که همیشه 2 مرحله «آغاز» و «پایان» را باید لحاظ کنید. سپس مراحل را براساس یک ترتیب منطقی مرتب کرده و تعیین میکنیم در هر مرحله، باید چه کار یا پردازشی روی دادهها انجام شود.
اما قدم مهم در نوشتن یک الگوریتم، این است که ساختارهای شرطی یا تکرارشونده ایجاد کنیم. این ساختارها به ما کمک میکنند تا براساس شرایط، تصمیمات مختلفی را لحاظ کنیم یا یک کار را برای بیش از 1 دفعه انجام دهیم. در این حالت، از دستورات شرطی و حلقههای تکرار استفاده میکنیم.
در ادامه، الگوریتم وارد فاز بررسی و اصلاح میشود. در این مرحله الگوریتم با استفاده از چندین مثال، آزمایش میشود تا صحت عملکرد و مشکلات احتمالی آن پیدا شوند و این چرخه تا زمانی ادامه دارد که الگوریتم، بتواند با هر ورودی مطلوب، خروجی مناسب را تولید کند.
تفاوت الگوریتم، فلوچارت و کد در برنامه نویسی چیست؟
در برنامه نویسی، مفاهیم متعددی وجود دارد که به علت ارتباط نزدیک، گاها به جای یکدیگر استفاده میشوند. این قضیه تا حدودی درباره دو مفهوم «الگوریتم» و «فلوچارت» نیز صدق میکند. اما برخی از افرادی که اطلاعات کم یا ناقص درباره برنامه نویسی دارند، از کلمه «کد» نیز به جای الگوریتم استفاده میکنند که در ادامه، تفاوت هر سه را تشریح میکنیم.
هر سه به ظاهر یک هدف مشترک دارند و آن هم «حل مسئله» است؛ اما در واقع نقش و سطح استفاده از آنها متفاوت است. الگوریتم پایه تفکر منطقی است؛ فلوچارت به درک بصری الگوریتم کمک میکند و کد، نسخه قابل اجرا و واقعی تمام آن چیزی است که در الگوریتم و فلوچارت طراحی شده است! بیایید نگاه دقیقتری به تعریف این سه داشته باشیم.
الگوریتم
الگوریتم، نقشه کلی حل یک مسئله یا توصیف گام به گام از کارهایی است که باید انجام شوند تا به نتیجه برسیم. در الگوریتم از زبان برنامه نویسی خاصی استفاده نمیشود؛ مراحل به زبان ساده یا شبهکد نوشته شده و با دقت و بدون ابهام هر مرحله تعریف میشود. هدف الگوریتم، تعریف دقیق منطق و ترتیب انجام کارها است.
فلوچارت
اما فلوچارت (FlowChart) را میتوان نسخهای بصری از الگوریتم درنظر گرفت که هرکدام از اقدامات الگوریتم، با استفاده از اشکال تعریف شدهاند. هر عملیات دارای یک شکل خاص است؛ مثلا از مستطیل برای نمایش عملیات، لوزی برای نمایش شرط و بیضی جهت نشان دادن مراحل شروع یا پایان استفاده میشود. فلوچارت باعث میشود روند اجرای الگوریتم برای همه قابل مشاهده و درک باشد.
کد
به عبارات و دستورات نوشته شده به وسیله زبانهای برنامه نویسی، کد گفته میشود. یک الگوریتم در برنامه نویسی، باید به کد تبدیل شود تا قابلیت اجرا را داشته باشد. این کار با استفاده از زبانهای برنامه نویسی مختلف انجام میشود تا قابلیت اجرا در کامپیوتر را داشته باشد. به صورت کلی، یک الگوریتم ابتدا تبدیل به فلوچارت شده و سپس به برنامه نویس برای پیاده سازی ارائه میشود.
الگوریتمها در زبانهای برنامه نویسی مختلف چگونه پیاده سازی میشوند؟
فرایند پیاده سازی الگوریتم در برنامه نویسی، با درک دقیق مسئله آغاز میشود. ابتدا مراحل حل آن به صورت گام به گام در قالب یک الگوریتم متنی نوشته میشود. سپس، این مراحل برای درک بهتر جریان اجرای کار، در قالب فلوچارت ترسیم میشوند تا تصمیمها و مسیرهای مختلف برنامه مشخص شود. پس از تایید منطق، برنامه نویس فلوچارت را به کد واقعی در یک زبان برنامه نویسی تبدیل میکند. در این مرحله، الگوریتم به دستورات قابل اجرا برای رایانه تبدیل میشود. در پایان، کد نوشتهشده تست و اصلاح میشود تا مطمئن شویم نتیجه دقیقاً مطابق هدف اولیه الگوریتم است.

نکات مهم در بهینه سازی الگوریتمها برای افزایش سرعت و کاهش مصرف منابع
بهینه سازی الگوریتمها یکی از مراحل کلیدی در توسعه نرم افزار است که هدف آن افزایش سرعت اجرا، کاهش مصرف حافظه و بهبود کارایی است. یک الگوریتم بهینه، در پروژههای بزرگ، تفاوت چشمگیری در عملکرد ایجاد میکند؛ به همین دلیل از اهمیت بالایی برخوردار است. در ادامه، مهمترین نکات برای بهینه سازی الگوریتمها به صورت خلاصه آورده شده است:
- تحلیل پیچیدگی زمانی: بررسی کنید الگوریتم در برابر افزایش حجم دادهها چگونه رفتار میکند و در صورت نیاز، از روشهای سریعتر مانند جستجوی دودویی استفاده کنید.
- بهینه سازی حافظه: از متغیرهای غیرضروری، تکرار دادهها و ساختارهای حافظهبر پرهیز کنید تا مصرف رم کاهش یابد.
- کاهش تکرار پردازشها: نتایج محاسبات تکراری را ذخیره کرده و در صورت نیاز دوباره از آن استفاده کنید (با استفاده از Caching یا Memoization).
- تقسیم مسئله به زیرمسئلهها: با استفاده از روشهایی مانند تقسیم و حل (Divide and Conquer)، مسئله را به بخشهای کوچکتر و سادهتر تبدیل کنید. این کار علاوه بر خوانایی، بر عملکرد و نگهداری الگوریتم نیز تاثیرگذار است.
- پروفایلگیری (Profiling): عملکرد الگوریتم را اندازهگیری کنید تا بفهمید کدام بخشها بیشترین زمان اجرا را مصرف میکنند و دقیقاً همان بخشها را بهینه کنید.
آشنایی با پیچیدگی زمانی و مکانی الگوریتمها (Big O Notation)
نماد Big O یا بیگ او نوتیشن (Big O Notation) یکی از مفاهیم پایه در تحلیل الگوریتمهاست که برای محاسبه کارایی آنها استفاده میشود. این نماد مشخص میکند که الگوریتم با افزایش حجم دادهها، چه مقدار زمان یا حافظه بیشتری مصرف میکند و در زمان کار با دادههای بزرگ، چه نیازهای محاسباتی دارد. در واقع، مفهوم Big O به ما کمک میکند عملکرد یک الگوریتم در مقیاس بزرگ را بسنجیم و بدانی که چقدر قابل اعتماد و سریع است.
برای مثال، الگوریتمی با O(1) همیشه با عملکرد یکسانی کار میکند و با افزایش یا کاهش حجم ورودی، تغییری در سرعت و عملکرد آن ایجاد نمیشود. الگوریتمهای O(n) با افزایش دادهها کندتر عمل میکنند و الگوریتمهای O(n²) بسیار کندتر هستند. علت کندی الگوریتمهای O(n²)، نیاز به پردازش چندباره دادهها است. این مقایسه به ما اجازه میدهد هنگام طراحی یا انتخاب الگوریتم، بهترین گزینه را از نظر سرعت و مصرف منابع انتخاب کنیم.
به طور کلی، دو نوع پیچیدگی در الگوریتمها بررسی میشود: پیچیدگی زمانی و پیچیدگی مکانی.
پیچیدگی زمانی، میزان زمانی است که یک الگوریتم برای حل مسئله نیاز دارد. این معیار نشان میدهد که زمان اجرا چگونه با افزایش ورودیها تغییر میکند. برای مثال، الگوریتمی که برای بررسی فهرستی از هزار داده، باید هر مورد را جداگانه بررسی کند، دارای پیچیدگی خطی یا O(n) است. چیزی که در بالا به آن اشاره کردیم.
پیچیدگی مکانی به میزان حافظه مورد نیاز برای اجرای الگوریتم اشاره دارد. هر الگوریتم علاوه بر زمان، به مقداری فضای ذخیره سازی برای دادهها و متغیرها نیاز دارد. الگوریتمی که دادههای زیادی را ذخیره میکند، حتی اگر سریع اجرا شود، ممکن است حافظه زیادی مصرف کند. به همین دلیل باید تعادل بین حافظه و دادهها حفظ شود؛ این مورد خصوصا زمانی که چندین الگوریتم روی یک دستگاه یا سرور در حال اجرا هستند، اهمیت دارد.
بهینه بودن یک الگوریتم یعنی برقراری تعادل بین سرعت اجرا و میزان مصرف حافظه. در بسیاری از موارد، افزایش سرعت نیازمند مصرف حافظه بیشتر است و برعکس.
سوالات متداول
خیر. الگوریتم فقط متعلق به برنامه نویسی نیست. هرجا که کاری را گام به گام و منطقی انجام میدهید و نیاز به یک خروجی مطمئن دارید، در حال اجرای یک الگوریتم هستید. از درست کردن چای گرفته تا تصمیمگیری برای مسیر منزل تا دانشگاه؛ همه نوعی الگوریتم هستند. برنامه نویسان فقط از این منطق برای حل مسائل دیجیتالی استفاده میکنند.
از مسائل خیلی ساده شروع کنید. مثلاً الگوریتمی برای مرتب کردن سه عدد بنویسید یا الگوریتمی که عدد بزرگتر بین دو عدد را پیدا کند. برای تمرین بیشتر میتوانید الگوریتمهای مشهور و پرکاربرد را بسته به توانایی خود پیاده کنید یا آنها را با یکدیگر ترکیب کنید!
دیگر دوره خواندن کتابهای آموزش برنامه نویسی گذشته و نباید روی آنها حساب باز کنید. شرکت در یک دوره جامع آموزش الگوریتم، میتواند کمک زیادی برای درک بهتر این مفهوم باشد. استفاده از مطالب و آموزشهای رایگان در سایتهایی مثل آپارات و یوتیوب، میتواند در درک مقدماتی الگوریتم مفید باشد. همچنین اگر نیاز به یادگیری عمیق مفاهیم در این زمینه دارید، میتوانید در دوره جامع الگوریتم و ساختمان داده آکادمی سبزلرن شرکت کنید!
الگوریتمها انواع مختلفی دارد و هرکدام با هدف خاصی طراحی و پیاده میشوند. از مشهورترین الگوریتمها در دنیای برنامه نویسی میتوان به الگوریتمهای مرتب سازی، الگوریتمهای جستجو، الگوریتمهای بهینه سازی، الگوریتمهای یادگیری ماشین و صدها نوع دیگر اشاره کرد.
فلوچارت نوعی نقشه تصویری برای نمایش مراحل الگوریتم است که در آن، هر مرحله با یک شکل هندسی خاص (مثل لوزی برای شرط و مستطیل برای عملیات) نشان داده میشود. فلوچارت کمک میکند مسیر اجرای الگوریتم واضحتر و قابل درکتر شود.
فلوچارت نوعی نقشه تصویری برای نمایش مراحل الگوریتم است که در آن، هر مرحله با یک شکل هندسی خاص (مثل لوزی برای شرط و مستطیل برای عملیات) نشان داده میشود. فلوچارت کمک میکند مسیر اجرای الگوریتم واضحتر و قابل درکتر شود.
زبان مهم نیست، منطق مهم است. یکی از ویژگیهای الگوریتم این است که وابسته به زبان برنامه نویسی خاصی نباشد. در نتیجه اگر به هر زبانی مسلط باشید، امکان پیاده سازی الگوریتم وجود دارد.
حفظ کردن لازم نیست؛ بلکه باید منطق پشت هر الگوریتم را درک کنید. اگر بدانید یک الگوریتم چرا و چطور کار میکند، بعدا میتوانید هر الگوریتمی را خودتان بازنویسی کرده یا بهبود دهید. تمرکز روی درک مفاهیم، بهتر از حفظ کردن صدها خط کد است.
نظری برای این مقاله ثبت نشده است