مهدی
کاربر فوقحرفهای
- ارسالها
- 1,112
- امتیاز
- 7,384
- نام مرکز سمپاد
- علامهحلی
- شهر
- تهران
- مدال المپیاد
- کامپیوتر
- دانشگاه
- دانشگاه تهران. :دی
- رشته دانشگاه
- آمار. :دی
ساختمان های داده ای،اجزای سازنده ی الگوریتم های رایانه ای هستند.طراحی یک الگوریتم همانند طراحی یک ساختمان است.اتاق های یک ساختمان باید به گونه ای در کنار هم قرار گیرند که برای کاربرد مورد نظر بیشترین کارایی را داشته باشند.برای این کار دانستن عملکرد،بهره وری،شکل و زیبایی،به تنهایی کافی نیست،بلکه به دانش کامل روش های ساختمان سازی نیازمندیم.ممکن است کارایی دلخواه ما قرار دادن اتاق در هوا،بین زمین و آسمان باشد،اما چنین کاری شدنی نیست یا ممکن است برخی ایده های شدنی،بسیار گران تمام شوند.به همین ترتیب طراحی یک الگوریتم باید بر مبنای درگ.کاملی از روش های ساختمان داده و هزینه ی هر یک از این روش ها باشد.[nb]برگرفته شده از کتاب طراحی الگوریتم ها[/nb]
در این تاپیک،یه روند آموزشی و پرسش و پاسخ در پیش میگیریم.
ابتدا چند توضیح درباره درباره ی ساختمان های داده ای پایه ای رو که از کتاب طراحی الگوریتم ها برگرفته شده اینجا میذارم بعد از تعاریف اولیه،درباره ی اهمیت ساختار داده ها در ساخت الگوریتم و به کار بردن اون ها در طراحی تعدادی الگوریتم مطالبی رو در اینجا میذارم،
هر سوالی یا مطلبی که به ذهنتون رسید میتونید اینجا بیان کنید.
عناصر
از «عنصر» در تمام کتاب(در اینجا،تاپیک ) به عنوان نامی کلی برای هر نوع نامشخص داده استفاده میکنیم.یک عنصر،ممکن است عددی صحیح،مجموعه ای از اعداد صحیح،پرونده ای متنی یا ساختمان داده ی دیگری باشد. این واژه را هنگامی که مبحث مورد نظر،مستقل از نوع داده باشد،به کار میبریم.
برای نمونه،الگوریتم های مرتب سازی را در نظر بگیرید. اگر گام هایی که الگوریتم برمیدارد،تنها مقایسهی عناصر یا جا به جا کردن آنها باشد؛ آنگاه میتوان از آن الگوریتم،هم برای مرتب سازی اعداد صحیح و هم برای مرتب سازی نام ها(یعنی رشته های کاراکتری) استفاده کرد.پیاده سازی این دو الگوریتم (یعنی برنامه ی آنها) احتمالا قدری متفاوت از یکدیگر است،اما هر دو از ایده های یکسانی بهره میبرند.
از آنجایی که ما بر ایده های طراحی الگوریتم(و نه پیاده سازی آنها) تمرکز میکنیم،پس چشم پوشی از نوع عنصر عاقلانه است.
تنها سه پیش فرض برای عناصر در نظر میگیرم:
1-میتوان عناصر را با هم مقایسه کرد
2-همه ی عناصر به مجموعه هایی به ترتیب کلی تعلق دارد و از هر دو عنصر نابرابر،یکی «کوچکتر» از دیگری است.تا هنگامی که با مجموعه های ترتیب ناپذیر(مانند اعداد مختلط) سرو کار نداریم،به تعریف دقیق رابطه ی «کوچکتری»نخواهیم پرداخت.
3-از یک عنصر میتوان نسخه برداری کرد(یعنی کپی گرفت)
آرایه ها
آرایه را میتوان سطری از عناصر هم نوع در نظر گرفت.اندازه یک آرایه،تعداد عناصر آن است.
اندازه آرایه باید ثابت باشد.از آنجا که اندازه ی آرایه ثابت است و عناصرش نیز هم نوع هستند،پس مقدار حافظه ی لازم برای ذخیره ی آن از پیش آشکار است.برای مثال اکر عناصر آرایه نام هایی 8 کاراکتری باشند و هر کاراکتر نیازمند یک بایت حافظه بوده، طول آرایه هم 100 باشد؛برای ذخیره آن به 800 بایت حافظه نیاز داریم. عناصر آرایه همواره پشت سر هم ذخیره میشوند.اگر اولین بایت یک آرایه در محل x از حافظه ذخیره شود،آنگاه محل ذخیره ی Kاُمین بایت آرایه خانه ی x+k-1 از حافظه خواهد بود.
پس به آسانی میتوان محل هر عنصر آرایه در حافظه را محاسبه مرد.در مثال پیش،اکر محل شروع آرایه 10000باشد،پنجاه و پنجمین نام از بایت چهارصد و سی و سوم آغاز میشود،
یعنی محل 10432از حافظه.(در این مثال،فرض بر این اساس که محل های حافظه را بایت به بایت میشماریم،اما اگر شمارش به صورت دیگری هم انجام شود،به آسانی میتوان محاسبات را تغییر داد و محل مورد نظر را به درستی پیدا کرد.)