1 / 61

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. بردارها و ماتريس ها ساختمان داده ها http://www.cise.ufl.edu/~sahni/cop3530برگرفته از :

  2. ليست خطي • مجموعه پويا ساختاري براي نگهداري چندين شي هم نوع است • ليست خطي براي نگهداري مجموعه هاي پوياي تك بعدي استفاده مي شود ( بردارها،...) • class Linear List { • int list-size • Object Type Members[list-size] //Operations AddNewMember (Object Type m) ; RemoveMember(int n) ; }

  3. نمايش ليست خطي با آرايه 0 1 2 3 4 5 6 ليست با آرايه يك بعدي مانند elements نشان داده مي شود: a b c d e L = (a, b, c, d, e) عضو i ام آرايه در محل elements[i] قرار مي گيرد

  4. نگاشت راست به چپ e d c b a

  5. نگاشت يك در ميان a b c d e

  6. نگاشت چرخشي d e a b c

  7. نمايش معمول a b c d e 0 1 2 3 4 5 6 عضو i ام آرايه در محل elements[i] قرار مي گيرد از متغير size‌براي نگهداري تعداد اعضاي ليست استفاده مي شود size = 5

  8. Add/Remove An Element size = 5 a b c d e size = 6 a g b c d e add(1,g)

  9. پياده سازي ليست • نوع اعضاي ليست در طراحي كلي، معلوم نيست • در جاوا هر كلاسي از كلاس Object ارث مي برد • اعضاي ليست را از نوع Object ‌تعريف كنيد • در اين صورت نوع داده هاي اوليه ( int, char, float ,…) را نمي توان در ليست قرار داد • Wrapper Classes و کاربرد آنها

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

  11. افزودن طول آرايه a b c d e f طول اين آرايه 6 است ابتدا آرايه بزرگي مي سازيم newArray = new Object[15];

  12. افزودن طول آرايه a b c d e f a b c d e f سپس اعضاي آرايه اول را در آن كپي مي كنيم

  13. افزودن طول آرايه element[0] a b c d e f در نهايت نام آرايه را تعويض مي كنيم element = newArray; element.length = 15

  14. افزودن طول آرايه، پياده سازي جاوا // create a new array of proper length and data type Object [] 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;

  15. طول آرايه جديد چقدر بايد باشد؟ حداقل يكي بيشتر از آرايه فعلي! هزينه افزايش طول آرايه برابر است با theta(M) ‌ كه در آن M طول افزوده شده است هزينه n بار افزايش طول يك آرايه خالي از مرتبه theta(n2) است

  16. حافظه مورد نياز a b c d e f element[6] newArray = new char[7]; space needed = 2 * newLength – 1

  17. طول جديد دوبرابر طول قبلي a b c d e f a b c d e f Double the array length. newArray = new char[12]; هزينه افزودن n عضو جديد از مرتبه theta(n) ‌است حافظه مورد نياز=1.5 * طول جديد = 3* طول قبلي

  18. طول آرايه جديد چقدر بايد باشد؟ اگر طول جديد مضربي از طول فعلي باشد: new length = c * old length افزودن n عضو هزينه اي از مرتبه Theta(n)خواهد داشت اگر طول جديد طول فعلي + مقدار ثابتي باشد: new length = c + old length افزودن n عضو هزينه اي از مرتبه Theta(n2)خواهد داشت

  19. طول آرايه جديد چقدر بايد باشد؟ اگر طول جديد مضربي از طول فعلي باشد: new length = c * old length حافظه مورد نياز برابر است با: (1+c) * (old length) اگر طول جديد برابر طول فعلي + مقدار ثابتي باشد، حافظه مورد نياز برابر است با: (old length) + (old length+ c) = 2 * (old length) + c space.

  20. مديريت طول ليست در جاوا java.util.Vector … array doubling java.util.ArrayList … c = 1.5

  21. پياده سازي آرايه هاي يك بعدي در Java, C, C++ • Memory start • 1-dimensional array x = [a, b, c, d] • map into contiguous memory locations a b c d • location(x[i]) = start + i

  22. حافظه مورد نياز براي نگهداري اطلاعات جنبي Overhead • Memory a b c d start space overhead = 4 bytes for start + 4 bytes for x.length = 8 bytes

  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]

  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

  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

  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

  27. پياده سازي آرايه هاي دو بعدي در Java, C, C++ x[] a b c d e f g h i j k l x.length = 3 x[0].length = x[1].length = x[2].length = 4

  28. حافظه جنبي مورد نياز: x[] a b c d e f g h i j k l space overhead = overhead for 4 1D arrays = 4 * 8 bytes = 32 bytes = (number of rows + 1) x 8 bytes

  29. پياده سازي آرايه هاي دو بعدي در Java, C, C++ x[] a b c d e f g h i j k l • آرايه اي از آرايه ها • قطعاتي از حافظه به طول هاي 3و4و4و4 مورد نياز است • يك قطه پيوسته براي نگهداري آرايه اصلي و سه قطعه پيوسته براي نگهداري سطرها مورد نياز است

  30. نگاشت سطري Row-Major Mapping مثال:آرايه 3 4 x: 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 مشكل اين نگاشت:‌بلوك پيوسته بزرگي از حافظه مورد نياز است

  31. يافتن x[i][j] فرض كنيد x‌ داراي r سطر و c‌ستون است هر سطر c عضو دارد قبل از سطر i به تعداد i‌سطر وجود دارند(شروع از صفر) بنابراين x[i][j]به ic + j‌ در آرايه 1 بعدي نگاشت مي شود 0 c 2c 3c ic row 0 row 1 row 2 … row i

  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

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

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

  35. معايب استفاده از آرايه دو بعدي براي نمايش ماتريس شروع انديس آرايه از صفر آرايه هاي جاوا از اعمال ويژه ماتريس ها مانند جمع ، ضرب و ترانهاده كردن پشتيباني نمي كنند لازم است ساختار داده ويژه اي براي نمايش ماتريس تعريف شود

  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

  37. ماتريس پايين مثلثي ماتريس پايين مثلثي: ماتريس مربعي كه غير از اعضاي قطر اصلي و زير آن بقيه اعضا صفر هستند: 1 0 0 0 2 3 0 0 4 5 6 0 7 8 9 10 • تعداد اعضاي غير صفر ماتريس پايين مثلثي :1 + 2 + … + n = n(n+1)/2. • پياده سازي: آرايه يك بعدي از اين اعضا

  38. پياده سازي با آرايه اي از آرايه ها x[] 1 2 3 4 5 6 7 8 9 l0 آرايه دوبعدي نامنظم: آرايه هايي با طول هاي مختلف براي نگهداري اعضا

  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;

  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

  41. يافتن عضو [i][j] ترتيب: : row 1, row 2, row 3, … قبل از سطر i سطرهاي 1, 2, …, i-1 قرار دارند طول سطر i برابر i. است تعداد اعضايي كه قبل از سطرi قرار دارند: 1 + 2 + 3 + … + i-1 = i(i-1)/2 پس عضو (i,j) در مكان i(i-1)/2 + j -1 آرايه 1 بعدي قرار دارد. … row i r 1 r2 r3 0 1 3 6

  42. ماتريس خلوت Sparse Matrices ماتريس خلوت:‌اغلب اعضا صفرند ماتريس متراكم: اعضاي معدودي صفرند sparse … many elements are zero dense … few elements are zero مثال : ماتريس هاي قطري، ماتريس هاي خلوتي هستند مي توان از آرايه يك بعدي براي نمايش آنها استفاده كرد اين نوع ماتريس هاي خلوت، به ماتريس هاي ساختاريافته معروفند

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

  44. ماتريس خلوت بدون ساختار معلوم ماتريس صفحات وب:. صفحات از 1 تا n شماره گذاري شده اند تعداد لينكها از صفحه i‌به صفحه web(i,j)= j آناليز وب. authority page … page that has many links to it hub page … links to many authority pages

  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 عضو غير صفر وجود دارد فضاي مورد نياز براي نگهداري اعضاي غير صفر برابر است با:20 billion x 4 bytes = 80 billion bytes (80 GB)

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

  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

  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

  49. نمايش با زنجيره اي از ركوردها ساختار هر ركورد row col value next

  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 1 5 2 3 2 4 4 2 4 3 3 4 5 7 2 6 null firstNode

More Related