61
س ها ي ر ت و مارها ردا ت ها داده مان ت خ سا: // . . . / / 3530 http www cise ufl edu ~sahni cop ار ه" ت ف ر گ ر ت:

بردارها و ماتريس ها

Embed Size (px)

DESCRIPTION

بردارها و ماتريس ها. ساختمان داده ها. http://www.cise.ufl.edu/~sahni/cop3530 برگرفته از :. ليست خطي. مجموعه پويا ساختاري براي نگهداري چندين شي هم نوع است ليست خطي براي نگهداري مجموعه هاي پوياي تك بعدي استفاده مي شود ( بردارها،...) class Linear List { int list-size - PowerPoint PPT Presentation

Citation preview

Page 1: بردارها و ماتريس ها

ماتريسها و بردارها

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

http://www.cise.ufl.edu/~sahni/cop3530 از : برگرفته

Page 2: بردارها و ماتريس ها

ليستخطي

هم شي چندين نگهداري براي ساختاري پويا مجموعهاست نوع

تك پوياي هاي مجموعه نگهداري براي خطي ليست)... بردارها، ) شود مي استفاده بعدي

class Linear List {– int list-size– Object Type Members[list-size]

//OperationsAddNewMember )Object Type m( ; RemoveMember)int n( ;

}

Page 3: بردارها و ماتريس ها

0 1 2 3 4 5 6

آرايه با خطي نمايشليست

مانند بعدي يك آرايه با داده elementsليست نشان: شود مي

a b c d e

L = (a, b, c, d, e)

محل iعضو در آرايه قرار elements[i]امگيرد مي

Page 4: بردارها و ماتريس ها

چپ به راست نگاشت

abcde

Page 5: بردارها و ماتريس ها

ميان در يك نگاشت

a b c d e

Page 6: بردارها و ماتريس ها

چرخشي نگاشت

a b cd e

Page 7: بردارها و ماتريس ها

نمايشمعمول

محل iعضو در آرايه گيرد elements[i]ام مي قرارمتغير ليست sizeاز اعضاي تعداد نگهداري براي

شود مي استفاده

0 1 2 3 4 5 6

a b c d e

size = 5

Page 8: بردارها و ماتريس ها

Add/Remove An Element

a b c d e

size = 5

a g b c d e

size = 6

add(1,g)

Page 9: بردارها و ماتريس ها

ليست سازي پياده

نيست معلوم كلي، طراحي در ليست اعضاي نوع كالس از كالسي هر جاوا برد Objectدر مي ارث نوع از را ليست كنيد Objectاعضاي تعريف ( اوليه هاي داده نوع صورت اين ,int, char, floatدر

داد( … قرار ليست در توان نمي را–Wrapper Classes آنها کاربرد و

Page 10: بردارها و ماتريس ها

ليست اندازه مديريت

نداريم خبر آن اعضاي قطعي تعداد از ليست ساختن هنگام ،عضو تعداد هر براي كه بسازيم بزرگ را ليست آنقدر بايد

باشد داشته گنجايش

Page 11: بردارها و ماتريس ها

آرايه طول افزودن

آرايه اين است 6طول

a b c d e f

newArray = new Object[15];

سازيم مي بزرگي آرايه ابتدا

Page 12: بردارها و ماتريس ها

آرايه طول افزودن

كنيم مي كپي آن در را اول آرايه اعضاي سپس

a b c d e f

a b c d e f

Page 13: بردارها و ماتريس ها

آرايه طول افزودن

كنيم مي تعويض را آرايه نام نهايت درelement = newArray;

element.length = 15

a b c d e f

element[0]

Page 14: بردارها و ماتريس ها

سازي پياده آرايه، طول افزودنجاوا

// create a new array of proper length and data typeObject [] newArray = new Object [newLength];

// copy all elements from old array into new one System.arraycopy(element, 0, newArray, 0,

element.length);

// rename array element = newArray;

Page 15: بردارها و ماتريس ها

باشد؟ بايد چقدر جديد آرايه طول

! فعلي آرايه از بيشتر يكي حداقل

با است برابر آرايه افزايشطول كه )theta)Mهزينهآن است Mدر شده افزوده طول

مرتبه nهزينه از خالي آرايه يك افزايشطول بارtheta)n2( است

Page 16: بردارها و ماتريس ها

نياز مورد حافظه

newArray = new char[7];

space needed = 2 * newLength – 1

element[6]a b c d e f

Page 17: بردارها و ماتريس ها

قبلي طول دوبرابر جديد طول

Double the array length.

a b c d e f

newArray = new char[12];

a b c d e f

افزودن مرتبه n هزينه از جديد theta(n)عضواست

نياز مورد جديد * = 1.5 = حافظه طول* 3طولقبلي

Page 18: بردارها و ماتريس ها

باشد؟ بايد چقدر جديد آرايه طول

: باشد فعلي طول از مضربي جديد طول اگر new length = c * old length

مرتبه nافزودن از اي هزينه خواهد )Theta)nعضوداشت

: باشد + ثابتي مقدار فعلي طول جديد طول اگر new length = c + old length

مرتبه nافزودن از اي هزينه خواهد )Theta)n2عضوداشت

Page 19: بردارها و ماتريس ها

باشد؟ بايد چقدر جديد آرايه طول

ثابتي + مقدار فعلي طول برابر جديد طول اگر: با است برابر نياز مورد حافظه باشد،

(old length) + (old length + c) = 2 * (old length) + c space.

: باشد فعلي طول از مضربي جديد طول اگر new length = c * old length

: با است برابر نياز مورد حافظه)1+c( * )old length(

Page 20: بردارها و ماتريس ها

جاوا در ليست مديريتطول

java.util.Vector … array doubling

java.util.ArrayList … c = 1.5

Page 21: بردارها و ماتريس ها

در بعدي يك هاي آرايه سازي ++Java, C, Cپياده

1-dimensional array x = [a, b, c, d] map into contiguous memory locations

Memory

a b c d

start

• location(x[i]) = start + i

Page 22: بردارها و ماتريس ها

جنبي اطالعات نگهداري براي نياز مورد حافظهOverhead

space overhead = 4 bytes for start

+ 4 bytes for x.length

= 8 bytes

Memory

a b c d

start

Page 23: بردارها و ماتريس ها

بعدي دو هاي آرايه

بعدي دو آرايه تعريفint [][]a = new int[3][4];

may be shown as a table

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

Page 24: بردارها و ماتريس ها

بعدي دو آرايه سطرهاي

a[0][0] a[0][1] a[0][2] a[0][3] row 0

a[1][0] a[1][1] a[1][2] a[1][3] row 1

a[2][0] a[2][1] a[2][2] a[2][3] row 2

Page 25: بردارها و ماتريس ها

بعدي دو آرايه هاي ستون

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

column 0 column 1 column 2 column 3

Page 26: بردارها و ماتريس ها

در بعدي دو هاي آرايه سازي ++Java, C, Cپياده

است سطري هاي آرايه از آرايه بعدي، دو آرايه x = [row0, row1, row 2] row 0 = [a,b, c, d] row 1 = [e, f, g, h] row 2 = [i, j, k, l]

2-dimensional array x

a, b, c, d

e, f, g, h

i, j, k, l

Page 27: بردارها و ماتريس ها

در بعدي دو هاي آرايه سازي ++Java, C, Cپياده

x.length = 3x[0].length = x[1].length = x[2].length = 4

a b c d

e f g h

i j k l

x[]

Page 28: بردارها و ماتريس ها

: نياز مورد جنبي حافظه

space overhead = overhead for 4 1D arrays = 4 * 8 bytes = 32 bytes = )number of rows + 1( x 8 bytes

a b c d

e f g h

i j k l

x[]

Page 29: بردارها و ماتريس ها

در بعدي دو هاي آرايه سازي ++Java, C, Cپياده

ها آرايه از اي آرايه هاي طول به حافظه از است 4و4و4و3قطعاتي نياز مورد براي پيوسته قطعه سه و اصلي آرايه نگهداري براي پيوسته قطه يك

است نياز مورد سطرها نگهداري

a b c d

e f g h

i j k l

x[]

Page 30: بردارها و ماتريس ها

Row-Major Mappingنگاشتسطري

:آرايه :x 4 3مثالa b c d

e f g h

i j k l شود مي توليد دوبعدي آرايه از خطي آرايه و راست به چپ از بعدي دو آرايه سطرهاي

گيرند مي قرار آرايه اين در پايين به باال از : بعدي يك y[] = {a, b, c, d, e, f, g, h, i, j, k, l} آرايه

row 0 row 1 row 2 … row i

اين مشكلنگاشت:

پيوسته بلوكاز بزرگي

مورد حافظهاست نياز

Page 31: بردارها و ماتريس ها

x[i][j] يافتن

كنيد و rداراي xفرض ستون cسطراست

سطر دارد cهر عضوسطر – از تعداد iقبل وجود iبه سطر

) صفر) از شروع دارند

بنابراين x[i][j] بهic + j آرايه 1درشود مي نگاشت بعدي

row 0 row 1 row 2 … row i

0 c 2c 3c ic

Page 32: بردارها و ماتريس ها

Space Overhead

4 bytes for start of 1D array +

4 bytes for length of 1D array +

4 bytes for c )number of columns(

= 12 bytes

)number of rows = length /c(

row 0 row 1 row 2 … row i

Page 33: بردارها و ماتريس ها

Column-Major Mapping

a b c d

e f g h

i j k l به چپ از ستون به ستون ، بعدي دو آرايه اعضاي

مي قرار بعدي يك آرايه در پايين به باال از و راستگيرند

y = {a, e, i, b, f, j, c, g, k, d, h, l} دارد را سطري نگاشت مشكل

Page 34: بردارها و ماتريس ها

Matrixماتريس

وستون سطر كه اعضاست از جدولي ماتريسشاملاز. وستون انديسسطر شود 1دارد مي شروع

a b c d row 1

e f g h row 2

i j k l row 3 از x)i,j( بجاي x[i][j]. شود مي استفاده ماتريس نمايش براي بعدي دو آرايه از توان مي

كرد استفاده

Page 35: بردارها و ماتريس ها

براي بعدي دو آرايه از استفاده معايبنمايشماتريس

صفر از آرايه انديس شروع ، جمع مانند ها ماتريس ويژه اعمال از جاوا هاي آرايه

كنند نمي پشتيباني كردن ترانهاده و ضرب

ماتريس نمايش براي اي ويژه داده ساختار است الزمشود تعريف

Page 36: بردارها و ماتريس ها

ماتريسقطري

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

• x(i,j) is on diagonal iff i = j

• number of diagonal elements in an n x n matrix is n

• non diagonal elements are zero

• store diagonal only vs n2 whole

كه است مربعي ماتريسآن اصلي قطر غير اعضاي

باشند صفر

Page 37: بردارها و ماتريس ها

مثلثي پايين ماتريس

: مثلثي پايين ماتريسغير كه مربعي ماتريسو اصلي قطر اعضاي ازصفر اعضا بقيه آن زير

هستند:

مثلثي :• پايين ماتريس صفر غير اعضاي تعداد1 + 2 + … + n = n(n+1)/2.

: اعضا اين از بعدي يك آرايه سازي پياده

1 0 0 0

2 3 0 0

4 5 6 0

7 8 9 10

Page 38: بردارها و ماتريس ها

ها آرايه از اي آرايه با سازي پياده

: براي مختلف هاي طول با هايي آرايه نامنظم دوبعدي آرايهاعضا نگهداري

1

2 3

4 5 6

x[]

7 8 9 l0

Page 39: بردارها و ماتريس ها

جاوا در نامنظم هاي آرايه توليد

// declare a two-dimensional array variable

// and allocate the desired number of rows

int [][] irregularArray = new int [numberOfRows][];

// now allocate space for the elements in each row

for )int i = 0; i < numberOfRows; i++(

irregularArray[i] = new int [size[i]];

// use the array like any regular array

irregularArray[2][3] = 5;

irregularArray[4][6] = irregularArray[2][3] + 2;

irregularArray[1][1] += 3;

Page 40: بردارها و ماتريس ها

بعدي يك آرايه يك از استفاده

شود مي استفاده اعضا چيدن براي روشسطري ازشوند مي حذف صفر اعضاي ولي

1 0 0 0

2 3 0 0

4 5 6 0

7 8 9 10

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Page 41: بردارها و ماتريس ها

عضو ]i][j [يافتن

:ترتيب :row 1, row 2, row 3… , سطر از دارند i-1, …, 2, 1 سطرهاي i قبل قرار سطر است .i برابر i طول سطر از قبل كه اعضايي : i تعداد دارند قرار

1 + 2 + 3 + … + i-1 = i)i-1(/2

پسعضو( i,j ) مكان بعدي 1آرايه i)i-1(/2 + j -1 دردارد .قرار

r 1 r2 r3 … row i

0 1 3 6

Page 42: بردارها و ماتريس ها

Sparse Matricesماتريسخلوت

: صفرند اعضا اغلب خلوت ماتريس : صفرند معدودي اعضاي متراكم ماتريس

sparse … many elements are zero

dense … few elements are zero

خلوتي : هاي ماتريس قطري، هاي ماتريس مثالهستند

استفاده آنها نمايش براي بعدي يك آرايه از توان ميكرد

هاي ماتريس به خلوت، هاي ماتريس نوع اينمعروفند ساختاريافته

Page 43: بردارها و ماتريس ها

معلوم ساختار بدون ماتريسخلوت

ها: پرواز جدول .مثال از اند nتا 1فرودگاهها شده گذاري شمارهflight)i,j( = اين بين مستقيم پروازهاي تعداد دهنده نشان

فرودگاههاست : مثال n = 1000اگرn x n array of list references => 4 million bytes پروازها واقعي تعداد .باشد 20,000اگر شود 20000حداكثر مي ذخيره ركورد

Page 44: بردارها و ماتريس ها

معلوم ساختار بدون ماتريسخلوت

: وب .ماتريسصفحاتاز اند n تا 1صفحات شده گذاري شماره

صفحه از لينكها صفحه iتعداد web)i,j( = jبه

وب .آناليزauthority page … page that has many links to it

hub page … links to many authority pages

Page 45: بردارها و ماتريس ها

وب ماتريسصفحات

n = 2 billion )and growing by 1 million a day( n x n array of ints => 16 * 1018 bytes )16 * 109

GB( به صفحه هر متوسط طور لينك 10به ديگر صفحه

دارد متوسط طور به آرايه سطر هر در غير 10پس عضو

دارد وجود صفر برابر صفر غير اعضاي نگهداري براي نياز مورد فضاي

: با billion x 4 bytes = 80 billion bytes )80 20 استGB(

Page 46: بردارها و ماتريس ها

ساختار بدون نمايشماتريسخلوت

: چينشسطري با بعدي يك آرايهتايي سه با صفر غير عضو ( row, column, value)هر

شود مي تعيينيا تايي سه هاي آرايه با توان مي را تايي سه اين

داد نشان ركورد يك يا پيوندي ليست

Page 47: بردارها و ماتريس ها

ليستخطي از استفاده نمايشبا

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

list =

row 1 1 2 2 4 4

column 3 5 3 4 2 3

value 3 4 5 7 2 6

Page 48: بردارها و ماتريس ها

ليستخطي از استفاده با نمايش

row 1 1 2 2 4 4

list = column 3 5 3 4 2 3

value 3 4 5 7 2 6

element 0 1 2 3 4 5

row 1 1 2 2 4 4

column 3 5 3 4 2 3

value 3 4 5 7 2 6

Page 49: بردارها و ماتريس ها

ركوردها از اي زنجيره با نمايش

ركورد هر ساختار

row col

nextvalue

Page 50: بردارها و ماتريس ها

زنجيره يك

row 1 1 2 2 4 4

list = column 3 5 3 4 2 3

value 3 4 5 7 2 6

1 3

3

1 5

4

2

5

2

7

4

2

4

6

3 4 3null

firstNode

2

Page 51: بردارها و ماتريس ها

جداگانه ليست يك در سطر هر

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

row1 = [(3, 3), (5,4)]

row2 = [(3,5), (4,7)]

row3 = []

row4 = [(2,2), (3,6)]

Page 52: بردارها و ماتريس ها

سطرها از اي زنجيره

ركورد هر ساختار

next

valuecol

Page 53: بردارها و ماتريس ها

سطرها زنجيره از اي آرايه

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

row[]

33

null

45

53

null

74

22

null

63

null

Page 54: بردارها و ماتريس ها

ستوني و سطري متعامد ليستهاي با نمايش

ركورد ساختار

row col

nextdown

value

Page 55: بردارها و ماتريس ها

ليستسطرها

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0null

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n

n

n

Page 56: بردارها و ماتريس ها

ها ستون ليست

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n

nn

Page 57: بردارها و ماتريس ها

Orthogonal Lists

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0null

row[]

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n n

n

nnn

Page 58: بردارها و ماتريس ها

نياز مورد حافظه

500 x 500 matrix with 1994 nonzero elements

2D array 500 x 500 x 4 = 1million bytes

Single Array List 3 x 1994 x 4 = 23,928 bytes

One Chain Per Row 23928 + 500 x 4 = 25,928

Page 59: بردارها و ماتريس ها

اجرا زمان

Matrix Transpose

500 x 500 matrix with 1994 nonzero elements

2D array 210 ms

Single Array List 6 ms

One Chain Per Row 12 ms

Page 60: بردارها و ماتريس ها

اجرا زمان

Matrix Addition.

500 x 500 matrices with 1994 and 999 nonzero elements

2D array 880 ms

Single Array List 18 ms

One Chain Per Row 29 ms

Page 61: بردارها و ماتريس ها

نمايشماتريسخلوت –تمرين

يكADT استفاده با خلوت هاي ماتريس نمايش برايآن در كه بنويسيد خطي هاي ليست غير از عضو هر

تايي سه با داده ( row, column, value)صفر نشان . شود مي

به نمايش نوع اين براي را ماتريس دو ضرب عملبنويسيد كد شبه صورت

: بفرستيد را -ds-math[يا ] ds-cs-sparse[تمرينsparse[