آموزش ساختمان داده ها - بخش سوم

22
هان داده ساختماfaradars.org/fvsd9402 مدرس: فرشید شیرافکن دانشجوی دکتری تهران نشگاه دا( سی ارشد کارشنا کارشناسی و: م افزار کامپیوتر نر( ) دکتری: نفورماتیک بیو ا) آرایه1 ﻓﺮادرسFaraDars.org

Upload: faradars

Post on 18-Aug-2015

15 views

Category:

Education


5 download

TRANSCRIPT

Page 1: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvsd9402

:مدرسفرشید شیرافکن

دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )

آرایه

1

فرادرس

FaraDars.org

Page 2: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

تعریف آرایه

2

انديسازآنعنصرهربهدسترسيبرايوشدهمعرفيناميکتحتکهاستنوعهمداده‌هايازمجموعه‌ايآرايه.مي‌شوداستفادهمشخصي

int a[10];

فرادرس

FaraDars.org

Page 3: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

آرایه دو بعدی

3

int balances[11][6]; فرادرس

FaraDars.org

Page 4: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

بعدی3آرایه

4

int c [3][4][5];

فرادرس

FaraDars.org

Page 5: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

نحوه‌ذخیره‌عناصر‌آرايه‌در‌حافظه

آرايهرعناصبهدسترسيسرعتشدنسريعموجبکهگیرندميقرارهمسرپشتصورتبهحافظهدرآرايهعناصرفضابايتwاندازهبهآرايهعنصرهروشودذخیرهحافظهآلفاآدرسدرآرايهاولعنصراينکهفرضبا.شودمي

هبآرايهعناصرکهشدهفرض.شودميمحاسبهزيرروابطکمکبهحافظهدرآرايهعنصرهرمحلنمايد،اشغال:استشدهذخیرهحافظهدرسطربهسطرصورت

5

wljlulijixloc )]()1()[(:]),[( 2221

wlkluljlululi

kjixloc

)]()1()()1()1()[(

:]),,[(

333233221

wliixloc )(:])[(

]..,..[ 2211 ululx

]..,..,..[ 332211 ulululx

]..[ ulx

فرادرس

FaraDars.org

Page 6: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 7: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

مثال

A[3][4]

7

588)]02(4)01[(10

3210

0

1

2

فرادرس

FaraDars.org

Page 8: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 9: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 10: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402 جستجوی دودویی

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

10

فرادرس

FaraDars.org

Page 11: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 12: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 13: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 14: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

جستجوي‌دودويي

:آرايهيکدردودوييجستجويروشبهعنصريکردنپیدابرايهامقايسهتعدادحداکثر10:عنصرهزاربا

14:عنصرهزاردهبا

17:عنصرهزارصدبا

20:عنصرمیلیونيکبا

.دهدمينشانراخودبیشترزياد،عناصرتعدادباآرايهدر،خطيجستجويبهدودوييجستجويبرتريبنابراين

14

highmid+1midmid-1low

…… فرادرس

FaraDars.org

Page 15: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 16: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 17: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

ماتريس‌

:ازعبارتندمعروفهايماتريساسپارسماتريس-1

(مثلثيباالومثلثيپايین)مثلثيماتريس-2

(...وقطريپنج،قطريسه)قطريماتريس-3

17

فرادرس

FaraDars.org

Page 18: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 19: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 20: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

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

Page 21: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

تمرین

ستونيصورتبهراصفرغیرعناصراگر.هستندصفربرابرآناصليقطرپايینعناصرکهاستمربعيماتريسمثلثيباالماتريس-1.کنیدمشخصراحافظهدرماتريساينjستونوiسطردرواقععنصرذخیرهمحلکنیم،ذخیرهحافظهدر

تصوربهراصفرغیرعناصراگر.هستندصفربرابرآناصليقطربااليعناصرکهاستمربعيماتريسمثلثيپايینماتريس-2مشخصراحافظهدرماتريساينjستونوiسطردرواقععنصرذخیرهمحلکنیم،ذخیرهحافظهدراصليقطرازشروعباقطري.کنید

ربرابعناصرسايرآن،پايینقطردووآنبااليقطردوواصليقطرعناصرجزبهکهاستمربعيماتريسقطريپنجماتريس-3اينjستونوiسطردرواقععنصرذخیرهمحلنمايیم،ذخیرهحافظهدرسطريصورتبهراصفرغیرعناصراگر.باشندميصفر

.کنیدمشخصراحافظهدرماتريس

21

فرادرس

FaraDars.org

Page 22: آموزش ساختمان داده ها - بخش سوم

ساختمان داده ها

faradars.org/fvds9402

22

این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»

.تهیه شده است

.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به

faradars.org/fvds9402

فرادرس

FaraDars.org