برنامه نویسی

Big-O در اسپانیایی قسمت 5

در مقالات قبلی در مورد یادداشت های بزرگ ، پیچیدگی های مختلف را از ثابت و خطی گرفته تا فاکتوریل و نمایی کشف می کنیم. با این حال ، بسیاری از ملاحظات مهم دیگر در مورد تجزیه و تحلیل و بهینه سازی الگوریتم ها وجود دارد.

در این مقاله ، ما به موضوعات پیشرفته ای می پردازیم که مفاهیم اساسی Big-O را تکمیل می کنند.


در این سریال چه چیزی پیدا خواهید کرد؟

  1. قسمت 1: عبارات خطی و ثابت

    آشنایی با نمادهای ساده تر و چگونگی تأثیر آنها بر عملکرد الگوریتم های ما.

  2. قسمت 2: عبارات درجه دوم ، مکعب و سایر قدرتها

    تجزیه و تحلیل عمیق تر از چگونگی رشد زمان اجرای در الگوریتم های پیچیده تر.

  3. قسمت 3: عبارات لگاریتمی ، نمایی و فاکتوریل

    ما مواردی را کشف خواهیم کرد که زمان اجرای آن بسیار شدیدتر می شود.

  4. قسمت چهارم: ترکیب پیچیدگی ها و مقایسه ساختار داده ها

    ما تجزیه و تحلیل خواهیم کرد که چگونه ساختار داده های مختلف بر پیچیدگی و نحوه ترکیب چندین الگوریتم تأثیر می گذارد.

  5. قسمت 5: ملاحظات پیشرفته و موارد واقعی

    تأملات نهایی در مورد تجارت بین زمان و مکان ، پیچیدگی های استهلاک و نحوه استفاده از Big-O در سناریوهای واقعی.


ملاحظات اضافی در Big-O

1 پیچیدگی فضایی (پیچیدگی فضایی)

علاوه بر اندازه گیری زمان اجرای یک الگوریتم ، در نظر گرفتن این موارد نیز ضروری است پیچیدگی مکانی، که اندازه گیری حافظه اضافی در حین اجرای نیاز به الگوریتم دارد.

مثال:

  • فضای ثابت (O (1)): هیچ حافظه اضافی لازم نیست که به اندازه داده های ورودی بستگی داشته باشد.
  • فضای خطی (O (N)): به حافظه متناسب با اندازه داده های ورودی نیاز دارد.
function calcularSuma(arreglo) {
  let suma = 0; // Espacial constante
  for (let i = 0; i < arreglo.length; i++) {
    suma += arreglo[i]; // Solo usamos una variable adicional para almacenar la suma
  }
  return suma;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این حالت ، پیچیدگی مکانی است o (1)، از آنجا که هیچ ساختاری اضافی متناسب با اندازه داده ها ایجاد نمی شود.


2 تجارت بین زمان و مکان

در بسیاری از موارد ، بهینه سازی زمان اجرای یک الگوریتم می تواند پیچیدگی مکانی آن را افزایش دهد و برعکس. این تعادل باید بر اساس منابع موجود مورد تجزیه و تحلیل قرار گیرد.

مثال: ذخیره سازی حافظه نهان (Memoization)

function fibonacci(n, memo = {}) {
  if (n <= 1) return n;
  if (memo[n]) return memo[n]; // Uso de memoria adicional
  memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
  return memo[n];
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این رویکرد با کاهش تماس های اضافی ، زمان اجرای را بهبود می بخشد ، اما از حافظه اضافی برای ذخیره نتایج استفاده می کند.


3 پیچیدگی استهلاک شده

پیچیدگی استهلاک ، میانگین هزینه یک عملیات را در یک مجموعه داده پس از انجام چندین عملیات ارزیابی می کند.

مثال: آرایه های پویا

ترتیبات پویا ، مانند JavaScript ، در صورت فراتر رفتن ظرفیت آنها ، اندازه آنها را دو برابر می کند. اگرچه درج به نظر می رسد o (n) هنگام تکثیر ، پیچیدگی متوسط ​​است o (1) به دلیل نادر بودن این عملیات استعفا.

let arreglo = [];
arreglo.push(1); // O(1)
arreglo.push(2); // O(1)
arreglo.push(3); // Si se excede la capacidad, se copia en un arreglo más grande (O(n))
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


4 موارد خاص: مورد بهتر ، بدتر و متوسط

تجزیه و تحلیل Big-O ممکن است با توجه به داده های ورودی متفاوت باشد. درک سه مورد مهم است:

  • بهترین مورد: حداقل زمانی که یک الگوریتم می گیرد. مثال: عنصری را پیدا کنید که در ابتدای یک ترتیب باشد.
  • بدترین مورد: حداکثر زمانی که یک الگوریتم طول می کشد. مثال: عنصری را پیدا کنید که در یک آرایش نباشد.
  • مورد متوسط: میانگین زمان در نظر گرفتن داده های ورود تصادفی.

مثال: جستجوی خطی

function buscarElemento(arreglo, elemento) {
  for (let i = 0; i < arreglo.length; i++) {
    if (arreglo[i] === elemento) return i; // Mejor caso: O(1)
  }
  return -1; // Peor caso: O(n)
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


5 تأثیر ثابت پنهان

نماد بزرگ O ، ثابت ها و شرایط کمترین درجه را نادیده می گیرد ، اما در عمل ، این ثابت ها می توانند تأثیر قابل توجهی داشته باشند.

مثال: نوع حباب در مقابل الگوریتم مرتب سازی سریع

اگرچه هر دو الگوریتم در بدترین حالت پیچیدگی یکسانی دارند (o (n²)) ، مرتب سازی سریع به طور متوسط ​​به دلیل کوچک بودن جزئی مخفی ، به طور متوسط ​​بسیار کارآمدتر است.


6 موازی و همزمان

در سیستم های مدرن ، موازی گرایی و همزمانی می تواند زمان اجرای را به میزان قابل توجهی کاهش دهد ، اگرچه آنها نماد بزرگ O را تغییر نمی دهند.

مثال: پردازش موازی

اگر یک الگوریتم داده ها را به صورت موازی پردازش کند ، زمان اجرای آن می تواند بین تعداد موضوعات یا پردازنده ها تقسیم شود.

function procesarDatosEnParalelo(datos) {
  const resultados = datos.map(dato => procesar(dato)); // Operación paralela en sistemas distribuidos
  return resultados;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


پایان

Big-O ابزاری اساسی برای درک کارآیی الگوریتم ها است ، اما این تنها عامل مورد توجه نیست. پیچیدگی های فضایی ، موارد خاص ، تجزیه و تحلیل ثابت پنهان و تأثیر موازی بودن جنبه های مهمی است که تجزیه و تحلیل کارآیی را تکمیل می کند.

با استفاده از این مفاهیم پیشرفته ، می توانید الگوریتم ها را عمیق تر تجزیه و تحلیل کرده و هنگام طراحی راه حل های مقیاس پذیر تصمیمات آگاهانه بگیرید.


منابع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا