آموزش ساختمان داده ها - بخش سوم
TRANSCRIPT
ساختمان داده ها
faradars.org/fvsd9402
:مدرسفرشید شیرافکن
دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )
آرایه
1
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تعریف آرایه
2
انديسازآنعنصرهربهدسترسيبرايوشدهمعرفيناميکتحتکهاستنوعهمدادههايازمجموعهايآرايه.ميشوداستفادهمشخصي
int a[10];
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
آرایه دو بعدی
3
int balances[11][6]; فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
بعدی3آرایه
4
int c [3][4][5];
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
نحوهذخیرهعناصرآرايهدرحافظه
آرايهرعناصبهدسترسيسرعتشدنسريعموجبکهگیرندميقرارهمسرپشتصورتبهحافظهدرآرايهعناصرفضابايتwاندازهبهآرايهعنصرهروشودذخیرهحافظهآلفاآدرسدرآرايهاولعنصراينکهفرضبا.شودمي
هبآرايهعناصرکهشدهفرض.شودميمحاسبهزيرروابطکمکبهحافظهدرآرايهعنصرهرمحلنمايد،اشغال:استشدهذخیرهحافظهدرسطربهسطرصورت
5
wljlulijixloc )]()1()[(:]),[( 2221
wlkluljlululi
kjixloc
)]()1()()1()1()[(
:]),,[(
333233221
wliixloc )(:])[(
]..,..[ 2211 ululx
]..,..,..[ 332211 ulululx
]..[ ulx
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.کنیدمحاسبهراA[3][4]آرايهدرA[1][2]عنصرآدرس:فرض.استبايتي8دادهنوعازآرايهعناصر
.است10آرايهشروعآدرس
:حل
.باشدA[0..2][0..3]صورتبههاانديسمحدوده
6
588)]02(4)01[(10
wljluli )]()1()[( 2221
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
A[3][4]
7
588)]02(4)01[(10
3210
0
1
2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.کنیدمحاسبهراA[20][10][5]آرايهدرA[3][4][2]عنصرآدرس:فرض.استبايتي2دادهنوعازآرايهعناصر
.استصفرآرايهشروعآدرس
:حل
.باشدA[0..19][0..9][0..4]صورتبههاانديسمحدوده
8
3442]220150[0
2)]02(5)04(510)03[(0
wlkluljlululi )]()1()()1()1()[( 333233221
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
آرایهجستجوی خطی در
،کردنپیداصورتدر.مينمايدجستجوآرايه،عناصرتکتکبامقايسهروشبه،aعنصريnآرايهدرراxمقدارزيرتابع.گرداندميبررا1-عددنکردن،پیداصورتدروxحاويخانهانديس
seqsearch (a[ ] , n , x )
{
for ( i = 0 ; i <=n-1 ; i++ )
if (a[i] == x)
return i ;
return -1 ;
}
.بودخواهدO(n)عملمقايسهداريمکهدرنتیجهزمانآنn+1دريکجستجويناموفقنیازبه
9
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402 جستجوی دودویی
شود،ميمقايسهآرايهوسطعنصرباجستجوموردعنصرباشد،شدهمرتبصعوديطوربهآرايهاينکهفرضبا.استشدهپیدابودن،برابرصورتدرگیردميانجامآرايهبااليينیمهدربازگشتيطوربهمقايسهباشد،بزرگترآرايهوسطعنصرازاگراينصورت،غیردر.شودميانجامآرايهپايینينیمهدربازگشتيطوربهمقايسهوسط،عنصرازبودنکوچکترصورتدرو
10
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
:مرتبآرايهدر12عددکردنپیدا:مثال
.35يعنيx[1..9]وسطعنصربا12مقايسه-1
.9يعنيx[1..4]وسطعنصربا12مقايسه-2
.12يعنيx[3..4]وسطعنصربا12مقايسه-3
.کرديمپیدارا12عددمقايسه3بابنابراين
11
1 2 3 4 5 6 7 8 9
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تابع جستجوی دودویی
آرايهدرراآنانديسکند،پیداراxاگر.مينمايدجستجودودويي،روشبه،Aمرتبعنصريnآرايهدرراxمقدارزيرتابعlow=0):ابتدادر).گرداندميبررا1-عددنکردن،پیداصورتدروگرداندميبر , high=n-1
bsearch(a[ ] , x , low , high){while (low <= high)
{
mid = (low + high) / 2 ;if ( x < a[mid] )
high = mid-1 ;else
if ( x > a[mid] )
low = mid+1 ; else return mid ;
}return -1 ;
}12
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
( بازگشتی)جستجوی دودویی
bsearch (a[ ] , x , low , high ){
if (low <=high ) {
mid = ( low+high ) / 2;
if ( x < a[mid] )bsearch( a , x , low , mid-1 );
else if ( x > a[mid] )bsearch (a , x , mid+1 , high );
else
return mid;}
return -1; }:مرتبه:جوابرابطه:بازگشتيرابطه
13
1)2
()( n
TnT)(lgnO 1lg n
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
جستجويدودويي
:آرايهيکدردودوييجستجويروشبهعنصريکردنپیدابرايهامقايسهتعدادحداکثر10:عنصرهزاربا
14:عنصرهزاردهبا
17:عنصرهزارصدبا
20:عنصرمیلیونيکبا
.دهدمينشانراخودبیشترزياد،عناصرتعدادباآرايهدر،خطيجستجويبهدودوييجستجويبرتريبنابراين
14
highmid+1midmid-1low
…… فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
آرايهدرجدر
.اضافهميکند،aآرايهامkرادرمکانx،مقدارinsertتابع
(m<n):آنپراستعنصرmخانهاستکهnدارايaفرضشدهکهآرايه
X=‘A’,k=0,n=7,m=5:مثال
insert (a[ ] , m , k , x)
{
for ( i = m-1 ; i >= k ; i-- )
a[i+1] = a[i];
a[k] = x;
}
:شیفتموردنیازتعداد
15
km
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حذفازآرايه
(k<=n).ميدهدقرارxمتغیردرراآنوکردهحذفراaآرايهعنصرامینkزيرتابع
delete( a[ ] , n , k , x )
{
x = a[k];
for ( i = k ; i<n ; i++ )
a[i] = a[i+1];
a[i] = 0;
return(x);
}
16
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ماتريس
:ازعبارتندمعروفهايماتريساسپارسماتريس-1
(مثلثيباالومثلثيپايین)مثلثيماتريس-2
(...وقطريپنج،قطريسه)قطريماتريس-3
17
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(خلوت)ماتریس اسپارس
.نامندمي(تنکياخلوت)اسپارسماتريسراباشدصفرعنصرزيادينسبتاتعداددارايکهماتريسي
.ميشوندذخیرهماتريسغیرصفرعناصرفقطاجرا،زمانومصرفيحافظهکاهشبرايماتريس،ايندر
:مثال
18
5
2
2
2
3
4
2
1
3
0
0
0
0
0
2
0
5
0
0
0
0 فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ماتریس پایین مثلثی
غیرعناصرفقطس،ماترياينذخیرهبراي.گويندميمثلثيپايینماتريسراباشدصفرآناصليقطربااليعناصرتمامکهماتريسي.شوندميذخیرهصفر:مثال
:شودميذخیرهزيرآدرسدرمثلثيماتريسjستونوiسطردرواقععنصر
19
1
0
0
4
6
0
5
3
2a a+1 a+2 a+3 a+4 a+5
2 3 6 5 4 1
12
)1(
j
iia
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
قطری3ماتریس
ظاهراصليقطرپائینوباالبالفاصلهواصليقطررويآنصفرغیرهايدرايهکهباشدميمربعيماتريسيکقطريسهماتريس.باشدميبرابرماتريسايندرصفرغیرعناصرتعداد.شوندمي:مثال
:شودميذخیرهزيرحافظهآدرسدرمثلثيپايینماتريسjستونوiسطردرواقععنصر
20
5
83
0
0
9
4
7
0
0
2
3
23
0
0
1
6
a+9a+8a+7a+6a+5a+4a+3a+2a+1a
598342731236
32 jia
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تمرین
ستونيصورتبهراصفرغیرعناصراگر.هستندصفربرابرآناصليقطرپايینعناصرکهاستمربعيماتريسمثلثيباالماتريس-1.کنیدمشخصراحافظهدرماتريساينjستونوiسطردرواقععنصرذخیرهمحلکنیم،ذخیرهحافظهدر
تصوربهراصفرغیرعناصراگر.هستندصفربرابرآناصليقطربااليعناصرکهاستمربعيماتريسمثلثيپايینماتريس-2مشخصراحافظهدرماتريساينjستونوiسطردرواقععنصرذخیرهمحلکنیم،ذخیرهحافظهدراصليقطرازشروعباقطري.کنید
ربرابعناصرسايرآن،پايینقطردووآنبااليقطردوواصليقطرعناصرجزبهکهاستمربعيماتريسقطريپنجماتريس-3اينjستونوiسطردرواقععنصرذخیرهمحلنمايیم،ذخیرهحافظهدرسطريصورتبهراصفرغیرعناصراگر.باشندميصفر
.کنیدمشخصراحافظهدرماتريس
21
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
22
این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»
.تهیه شده است
.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به
faradars.org/fvds9402
فرادرس
FaraDars.org