1 / 24

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

ساختمان داده ها. آرایه و رشته. مهدی ایل بیگی دانشگاه آزاد اسلامی دماوند پاییز 89. ADT (Abstract Data Type) نوع داده انتزاعی.

renate
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. ساختمان داده ها آرایه و رشته مهدی ایل بیگی دانشگاه آزاد اسلامی دماوند پاییز 89

  2. ADT (Abstract Data Type)نوع داده انتزاعی • وقتي دربرنامه اي به نوعي داده نياز باشد كه در آن زبان وجود ندارد،برنامه نويس بايد نوع مورد نظرش را ايجاد كند. بنابراين، بايد چگونگي ذخيره داده ها و عملياتي را مشخص كند كه بر روي آن داده ها عمل مي كنند. نوع داده اي را كه برنامه نويس ايجاد مي كند، نوع داده انتزاعي گويند. شکل فوق نمودار يك نوع داده انتزاعي را نشان مي دهد. مقادير داده اي كه در ADTذخيره مي شوند، در يك ديوار حلقوي مخفي شده اند. آجرهاي حول اين ديوار نشان مي دهند كه اين مقادير فقط از طريق عمليات هاي مربوط به ADT قابل دستيابي اند.

  3. ADT (Abstract Data Type)نوع داده انتزاعی • ADT يعني توصيف: • داده ها • عمليات روي داده ها • مثال: ADT مجموعه اعداد طبيعي N • داده ها: اعداد طبيعيn = 1,2,3,… • عمليات: • عضويت يک عدد در يک مجموعه • زير مجموعه • اعمال مختلف روي زير مجموعه ها • اشتراک، اجتماع ، تفاضل متقارن، Cardinality • در ADT نحوه نمايش داخلي داده بوسيله كامپيوتر، مطرح نمي شود.

  4. آرایه • آرايه ساده ترين ساختمان داده اي است كه در زبان C وجود دارد. ساده ترين شكل آن، آرايه يك بعدي است كه بردارنيز ناميده مي شود. آرايه يك بعدي، مجموعه مرتب و محدودي از عناصر همگن است. منظور از "محدود" اين است كه تعداد عناصر آرايه مشخص است. • آرايه يك بعدي كه نام ديگر آن بردار است، براي ذخيره مجموعه اي از عناصر همنوع به كار مي رود. عناصر آرايه يك بعدي در محل هاي متوالي حافظه ذخيره مي شوند. طول آرايه يك بعدي در هنگام اعلان بايد تعيين شود و در طول اجراي برنامه قابل تغيير نيست.

  5. آرايه به عنوان يك ADT • مجموعه داده ها (عناصر): • دنباله اي با طول ثابت از عناصر كه همگي از يك نوع هستند. • عملیات اصلی: • دستيابي مستقيم به هر عنصر آرايه، به طوري كه مقادير را مي توان از اين عنصر بازيابي يا در آن ذخيره كرد.

  6. پیاده سازی آرایه یک بعدی • آرايه هاي يك بعدي را به آساني مي توان پياده سازي كرد. دستور زير را در نظر بگيريد: int a[10]; • اين دستور 10محل متوالي حافظه را به آرایه ای با نام a، تخصيص مي دهد كه در هر محل مي توان يك مقدار صحيح را ذخيره كرد. • آدرس اولين محل، آدرس پايهنام دارد و با base(a) مشخص مي شود. اگر فرض كنيد هر مقدار صحيح چهار بايت از فضاي حافظه را اشغال مي كند، آنگاه اولين عنصر آرايه با شروع از آدرس base(a) در چهار بايت از حافظه ذخيره مي شود.

  7. پیاده سازی آرایه یک بعدی • به عنوان مثال عنصر a[1] با شروع از آدرس 4+ base(a) در چهار بايت ذخيره مي شود.

  8. آرایه یک بعدی نامرتب • جستجوی ترتیبی: برای یافتن یک عنصر در آرایه نامرتب، از ابتدای آرایه یک به یک عناصر را مورد بررسی قرار می دهیم. • مرتبه زمانی در بهترین حالت: O(1) • مرتبه زمانی در بدترین حالت: O(n) • درج یک عنصر: عنصر جدید در اولین خانه خالی در انتهای آرایه درج می شود. در نتیجه مرتبه زمانی درج O(1) خواهد بود. • حذف یک عنصر: ابتدا باید عنصر در آرایه با O(n) پیدا شود و سپس آخرین عنصر حافظه بر روی عنصر پیدا شده کپی می شود و خانه آخر نیز پاک می گردد.(اگر عنصر آخر باید حذف گردد به راحتی عنصر آخر را حذف می نماییم). پس مرتبه زمانی حذف یک عنصر از آرایه نامرتب برابر با O(n) خواهد شد.

  9. آرایه یک بعدی مرتب • جستجوی دودویی: برای یافتن یک عنصر در آرایه مرتب، اگر مقدار مورد جستجو با مقدار عنصر وسط آرایه برابر بود، کار جستجو تمام است، در غیر این صورت اگر مقدار مورد جستجو از عنصر وسط آرایه کوچکتر بود، ادامه جستجو را در نیمه اول آرایه ادامه می دهیم و در غیر این صورت جستجو را در نیمه دوم آرایه بترتیب فوق ادامه خواهیم داد. • مرتبه زمانی در بهترین حالت: O(1) • مرتبه زمانی در بدترین حالت: O(log n) • درج عنصر در آرایه مرتب: ابتدا باید مکان درج عنصر را با O(log n) بیابیم و سپس با O(n) عناصر آرایه را به راست Shift می دهیم تا جای عنصر مورد نظر خالی گردد و در نهایت عنصر را در این مکان درج می نماییم. پس مرتبه اجرایی درج عنصر در آرایه مرتب برابر با O(n) خواهد بود. • حذف عنصر از آرایه مرتب: برای حذف یک عنصر ابتدا باید عنصر مورد نظر را با O(log n) بیابیم و سپس عناصر بزرگتر از عنصر مورد نظر را با O(n) به چپ Shift می دهیم تا جای عنصر مورد نظر را پر کنند. پس مرتبه زمانی حذف از آرایه مرتب برابر با O(n) است.

  10. پیاده سازی الگوریتم جستجوی دودویی int BinarySearch(int x[], int a, int b, int item) { int mid; mid = (a + b) / 2; if (a <= b) { if (item < x[mid]) return(BinarySearch(x, a, mid-1, item)); else if (item > x[mid]) return(BinarySearch(x, mid+1, b, item)); else return (mid);  } else return (-1); }

  11. تحلیل مرتبه اجرایی جستجوی دودویی 1 , n = 0 T(n) = T (n / 2) + C , n >= 1 • با فرض n = 2k آنگاه k = log n. حال با استفاده از روش جایگذاری خواهیم داشت: T(n) = T(n/2) + c = T(n/22) + c + c … = T(n/2k) + k*c = T(1) + k*c =T(0)+(k+1)*c T(n) = 1 + (k+1)*c = 1 + (log n +1)*c = 1 + c*log n + c O(log n)

  12. آرایه های دوبعدی • تعریف آرایه های دو بعدی در C: Type Name[row_count][column_count]; • آرايه هاي دوبعدي مي توانند به صورت سطري ياستوني ذخيره شوند. در روش سطري، ابتداعناصر سطر اول، سپس عناصر سطردوم و غيره ذخيره مي شوند. در روش ستوني، ابتدا عناصر ستون اول، سپس عناصر ستون دوم و غيره ذخيره مي شوند. در C آرايه ها به صورت سطري ذخيره مي شوند.

  13. آرایه های دوبعدی • مثال: نحوه ذخیره آرایه دو بعدی .int a[3][5] نمایش منطقی آرایه نحوه ذخیره آرایه دو بعدی در حافظه بصورت سطری

  14. آرایه های دوبعدی • در آرایه int a[m][n]، براي رسيدن به اولين عنصر سطر iﭐم (يعني عنصر a[i][0]) بايد از i سطر كامل بگذريم كه هر سطر آن داراي n عنصر است. لذا آدرس عنصر سطر i برابر است با: = base(a) + i * n * sizeof(int) آدرس اولين عنصر سطر i • فاصله اولين عنصر سطر i تا ستون j برابر با j * sizeof(int) است. بنابراين آدرس عنصر a[i][j] به صورت زير خواهد بود: Address( a[i][j] ) = base(a) + i * n * sizeof(int) + j * sizeof(int) = base(a) + (i * n + j) * sizeof(int)

  15. ماتریس ها • یکی از کاربردهای آرایه های دوبعدی، نمایش ماتریس ها می باشد. چند نوع از ماتریس ها در زیر نام برده شده اند: • ماتریس قطری: ماتریسی مربعی است که تمامی عناصر آن صفر است بغیر از عناصر روی قطر اصلی ماتریس. این نوع ماتریس ها را در یک آرایه به طول قطر اصلی (تعداد سطرها یا ستون ها)، ذخیره می نماییم. • ماتریس بالا مثلثی: ماتريس مربعي كه غير از اعضاي قطر اصلي و زير آن، بقيه اعضا صفر هستند. • تعداد عناصر غیر صفر =n(n+1)/2 • نحوه ذخیره بصورت یک آرایه یک بعدی. • پس عضو (i, j) در اندیس (i(i-1)/2 + (j-1)) از آرايه یک بعدي قرار دارد. (نکته: اندیس آرایه ها در C از صفر شروع می شود) 1 0 0 0 2 3 0 0 4 5 6 0 7 8 9 10

  16. ماتریس های خلوت (Spars Matrixes) • ماتريسي كه تعداد زيادي از عناصر آن صفر باشند، ماتريسخلوت ناميده ميشود. پس ما تنها عناصر غیر صفر را ذخیره می نماییم. • انواع ماتریس های خلوت: • ماتریس های خلوت منظم: • ماتریس پایین/بالا مثلثی • ماتریس قطری یا k-قطری • ماتریس متقارن • ماتریس های خلوت نامنظم: • هر عنصر به صورت یک سه تای (سطر، ستون، مقدار)، ذخیره می شود. • در سطر اول تعداد سطرها، ستون ها و تعداد عناصر غیر صفر را ذخیره می نماییم.

  17. ماتریس خلوت نامنظم • اگر n عنصر غیر صفر وجود داشته باشد، نیاز به (n + 1) * 3 عنصر برای ذخیره سازی ماتریس نیازمندیم. ستایی اول برای ذخیره تعداد سطرها، ستون ها و عناصر غیر صفر استفاده می شود. • در شکل زیر یک ماتریس خلوت نا منظم و نحوه ذخیره سازی آن نمایش داده شده است.

  18. ماتریس سه-قطری • سطر اول و آخر دارای دو عنصر و بقیه سطرها همگی سه عنصر دارند و برای هر کدام از این عناصر یک ستایی (i, j, Value) برای ذخیره عنصر نیاز داریم. البته یک ستایی برای ذخیره تعداد سطرها، ستون ها و عناصر غیر صفر نیاز دازیم. • در شکل زیر یک ماتریس سه قطری نمایش داده شده است. • در نتیجه اگر n عنصر غیر صفر وجود داشته باشد، نیاز به (3n - 2 + 1) * 3 عنصر برای ذخیره سازی ماتریس داریم.

  19. الگوریتم ترانهاده کردن ماتریس خلوت نامنظم • همواره انديس سطرها در ماتريس ترانهاده بايد به طور صعودي مرتب باشد، درنتیجه مراحل الگوریتم به صورت زیر خواهد بود: • تعداد سطرها و ستون ها که در سطر اول آورده شده جابجا می نماییم. • در ستون دوم به دنبال عدد صفر گشته و در صورت وجود، جای سطر و ستون را در این موقعیت جابجا می نماییم. • به همین ترتیب در ستون دوم به دنبال اندیس های 1، 2، 3 و ...، می گردیم و در صورت وجود، سطرها و ستون ها را در این موقعیت ها جابجا می نماییم. نکته: اگر از هر کدام از اعداد چند مورد وجود داشت به دلیل اینکه از ابتدای ستون دوم به دنبال اعداد می گردیم و تا انتها پیش می رویم، با همان ترتیب جابجایی ها را انجام می دهیم.

  20. الگوریتم ترانهاده کردن ماتریس خلوت نامنظم • مثال: ترانهاده ماتریس خلوت زیر را بیابید. B = Bt=

  21. الگوریتم جمع کردن ماتریس خلوت نامنظم

  22. الگوریتم جمع کردن ماتریس خلوت نامنظم A5*4 = C5*4 = B5*4 =

  23. تمرین • اگر مقادیر ماتریس پایین مثلثی را در آرایه یک بعدی ذخیره نماییم، فرمولی برای بدست آوردن مکان ذخیره سازی عناصر ماتریس در آرایه بدست آورید. مثال: اگر a یک ماتریس پایین مثلثی با 4 سطر و 4 ستون باشد، عنصر a[3][3] در خانه ای با اندیس 7 (یعنی خانه شماره 8) از آرایه ذخیره می گردد. جواب: = ( (2(n + 1) – i) (i - 1) ) / 2 + (j - i) = n(i – 1) – (i (i - 1) / 2) + (j - 1)

  24. ?

More Related