آرایه‌ها (Arrays)

آرایه‌ها: ساختار پایه حافظه، دسترسی O(1) با اندیس، درج و حذف O(n)، آرایه دوبعدی و آرایه پویا

آرایه چیست؟

آرایه (Array) مجموعه‌ای از عناصر هم‌نوع است که در خانه‌های پشت‌سرهم حافظه ذخیره می‌شوند. هر عنصر با اندیس (index) — معمولاً از صفر — شناسایی می‌شود.

اندیس:   0    1    2    3    4
مقدار: [10] [25] [30] [45] [50]

چرا دسترسی آرایه O(1) است؟

چون خانه‌ها پشت‌سرهم‌اند، کامپیوتر می‌تواند با یک محاسبه آدرس هر خانه را پیدا کند:

آدرس خانه i = آدرس شروع + (i × اندازه هر عنصر)

مثل ردیف صندلی سینما: برای صندلی شماره ۵۰ لازم نیست از صندلی ۱ تا ۴۹ بروید؛ مستقیم محاسبه می‌شود!

عملیات و پیچیدگی‌ها

عملیاتپیچیدگیدلیل
دسترسی با اندیسO(1)محاسبه مستقیم آدرس
جستجو (بدون ترتیب)O(n)بررسی تک‌تک
درج/حذف در انتهاO(1)*بدون جابه‌جایی (*در آرایه پویا)
درج/حذف در ابتدا یا وسطO(n)جابه‌جایی همه عناصر بعدی

درج در وسط آرایه — چرا کند است؟

برای درج در اندیس ۲، همه عناصر بعد از آن باید یک خانه به عقب بروند تا جا باز شود. در بدترین حالت (درج در ابتدا) همه n عنصر جابه‌جا می‌شوند ← O(n).

آرایه دوبعدی (ماتریس)

آرایه‌ای از آرایه‌ها — مثل جدول سطر و ستون:

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
matrix[1][2]  # سطر ۱، ستون ۲ -> 6

کاربرد: تصویر (پیکسل‌ها)، صفحه بازی شطرنج، جدول ضرب.

آرایه پویا (Dynamic Array)

آرایه خام اندازه ثابت دارد. زبان‌ها «آرایه پویا» می‌دهند (list پایتون، vector در C++):

آرایه در پایتون

list پایتون در واقع آرایه پویای انعطاف‌پذیر است (می‌تواند انواع مختلف را هم نگه دارد). برای آرایه عددی خالص و بهینه، ماژول array یا NumPy موجود است.

نکته: اگر الگوی کاری شما «درج/حذف زیاد در ابتدای لیست» است، آرایه انتخاب بدی است! سراغ لیست پیوندی (مبحث بعد) بروید.

الگوهای پرکاربرد آرایه

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط