آموزش مقدماتی الگوریتم
در کمتر از ۱۵ دقیقه، مفاهیم پایه الگوریتم، مرتبسازی و پیچیدگی زمان را یاد بگیرید. بدون نیاز به پیشزمینه سنگین — فقط با کمی دقت!
۱ الگوریتم چیست؟
الگوریتم مجموعهای از دستورات مرحلهبهمرحله و محدود است که یک مسئله را حل میکند. مثل دستور پخت غذا: مواد اولیه میگیرد (ورودی)، مراحل را اجرا میکند (پردازش)، و نتیجه میدهد (خروجی).
ویژگیهای یک الگوریتم خوب:
- محدود بودن: باید بعد از تعداد محدودی مرحله تمام شود.
- دقیق بودن: هر مرحله باید واضح و بدون ابهام باشد.
- ورودی و خروجی مشخص: بداند چه میگیرد و چه میدهد.
۲ مرتبسازی (Sorting)
مرتبسازی یکی از پرکاربردترین عملیات در برنامهنویسی است: چیدن دادهها به ترتیب صعودی یا نزولی. الگوریتمهای مختلفی برای این کار وجود دارد که هر کدام ویژگیهای خودشان را دارند.
سه الگوریتم معروف:
- Bubble Sort (حبابی): ساده اما کند. هر بار دو عدد مجاور را مقایسه و جابجا میکند.
- Merge Sort (ادغامی): سریع و پایدار. لیست را به دو نیم تقسیم میکند، هر نیم را مرتب میکند، سپس ادغام میکند.
- Quick Sort (سریع): سریعترین در عمل. یک عنصر «محور» انتخاب میکند و لیست را به دو بخش کوچکتر و بزرگتر تقسیم میکند.
شبیهساز مرتبسازی حبابی
۳ پیچیدگی زمان (Time Complexity)
پیچیدگی زمان معیاری است برای سنجش اینکه یک الگوریتم «چقدر سریع» اجرا میشود. بهجای اندازهگیری زمان واقعی (که به کامپیوتر بستگی دارد)، تعداد عملیاتها را بر حسب اندازهٔ ورودی (n) میشماریم.
مثال: اگر الگوریتمی برای مرتبسازی ۱۰ عدد، ۱۰۰ عملیات انجام دهد و برای ۱۰۰ عدد، ۱۰۰۰۰ عملیات، پیچیدگیاش O(n²) است — چون تعداد عملیات با مربع n رشد میکند.
۴ نماد Big-O
Big-O نمادی است که «مرتبهٔ رشد» یک الگوریتم را نشان میدهد. بهجای فرمول دقیق، میگوید در بدترین حالت، تعداد عملیاتها چطور با n رشد میکند.
مراتب رایج (از سریعترین به کندترین):
| مرتبه | نام | مثال | برای n=1000 |
|---|---|---|---|
| O(1) | ثابت | دسترسی به آرایه با ایندکس | ۱ عملیات |
| O(log n) | لگاریتمی | جستجوی دودویی (Binary Search) | ~۱۰ عملیات |
| O(n) | خطی | جستجوی خطی، پیمایش آرایه | ۱۰۰۰ عملیات |
| O(n log n) | خطی-لگاریتمی | Merge Sort, Quick Sort | ~۱۰۰۰۰ عملیات |
| O(n²) | درجه دوم | Bubble Sort, Insertion Sort | ۱،۰۰۰،۰۰۰ عملیات |
| O(2ⁿ) | نمایی | الگوریتمهای brute force | عدد نجومی! |
۵ پیچیدگی فضا (Space Complexity)
پیچیدگی فضا معیاری است برای میزان حافظهٔ اضافی که یک الگوریتم مصرف میکند. مثلاً اگر الگوریتمی برای مرتبسازی نیاز به یک آرایهٔ کمکی هماندازهٔ ورودی داشته باشد، فضایش O(n) است.
مثال: Bubble Sort فقط از یک متغیر موقت استفاده میکند → فضای O(1). اما Merge Sort نیاز به یک آرایهٔ کمکی دارد → فضای O(n).
۶ ساختمان داده (Data Structure)
ساختمان داده روشی برای سازماندهی دادهها در حافظه است تا عملیاتها (جستجو، درج، حذف) سریعتر انجام شوند. هر ساختمان داده برای کاربرد خاصی بهینه است.
ساختمانهای داده اصلی:
- آرایه (Array): دسترسی سریع با ایندکس (O(1))، اما درج/حذف کند.
- لیست پیوندی (Linked List): درج/حذف سریع، اما دسترسی کند.
- پشته (Stack): LIFO (آخرین ورودی، اولین خروجی) — مثل تاریخچهٔ مرورگر.
- صف (Queue): FIFO (اولین ورودی، اولین خروجی) — مثل صف بانک.
- درخت (Tree): برای جستجوی سریع — مثل درخت جستجوی دودویی (BST).
- گراف (Graph): برای مدلسازی روابط — مثل شبکههای اجتماعی.
آزمون کوتاه
۳ سوال — دانش خود را بسنجید!
جزوههای کامل کالاکن
مفاهیم پایه را یاد گرفتید؟ حالا جزوههای کامل و کاربردی را از کتابخانه کالاکن دانلود کنید. دو جزوهٔ تخصصی برای ادامهٔ مسیر یادگیری.