پیچیدگی الگوریتم در درجه اول به دو منبع میپردازد:
زمان
(مدت زمان اجرا) و
فضا
(میزان استفاده از حافظه). در حالی که پیچیدگی زمانی، چگونگی افزایش زمان اجرا با اندازه ورودی را اندازهگیری میکند (
ن
)، پیچیدگی فضا، میزان مصرف حافظه را ارزیابی میکند. برای مثال:
- الگوریتمی با
O(n)
پیچیدگی زمانی به صورت خطی با اندازه ورودی تغییر میکند.
- الگوریتمی با
O(1)
پیچیدگی فضایی صرف نظر از اندازه ورودی، از حافظه ثابت استفاده میکند.
هر دو معیار ضروری هستند. یک الگوریتم سریع ممکن است حافظه را در مجموعه دادههای بزرگ مصرف کند، در حالی که یک الگوریتم با حافظه کارآمد میتواند برای برنامههای بلادرنگ بسیار کند باشد.
کارایی، امکانسنجی را تعیین میکند. مرتبسازی لیستی از 10 مورد را در مقابل 10 میلیون مورد در نظر بگیرید.:
- A
مرتبسازی حبابی
(
O(n)
) ممکن است برای مجموعه دادههای کوچک کافی باشد اما برای مجموعه دادههای بزرگ غیرعملی میشود.
- A
مرتبسازی ادغامی
(
O(n log n)
) مجموعه دادههای بزرگتر را به خوبی مدیریت میکند اما به حافظه اضافی نیاز دارد.
تحلیل پیچیدگی، زبانی جهانی برای مقایسه الگوریتمها فراهم میکند و جزئیات خاص سختافزار را کنار میگذارد. این امر توسعهدهندگان را قادر میسازد تا مقیاسپذیری را پیشبینی کرده و از تنگناها در سیستمهای حیاتی جلوگیری کنند.
نمادهای مجانبی رفتار حدی توابع را توصیف میکنند و خلاصهای از پیچیدگی ارائه میدهند. سه نماد اصلی عبارتند از:
نماد O بزرگ حداکثر زمان یا فضایی را که یک الگوریتم اشغال میکند، تعریف میکند. برای مثال:
-
O(1)
: زمان ثابت (مثلاً دسترسی به عنصر آرایه بر اساس اندیس).
-
O(n)
: زمان خطی (مثلاً تکرار از طریق یک لیست).
-
O(n)
: زمان درجه دوم (مثلاً حلقههای تو در تو در مرتبسازی حبابی).
شاخص O بزرگ رایجترین معیار مورد استفاده است، زیرا سقف عملکرد را تضمین میکند.
امگا حداقل زمان مورد نیاز را توصیف میکند. برای مثال:
- یک جستجوی خطی دارد
(1)
اگر هدف عنصر اول باشد.
اگرچه خوشبینانه است، اما تحلیل بهترین حالت برای برنامهریزی بدترین حالت، اطلاعات کمتری ارائه میدهد.
تتا، O بزرگ و امگا را ترکیب میکند و رفتار مجانبی دقیقی را نشان میدهد. اگر بهترین و بدترین حالت یک الگوریتم یکسان باشد:
-
(n لگاریتم n)
برای سناریوهای میانگین و بدترین حالت مرتبسازی ادغامی اعمال میشود.
این نمادگذاریها، ثابتها و عبارات مرتبه پایینتر را با تمرکز بر نرخهای رشد، حذف میکنند. برای مثال، ۲n + ۳n + 4 ساده میکند به O(n) زیرا عبارت درجه دوم برای اعداد بزرگ غالب است ن .
درک کلاسهای پیچیدگی به دستهبندی الگوریتمها بر اساس مقیاسپذیری کمک میکند. در اینجا یک سلسله مراتب از کارآمدترین تا ناکارآمدترین وجود دارد:
زمان اجرا یا حافظه بدون تغییر باقی میماند
ن
رشد می کند.
-
مثال
: دسترسی به مقدار جدول هش با استفاده از کلید.
زمان اجرا به صورت لگاریتمی افزایش مییابد
ن
.
-
مثال
جستجوی دودویی فضای ورودی را در هر تکرار نصف میکند.
زمان اجرا به طور متناسب با ... افزایش مییابد
ن
.
-
مثال
جستجوی خطی در یک لیست نامرتب
در الگوریتمهای تقسیم و حل رایج است.
-
مثال
: مرتبسازی ادغامی و مرتبسازی هیپ.
تکرارهای تو در تو منجر به رشد انفجاری میشوند.
-
مثال
: مرتبسازی حبابی و مرتبسازی انتخابی.
زمان اجرا با هر ورودی اضافی دو برابر میشود.
-
مثال
محاسبه فیبوناچی بازگشتی بدون یادداشتبرداری.
الگوریتمهای مبتنی بر جایگشت
-
مثال
حل مسئله فروشنده دوره گرد از طریق جستجوی فراگیر.
تفاوت بین O(n log n) و O(n) شدید میشود ن = 10 اولی ممکن است در عرض چند میلیثانیه اجرا شود، در حالی که دومی میتواند روزها طول بکشد.
الگوریتمها بر اساس پیکربندیهای ورودی، عملکرد متفاوتی دارند. تجزیه و تحلیل همه موارد، استحکام را تضمین میکند:
یک بهینهساز پرسوجوی پایگاه داده ممکن است بین یک پیوند هش () یکی را انتخاب کند. O(n + m) ) و اتصال حلقه تو در تو ( O(نانومتر) ) بر اساس توزیع دادهها. تحلیل بدترین حالت برای سیستمهای ایمنی-حیاتی (مثلاً نرمافزارهای هوانوردی) که در آنها غیرقابلپیشبینی بودن غیرقابل قبول است، بسیار مهم است.
همین مسئله را میتوان با استفاده از الگوریتمهای مختلف حل کرد. برای مثال، مسئله جستجوی یک مقدار هدف در فهرستی از مقادیر را میتوان با استفاده از الگوریتمهای مختلفی مانند جستجوی خطی، جستجوی دودویی یا جستجوی جدول هش حل کرد.
جدول زیر پیچیدگی زمانی و مکانی این الگوریتمها را برای جستجوی یک مقدار هدف در فهرستی از ... مقایسه میکند. ن ارزشها.
انتخاب الگوریتم به اندازه مسئله، ویژگیهای ورودی و منابع موجود بستگی دارد. برای مثال، اگر لیست کوچک و نامرتب باشد، جستجوی خطی میتواند بهترین انتخاب باشد. اگر لیست بزرگ و مرتب باشد، جستجوی دودویی میتواند بهترین انتخاب باشد. اگر لیست بزرگ و نامرتب باشد، جستجوی جدول هش میتواند بهترین انتخاب باشد.
تحلیل سرشکنشده، میانگین زمان را در طول یک توالی از عملیات محاسبه میکند.
-
مثال
آرایههای پویا وقتی پر میشوند، دو برابر ظرفیت دارند. در حالی که مجرد
فشار دادن
عملیات ممکن است طول بکشد
O(n)
زمان، هزینه مستهلک شده باقی میماند
O(1)
.
الگوریتمهایی مانند
مونت کارلو
و
لاس وگاس
از تصادفی بودن برای افزایش کارایی استفاده کنید.
-
مثال
آزمون اول بودن میلر-رابین تضمینهای احتمالی دارد اما از روشهای قطعی سریعتر است.
برخی از مشکلات (مثلاً ارضاپذیری بولی) عبارتند از: انپی-کامل ، به این معنی که هیچ راه حل شناخته شده ای در زمان چندجمله ای وجود ندارد. اثبات NP-کامل بودن از طریق کاهشها به طبقهبندی سختی محاسباتی کمک میکند.
یک O(n) الگوریتم خوشهبندی میتواند به یک گلوگاه برای مجموعه دادههای عظیم تبدیل شود و باعث تغییر به روشهای تقریبی مانند درختهای kd شود ( O(n log n) ).
سیستمهای کلید عمومی بر سختی ... متکی هستند. O(2) مسائل (مثلاً تجزیه اعداد صحیح) برای مقاومت در برابر حملات.
موتورهای رندرینگ بلادرنگ اولویتبندی میکنند O(1) الگوریتمهای شبیهسازی فیزیک برای حفظ نرخ فریم بالای ۶۰ فریم بر ثانیه
بدهبستانها مهم هستند:
-
زمان در مقابل فضا
: استفاده از نقشههای هش (
O(1)
جستجوها) به قیمت اشغال حافظه.
-
سادگی در مقابل بهینگی
: مرتبسازی درجی (
O(n)
) ممکن است برای مجموعه دادههای کوچک و تقریباً مرتبشده ارجحیت داشته باشد.
برای الگوریتمهای بازگشتی، روابط بازگشتی، زمان اجرا را مدلسازی میکنند. برای مثال، مرتبسازی ادغامی بازگشتی:
[ T(n) = 2T(n/2) + O(n) ] به صورت زیر حل میشود:
O(n log n)
از طریق
قضیه اصلی
.
آزمایش تجربی، تحلیل نظری را تکمیل میکند. ابزارهای پروفایلینگ (مثلاً Valgrind، perf) تنگناهای دنیای واقعی را آشکار میکنند.
پایتون
تعریف جمع خطی(arr):
مجموع = 0
برای عدد در arr:
مجموع += تعداد
مجموع بازگشتی
تعریف جمع درجه دوم (arr):
مجموع = 0
برای من در arr:
برای j در arr:
مجموع += i * j
مجموع بازگشتی
در حالی که O(n) ثابتها را حذف میکند، a ن100 الگوریتم ممکن است کندتر از یک ن0.01 الگوریتم برای کاربردهای عملی ن .
یک O(n log n) الگوریتم ممکن است عملکرد ضعیفی داشته باشد O(n) برای ن = 10 به دلیل سربار.
یک تابع فیبوناچیِ یادداشتشده ( O(n) فضا) میتواند بر خلاف نسخه تکراری (، در ورودیهای بزرگ از کار بیفتد. O(1) فضا).
یک BST خود متعادل ( O(log n) جستجو) از BST معمولی امنتر است ( O(n) بدترین حالت) برای دادههای غیرقابل اعتماد.
تحلیل پیچیدگی الگوریتم، قطبنمایی است که توسعهدهندگان را در چشمانداز وسیع کارایی محاسباتی هدایت میکند. برای دانشجویان MTSC7196، تسلط بر این رشته، دانش نظری و تخصص عملی را به هم پیوند میدهد. با تشریح الزامات زمانی و مکانی، مقایسه مرزهای مجانبی و پیمایش بدهبستانهای دنیای واقعی، توسعهدهندگان میتوانند سیستمهایی بسازند که به طور مطلوب مقیاسپذیر و با قابلیت اطمینان بالا عمل کنند.
در عصری که با نوآوری مبتنی بر داده تعریف میشود، توانایی تشخیص بین ... O(n log n) و یک O(n) راه حل فقط آکادمیک نیست، یک ضرورت استراتژیک است. همچنان که در مطالعات خود پیشرفت میکنید، به یاد داشته باشید: تحلیل پیچیدگی صرفاً مربوط به اعداد و نمادها نیست. این در مورد درک ضربان قلب محاسبات است.
از سال 2019 ، Jewelry U Meet در Guangzhou ، چین ، پایگاه تولید جواهرات تأسیس شد. ما یک شرکت جواهرات هستیم که طراحی ، تولید و فروش را ادغام می کنیم.
+86-19924726359/+86-13431083798
طبقه 13 ، برج غربی شهر هوشمند گوم ، شماره خیابان 33 Juxin ، منطقه حیزو ، گوانگژو ، چین.