آموزش ساختمان داده قسمت اول

1395/1/23 سعید ضیادید 13955

به نام خدا

سلام عرض میکنم خدمت همه ی شما

ضیادید هستم با اولین قسمت از آموزش ساختمان داده ها از سری آموزش برنامه نویسی در خدمت شما هستم

در این سری از آموزش ها ان شاءالله قصد داریم تا با مفهوم ساختمان داده ها و انواع اون آشنا بشیم

اول از همه تعریفی خواهیم داشت از یک ساختمان داده.

یک ساختمان داده ، ساختاری بر پایه ی یک مدل منطقی و ریاضی به منظور استفاده ی بهینه از داده ها هست .

ما چند نوع ساختمان داده داریم . انواع پرکاربرد ساختمان داده ها عبارت هستند از : ایستا - نیمه ایستا و پویا

منظور از ساختمان داده های ایستا ، ساختار هایی هستند که از فضای محدود و از پیش تعریف شده استفاده می کنند و چنین فضایی در طول اجرای یک برنامه ثابت هست

منظور از ساختمان داده های پویا هم اون ساختار هایی هستند که امکان تغییرات نا محدود و متناسب با داده هارو فراهم می کنند و این کار معمولا توسط اشاره گر ها صورت می گیره.

اشاره گر ها و آرایه ها از جمله مهمترین ساختار های داده ای ایستا هستند ..

پشته و صف هم جزء ساختمان های داده ای نیمه ایستا هستند..

لیست های پیوندی ، گراف و درخت هم جزء ساختمان های داده ای پویا به حساب میان ..

ما انشاءالله در جلسات آینده ،  این ساختمان های داده  ای رو  سعی می کنیم کامل توضیح بدیم ..

اما توی این جلسه میخوایم راجع به یک مبحث نسبتا پایه ای صحبت کنیم ..

ببیند دوستان .. این ساختمان های داده ای رو نمیشه به صورت کلی مقایسه کرد .. یعنی نمیتونیم بگیم به طور کلی کدوم ساختمان داده بهتره یا بدتره

بلکه در برخی برنامه ها بهتره از یکسری ساختمان ها و در برنامه های دیگه از ساختار های دیگه استفاده کنیم ..

این موضوع یعنی اینکه بتونیم تشخیص بدیم هر ساختار در چه برنامه هایی کارایی بهتری داره .. پس ما باید هم با نحوه ی کارکرد این ساختار ها و هم با روش حل مسائل و یا همون الگوریتم مسئله آشنا بشیم ..

در این جلسه میخوایم کمی راجع به الگوریتم حرف بزنیم و همونطور که عرض کردم در جلسات بعدی هم ان شاءالله تمام ساختار های داده ای و مسائل مربوط به اونها رو بررسی خواهیم کرد

برای یک الگوریتم تعاریف مختلفی بیان میشه .. ولی معمولا به روش حل یک مسئله به صورت قدم به قدم الگوریتم میگن .. یعنی مجموعه ی محدودی از دستور العمل ها که با دنبال کردن اونها هدف خاصی هم دنبال میشه (که اون هدف خاص ، حل مسئله ی مورد نظر هست !!)

الگوریتم ها معمولا مستقل از زبان برنامه نویسی هست و یک بحث بسیار مهم در علم کامپیوتر به حساب میاد .

ویژگی های یک الگوریتم هم عبارت هستند از :

1-داشتن آغاز و پایان

2- داشتن جزئیات دقیق و کافی در هر مرحله

3-داشتن ترتیب در مراحل

دستور العمل های یک الگوریتم هم میتونن محاسباتی ، انتسابی ، شرطی و خروجی باشند ..

مثلا الگوریتمی که دو عدد رو بگیره و تعیین کنه حاصل ضرب اونها از 20  بزرگتر هست یا خیر؟

جواب  :

1- شروع

2- دو عدد a و b را از ورودی دریافت کن

3- محاسبه کن a*b رو

4- آیا a*b>40 هست ؟ اگر بله برو به مرحله ی 7

5- "خیر" رو چاپ کن

6- به مرحله ی 8 برو

7- "بله " را چاپ کن

8- پایان

راه های مختلفی هم برای نمایش الگوریتم هست از جمله فلوچارت و شبه کد که معمولا در چنین مباحثی از شبه کد استفاده میشه ..

فلوچارت یک راه استاندارد هست برای نمایش الگوریتم ها و در اون هم باید از یک سری اشکال پایه و استاندار برای نمایش دستورالعمل ها استفاده کرد.

 

 

اما برای حل مسائل ممکن هست چند روش وجود داشته باشه .. و ما باید قادر باشیم تا حد امکان از الگوریتم های کارآمد تر استفاده کنیم . ملاک و معیار کارآمدی و کارایی یک الگوریتم هم معمولا دو چیز هست (مهمترین ها )

1- پیچیدگی فضا

2- پیچیدگی زمان

پیچیدگی فضا : مقدار حافظه ی مورد نیاز برای اجرای کامل یک برنامه

پیچیدگی زمان : مقدار زمانی از یک کامپیوتر که برای اجرای کامل یک برنامه نیاز هست .

معمولا پیچیدگی زمانی رو بیشتر بررسی میکنند البته این بدین معنی نیست که پیچیدگی فضا اصلا مهم نیست ..

پیچیدگی زمانی یک برنامه رو معمولا با یک تابع نشون میدن و ارزیابی می کنند که به اون تابع پیچیدگی زمانی الگوریتم میگن .. هر چه سرعت رشد تابع پیچیدگی پایین تر باشه ، معمولا الگوریتم از نظر زمانی کارآمد تر هست و بالعکس .

خب دوستان این جلسه مقدمه بود و به نظرم کافیه ..

ان شاءالله در جلسه ی بعدی به طور کامل درباره ی بحث پیچیدگی زمانی الگوریتم ها صحبت میکنیم و از جلسه ی سوم درباره ی ساختار های داده ای نام برده شده در این جلسه به بحث و بررسی خواهیم پرداخت ..

البته یک نکته ای رو اعلام میکنم و اون این هست که بسیاری از مباحث مربوط به ساختمان داده ها در بین زبان های برنامه نویسی مشترک هست و ما هم در این سری آموزش ها قصد داریم بیشتر روی مفاهیم تمرکز کنیم . اما در بعضی جاها که نیاز باشه مباحث کاربردی ساختار های داده ای رو بررسی کنیم ، در زبان ++C و در صورت امکان JAVA اینکارو انجام خواهیم داد

از توجه شما ممنونم .. خدانگهدار تا جلسه ی بعدی

کلمات کلیدی