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

Post on 01-Jan-2016

49 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

ليستخطي

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

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

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

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

}

0 1 2 3 4 5 6

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

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

a b c d e

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

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

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

abcde

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

a b c d e

چرخشي نگاشت

a b cd e

نمايشمعمول

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

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

0 1 2 3 4 5 6

a b c d e

size = 5

Add/Remove An Element

a b c d e

size = 5

a g b c d e

size = 6

add(1,g)

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

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

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

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

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

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

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

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

a b c d e f

newArray = new Object[15];

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

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

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

a b c d e f

a b c d e f

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

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

element.length = 15

a b c d e f

element[0]

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

// 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;

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

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

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

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

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

newArray = new char[7];

space needed = 2 * newLength – 1

element[6]a b c d e f

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

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طولقبلي

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

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

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

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

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

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

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

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

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

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

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

java.util.Vector … array doubling

java.util.ArrayList … c = 1.5

در بعدي يك هاي آرايه سازي ++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

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

space overhead = 4 bytes for start

+ 4 bytes for x.length

= 8 bytes

Memory

a b c d

start

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

بعدي دو آرايه تعريف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]

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

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

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

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

در بعدي دو هاي آرايه سازي ++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

در بعدي دو هاي آرايه سازي ++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[]

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

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[]

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

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

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

a b c d

e f g h

i j k l

x[]

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

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

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

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

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

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

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} دارد را سطري نگاشت مشكل

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]. شود مي استفاده ماتريس نمايش براي بعدي دو آرايه از توان مي

كرد استفاده

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

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

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

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

ماتريسقطري

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

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

باشند صفر

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

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

هستند:

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

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

1 0 0 0

2 3 0 0

4 5 6 0

7 8 9 10

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

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

1

2 3

4 5 6

x[]

7 8 9 l0

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

// 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;

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

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

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

عضو ]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

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

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

sparse … many elements are zero

dense … few elements are zero

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

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

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

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

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

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

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

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

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

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

hub page … links to many authority pages

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

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(

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

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

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

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

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

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

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

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

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

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

row col

nextvalue

زنجيره يك

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

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

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)]

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

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

next

valuecol

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

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

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

ركورد ساختار

row col

nextdown

value

ليستسطرها

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

ها ستون ليست

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

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

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

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

اجرا زمان

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

اجرا زمان

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

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

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

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

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

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

top related