در این مقاله ، من درباره پیچیدگی محاسباتی که توسط Juris Hartmanis و Richard E. Stearns برای تجزیه و تحلیل دشواری یک الگوریتم توسعه داده شده است ، بحث خواهم کرد. .
همه ما می دانیم که طبیعت بشر به دنبال راهی کارآمد برای جمع آوری وظایف روزانه خود است. فرآیند غالب تفکر در پشت نوآوری و فناوری این است که با ارائه راه هایی برای حل مشکلاتی که ممکن است با آنها روبرو شوند ، زندگی را برای مردم آسان تر کند. در دنیای علم کامپیوتر و محصولات دیجیتال نیز همین اتفاق می افتد. ما الگوریتم هایی می نویسیم که کارآمد بوده و حافظه کمتری را برای عملکرد بهتر اشغال می کنند.
پیچیدگی زمانی زمانی است که الگوریتم برای اجرای هر مجموعه دستورالعمل صرف می کند. همیشه بهتر است کارآمدترین الگوریتم را زمانی انتخاب کنید که یک مشکل ساده با روش های مختلف حل شود. از دو فضای متفاوت تشکیل شده است. فضای کمکی و فضای ورودی.
فاکتور زمان معمولاً مهمتر از فضا است.
اگرچه بی اهمیت به نظر می رسند ، اما این عوامل در تعیین چگونگی توسعه ، طراحی و طراحی یک برنامه رایانه ای و چگونگی ارزش افزوده آن به کاربر بسیار مهم است. به یاد داشته باشید ، زمان پول است.
یک الگوریتم خوب الگوریتمی است که زمان کمتری را در اجرا به همراه داشته باشد و در طول فرآیند صرفه جویی کند. در حالت ایده آل ، ما باید یک حد وسط بین فضا و زمان پیدا کنیم ، اما می توانیم به میانگین بسنده کنیم. بیایید به یک الگوریتم ساده برای یافتن مجموع دو عدد نگاه کنیم.
مرحله #01: شروع.
مرحله #02: ایجاد دو متغیر (a & b).
مرحله #03: ذخیره مقادیر صحیح در "a" و "b." -> ورودی
مرحله #04: ایجاد متغیری با نام "Sum."
مرحله 05: مجموع 'a' و 'b' را در متغیری به نام 'Sum' ذخیره کنید -> خروجی
مرحله 06: پایان.
ساده است به نظر می رسد.
در زیر موارد زیر آمده است:عواملی که در استفاده طولانی مدت از یک الگوریتم نقش مهمی ایفا می کنند:
پیچیدگی زمانی عمیقاً با اندازه ورودی ارتباط دارد. با افزایش اندازه ورودی ، زمان اجرا (که مدت زمان لازم برای اجرای الگوریتم است) نیز افزایش می یابد.
مثال: یک الگوریتم مرتب سازی را در نظر بگیرید.
فرض کنید ما دارای مجموعه ای از اعداد به نام A = {10، 5، 21، 6، 9}،
الگوریتم های زیادی برای مرتب سازی اعداد داده شده موجود است. اما همه آنها کارآمد نیستند. برای یافتن م effectiveثرترین روش ، باید یک تجزیه و تحلیل محاسباتی روی هر الگوریتم انجام دهیم.
لئوناردو گالر و ماتئو کیمورا یکی از بهترین تحقیقات راجع به LAMFO در مورد "مرتب سازی الگوریتم" انجام دادند.
< img src = "https://cdn-images-1.medium.com/max/426/1*Rnj5rPbL7ccE-n1cXgVKrQ.png"> معیارهای LAMFOدر اینجا برخی از مشاهدات مهم نمودار آمده است :-
اگر از سابقه علوم کامپیوتر نیستید ، ممکن است این را پیدا کنید مفهوم کمی پیچیده تر از حد معمول است. جای نگرانی نیست! من شما را تحت پوشش قرار دادم.
بنابراین ، علامت بدون علامت چیست؟ > ما نمی توانیم دو الگوریتم را مستقیماً در کنار یکدیگر مقایسه کنیم. این بستگی زیادی به ابزارها و سخت افزاری دارد که برای مقایسه استفاده می کنیم ، مانند سیستم عامل ، مدل CPU ، تولید پردازنده و غیره. تحت تأثیر تغییرات نامحسوس در محیط سیستم قرار می گیریم.
بنابراین ، ما از تجزیه و تحلیل مجانبی برای مقایسه پیچیدگی فضا و زمان استفاده می کنیم. این دو الگوریتم را بر اساس تغییرات در عملکرد آنها در مورد افزایش یا کاهش اندازه ورودی تجزیه و تحلیل می کند.
در ابتدا سه نوع علامت بدون علامت وجود دارد:
نماد big-O در سال 1894 توسط پل باخمن معرفی شد. او بدون بحث این بحث را در بحث خود در مورد آن معرفی کردتقریبی یک تابع. n) <= c*g (n) برای همه n> = n0}
در اینجا 'n' مقدار حد بالا را می دهد. اگر یک تابع O (n) است ، آن O (n²) ، O (n³) نیز هست.
این رایج ترین نماد برای تجزیه و تحلیل مجانبی است. این محدوده بالایی یک تابع را تعریف می کند ، یعنی حداکثر زمان صرف شده توسط یک الگوریتم یا بدترین پیچیدگی زمانی یک الگوریتم. به عبارت دیگر ، حداکثر مقدار خروجی (big-O) را برای یک ورودی مربوطه می دهد.
توسط مدیسن استنکویچ (Dev.to)از تعریف: تابع f (n) Ω (g (n) است ) در صورت وجود اعداد مثبت c و N ، به عنوان مثال f (n) ≥ cg (n) برای همه n ≥ N.
محدوده پایینی یک تابع را تعریف می کند - یعنی حداقل زمان یک الگوریتم حداقل مقدار خروجی (big-Ω) را برای ورودی مربوطه می دهد.
نمودار توسط Hacker Earthدر صورت وجود اعداد مثبت c1 ، c2 ، f (n) Θ (g (n)) است و N به گونه ای که c1g (n) ≤ f (n) ≤ c2g (n) برای همه n ≥ N
محدوده پایینی و بالایی یک تابع را تعریف می کند ، یعنی در هر دو وجود دارد ، بیشترین و حداقل مرزهای یک مقدار ورودی داده شده.
نمودار توسط Hacker Earth < /img>وقتی برنامه نویسی را شروع کردم ، مفهوم پیچیدگی فضا و زمان همیشه برای من قدم بود. بنابراین امروز ، من فکر کردم بحث ساده ای را در مورد چگونگی تأثیر این دو عامل بر الگوریتم ایجاد کنم.
از شما برای خواندن این داستان و دیدار مجدد متشکرم. در صورت داشتن هر گونه نظر ، بازخورد یا پیشنهادی در مورد آن ، نظر خود را بنویسید!