آرایه موازی

از ویکی‌پدیا، دانشنامهٔ آزاد

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

یک مثال به زبان C با استفاده از آرایه موازی:

int  ages[]   = {0,          17,        2,          52,         25};
char *names[] = {"None",     "Mike",    "Billy",    "Tom",      "Stan"};
int  parent[] = {0 /*None*/, 3 /*Tom*/, 1 /*Mike*/, 0 /*None*/, 3 /*Tom*/};

for(i = 1; i <= 4; i++) {
    printf("Name: %s, Age: %d, Parent: %s \n",
           names[i], ages[i], names[parent[i]]);
}

در زبان پرل:

my %data = (first_name   => ['Joe',  'Bob',  'Frank',  'Hans'    ],
    last_name    => ['Smith','Seger','Sinatra','Schultze'],
    height_in_cm => [169,     158,    201,      199      ]);

for $i (0.. $#{$data{first_name}}) {
    printf "Name: %s %s\n", $data{first_name}[$i], $data{last_name}[$i];
    printf "Height in CM: %i\n", $data{height_in_cm}[$i];
}

و یا در زبان پایتون:

firstName  = ['Joe',  'Bob',  'Frank',  'Hans'    ]
lastName   = ['Smith','Seger','Sinatra','Schultze']
heightInCM = [169,     158,    201,      199      ]

for i in xrange(len(firstName)):
    print "Name: %s %s" % (firstName[i], lastName[i])
    print "Height in CM: %s" % heightInCM[i]

آرایه موازی تعدادی مزایای مفید نسبت به شیوه معمولی دارد:

  • آن‌ها می‌توانند در زبان‌هایی که تنها آرایه‌های ابتدایی را حمایت می‌کنند، استفاده شوند. (و یا احتمالاً هرگز رکورد را ندارند.)
  • آرایه‌های موازی به آسانی قابل فهم و قابل استفاده هستند، و اغلب جایی استفاده می‌شوند که اعلام یک رکورد سخت تر از چیزی است که ارزش دارد.
  • آن‌ها می‌توانند در بعضی از موارد، حجم بسیار زیادی را با کمک موضوعات تراز، ذخیره کنند. برای مثال، یک رکورد می‌تواند یک بیت باشد و آرایه آن نیاز به یک بیت برای هر رکورد دارد، در حالی که در شیوه معمولی، بیت‌های بیشتری را پوشش می‌دهد که ممکن است یک بایت یا یک کامه را مصرف کند.
  • اگر تعداد آیتم‌ها کم باشد، اندیس‌های آرایه می‌توانند به طرز چشمگیری، فضای کمتری نسبت به اشاره گرها اشغال بکنند، به خصوص در آرایه‌ها با کلمات بزرگ.
  • در ماشین‌های مدرن، بررسی متوالی یک زمینه هر رکورد، بسیار سریع انجام می‌شود.

به هرحال، آرایه موازی چند معایب قوی نیز دارد که نشان می‌دهد چرا به‌طور کلی ترجیح داده نمی‌شود:

  • آن‌ها رابطه بین فیلدها و رکوردها را تحت‌الشعاع قرار می‌دهند.
  • آن‌ها حمایت مستقیم زبان را نیاز دارند. (زبان و سینتکس آن به‌طور کلی هیچ رابطه‌ای بین آرایه‌ها در آرایه موازی را نشان نمی‌دهد.)
  • بزرگ کردن یا کوچک کردن آن‌ها پر هزینه است. آرایه‌های چند سطحی می‌توانند این مشکل را بهبود ببخشند. اما تأثیر اجرا به خاطر افزوده‌های غیر مستقیم، نیاز به پیدا کردن عناصر متمایل دارد.

جستارهای وابسته[ویرایش]

منابع[ویرایش]