آرایه ها Array
description
Transcript of آرایه ها Array
1
Arrayآرایه ها
2
تعریف آرایه عنص�ر ، متن�اهی )مح�دود( ، ب�ا عناص�ر nلیس�تی از •
هم ن�وع ، دسترس�ی از طری�ق ان�دیس ک�ه در حافظ�ه در خ�انه های �متو�الی ح�افظه قرار� می� گیرند.
آرایه به عنوان یک نوع داده انتزاعی•داده ها: مشخصات آرایه▫عملگره�ا: پیم�ایش، جس�تجو، م�رتب ک�ردن، اض�افه و ح�ذف، ▫
ادغام
آرایه یک بعدی )خطی(•9 تا 0 عنصر از 10 ▫C++ int a[10]تعریف در ▫;X=a[3]بازیابی مقدار ▫;a[3]=Xذخيره مقدار ▫++ اندیس از صفر شروع می شود.Cدر ▫
3
اندازه آرایه
ان�دازه آرای�ه : تع�داد خان�ه ه�ا * ان�دازه ه�ر •خانه
▫int : 2بایت ▫float : 4بایت ▫char : 1بایت ▫boolean : 1بایت
آدرس خان�ه ش�روع آرای�ه را base(a)تابع •برمی گرداند.
4
آدرس خانه ای خاص در آرایه یک بعدی
address a[i] = base (a) + i * sizeof (type(a))
تعریف • با آرایه یک در floatمثال: a[200] در آرای��ه ش��روع آدرس اگ��ر ، در ک�دام آدرس a25 باش�د، 1000حافظ�ه
قرار دارد؟(25 – 0) × 4 + 1000 = 1100
5
آرایه دو بعدی )ماتریس(
6
روش ذخیره ماتریس ها
7
حالت کلی
[L1 … U1 , L2 … U2 , Ln … Un]Array [L … U] of itemsU – L + 1 = تعداد عناصر آرایه n= [U1 – L1 تعداد عناصر آرایهn بعدی+ 1][U2 – L2 + 1][Un – Ln + 1]
(space)فض�ای اش�غال ش�ده توس�ط آرای�ه =
[U1 – L1 + 1][U2 – L2 + 1][Un – Ln + 1] * sizeof(type(array))
8
آدرس دهی سطری
address (a[i,j]) = base (a)+ تع�داد عناص�رقبل* سایز
= base (a) + [(n*i)+j] * sizeof (type(a))
= base (a) + [(u2-l2+1)*(i-l1) + (j-l2)] * sizeof (type(a)) i
j
m= u1-l1+1
n = u2-l2+1
9
آدرس دهی ستونی
address (a[i,j]) = base (a)+ تع�داد عناص�رقبل* سایز
= base (a) + [(m*j)+i] * sizeof (type(a))
= base (a) + [(u1-l1+1)*(j-l2) + (i-l1)] * sizeof (type(a)) i
j
m= u1-l1+1
n = u2-l2+1
10
11
A [60 , 6] = (60 – 1) × (26 – 1 + 1) +
(6 – 1 × )2 + 1000 = 4078A [20 , 4] = (4 – 1) × (100 – 1 +
1) + (20 – 1) × 2 + 1000 = 1638
آرايه سه بعدی
13
رابطه بین اندیس ها در ماتریس مربعی
دارای • اص�لی قط�ر روی عناص�ر م�ربعی م�اتریس در آد�رس یکسانی در روشه�ای سطری و �ستونی هستند.
ب�االی قط�ر اصلی است.A[i,j] باش�د آنگ�اه i<jاگ�ر • روی قط�ر اصلی است.A[i,j] باش�د آنگ�اه i=jاگ�ر • پ�ایین قط�ر اصلی است.A[i,j] باش�د آنگ�اه i>jاگ�ر •آنگ�اه i+j<n-1اگ�ر • باش�د A[i,j] ب�االی قط�ر ف�رعی
است.آنگ�اه i+j=n-1اگ�ر • باش�د A[i,j] ف�رعی قط�ر روی
است.آنگ�اه i+j>n-1اگ�ر • باش�د A[i,j] پ�ایین قط�ر ف�رعی
است.
ذخيره سازي ماتريسهاي خاص
15
ماتریس های خاص
ماتریس های قطری
اس�ت ک�ه تم�امی درای�ه ه�ای آن غ�یر از قط�ر اص�لی ماتریس م�ربعی•
صفر باشد.
)تع�داد • اص�لی قط�ر ط�ول ب�ه آرای�ه ی�ک در را ه�ا م�اتریس این
سطرها یا ستون ها(، ذخیره می نماییم.
تعداد عناصر غیر صفر =n
.نحوه ذخیره بصورت یک آرایه یک بعدی
( پس عضوi, i در اندیس )i قرار دارد. از آرايه یک بعدي
نکته: اندیس آرایه ها در(C)از صفر شروع می شود
16
1 0 0 0
0 3 0 0
0 0 6 0
0 0 0 10
ماتریس های سه قطری
اس�ت ک�ه تم�امی درای�ه ه�ای آن غ�یر از قط�ر اص�لی، ماتریس م�ربعی•
باالی قطر اصلی و پایین قطر اصلی صفر باشد.
= تعداد عناصر غیر صفرn+2)n-1(
17
1 3 0 0
4 3 9 0
0 1 6 4
0 0 1 2
ماتریس های مثلثی
پ�ایین • تم�ام درای�ه ه�ای ب�اال مثل�ثی: م�اتريس م�ربعي ك�ه ماتریس
قطر اصلی در آن صفر هستند.
ماتریس پ�ایین مثل�ثی: م�اتريس م�ربعي ك�ه تم�ام درای�ه ه�ای ب�االی •
قطر اصلی در آن صفر هستند.
n)n+1(/2= تعداد عناصر غیر صفر •
18
1 0 0 0
2 3 0 0
4 5 6 0
7 8 9 10
ذخيره سازي ماتريسهاي خاص - ادامه
اين ماتريسها را مي توان نوع خاصي از ماتريس اسپارس •دانست.
ذخيره سازي عناصر غير صفر در يك آرايه يك بعدي جهت •صرفه جويي در حافظه.
ماتریس پراکنده یا اسپارس:ماتریس هایی که اکثریت عناصر آنها مقدار صفر •
دارند .با توجه به تعداد زیاد صفرها و بزرگ بودن •
ماتریسها ایجاد روش بهینه برای ذخیره سازی
راه حل: استفاده از یک آرایه دو بعدی با سه ستون
21
row col value
A[1] 0 0 15 A[2] 0 3 22 A[3] 0 5 -15 A[4] 1 1 11 A[5] 1 2 3 A[6] 2 3 -6 A[7] 4 0 91 A[8] 5 2 28
اوليه ماتريس سطرهاي تعداد
ماتريس ستونهاي تعداداوليه
صفر عناصرغير تعداداوليه ماتريس
A[0] 6 6 8
ترانهاده ماتريس اسپارس
براي ترانهاده كردن اين ماتريس شماره ي سطر و ستون را عوض كرده مقدار عنصر را
قرار مي دهيم:valueدر ستون
( 0,0,15( )0,0,15)( 0,3,22( )3,0,22)( 0,5-,15( )5,0-,15)
ترانهاده ماتريس اسپارس - مثال
ويژگيهاي كالس اسپارس
class MatrixTerm {friend class SparseMatrixprivate :
int row, col, value;}In SparseMatrix:private:
int Rows, Cols, Terms;MatrixTerm smArray [MaxTerms];