در قسمت قبلی یک توضیح مختصری راجع به داده و ساختار داده به شما دادم و شما رو با یکی ساختار های داده به اسم آرایه آشنا کردم و اصطلاحات فنی مربوط به آن رو هم به شما گفتم.
در این قسمت میخوام بپردازم به عملیات هایی که روی یک ساختار داده انجام میشه پس با من همراه باشید.
برای اینکه performance یک ساختار داده رو بررسی کنیم - به عنوان مثال آرایه - ما نیاز داریم که تعامل های عادی کدمون رو با آن ساختار داده آنالیز کنیم.
بیشتر ساختار های داده برای چهار عمل ساده استفاده میشن:
در ادامه به بررسی تک تک آنها خواهم پرداخت.
ولی قبل از بررسی این عملیات ها یک نکته ی مهم باید گفته بشه!
یک سوال : ما چطور سرعت یک عملیات رو بررسی میکنیم ؟
یک نکته ی خیلی مهمی که وجود داره این هستش که :
وقتی که ما سرعت یک عملیات رو بررسی میکنیم ما به اینکه از لحاظ زمانی آن عملیات چقدر طول میکشد اشاره نداریم بلکه به تعداد قدم هایی ( steps ) که برای انجام آن عملیات طی میشه اشاره داریم
دلیل این کارمون هم این هست که فرضا یک قطعه کد در طول 5 ثانیه روی یک کامپیوتر میان رده اجرا شده ولی همان قطعه کد روی یک کامپیوتر قدیمی تر طی 20 ثانیه اجرا شده و بر روی یک ابرکامپیوتر طی صدم ثانیه اجرا شده.
اندازه گیری سرعت اجرای یک کد بر اساس زمان طی شده وابسته به سخت افزاری هست که روی آن اجرا میشه.
برای حل این مشکل ما میتونیم سرعت اجرای یک کد را بر اساس تعداد قدم های برداشته شده ( steps ) محاسبه کنیم.
فرضا عملیات یک برای اجرا شدن 5 قدم رو طی میکند و عملیات دو برای اجرا شدن 500 قدم رو طی میکند، در این صورت همیشه عملیات یک از عملیات دو روی هر کامپیوتری سریع تر هست .
با این دید بر میگردیم به بررسی عملیات ها.
این عملیات زمانی رخ میده که ما بخوایم یک مقدار رو از آرایه در موقعیت ( index ) مشخص بخوانیم.
به عنوان مثال ما میخوایم که مقدار موجود در موقعیت ( index ) 1 رو بخوانیم که برابر میشه با "bananas".
یک کامپیوتر همیشه عملیات خواندن از روی یک آرایه رو در یک قدم ( step ) انجام میده.
ولی چطور کامپیوتر این کار رو در یک قدم انجام میده؟!
حافظه ( memory ) یک کامپیوتر را میشه مثل یک مجموعه خیلی بزرگی از سلول ها در نظر گرفت، که بعضی هاشون پر و بعضی هاشون خالی هستن.
زمانی که برنامه در خودش یک آرایه رو میسازه کامپیوتر یک ردیف پشت سر همی از این سلول هارو برای آن آرایه اشغال میکنه.
به عنوان مثال برای یک آرایه ای که 5 عضو رو در خودش نگهداری میکنه کامپیوتر 5 سلول پشت سر هم و خالی رو برای آن آرایه اشغال میکنه و در دسترس برنامه قرار میده.
هر سلول موجود در حافظه کامپیوتر یک آدرس بخصوصی داره ( memory address ) که با یک عدد نشان داده میشه و آدرس هر سلول یک عدد از سلول قبلی بزرگ تره.
حالا دوباره آرایه موجود خودمون رو میبینیم :
اینکه کامپیوتر هر مقداری رو در موقعیت ( index ) مشخص میتونه در یک قدم ( step ) بخونه به دلیل های زیر هست.
1.یک کامپیوتر میتونه مستقیما وارد هر سلول با آدرس خاص خودش ( memory addres ) در یک قدم ( step ) بشه. ( مثلا در یک قدم میتونه وارد سلول با آدرس 1063 بشه و مقدارشو بخونه )
در اصل این امر مثل این هستش که به شما گفته بشه انگشت کوچک دست راستتون رو بالا بیارید!
ایا برای بالا آوردن این انگشت کل انگشتان دستتون رو میگردید!؟؟!
2.زمانی که کامپیوتر برای یک آرایه در حافظه ( memory ) فضا اشغال میکنه، همیشه آن آدرسی ( memory address ) که آرایه شروع شده رو میدونه
بنا به این دو دلیل کامپیوتر همیشه مقدار اولین عنصر آرایه رو در یک قدم ( step ) میخونه.
ولی اگر مقدار مورد نظر ما در وسط آرایه یا یک موقعیت ( index ) دیگه ای باشه چی؟؟
خب جواب این سوال خیلی سادست از اونجایی که کامپیوتر آدرس ( memory address ) اولین عنصر آرایه رو میدونه خیلی ساده با افزودن به عدد آن ادرس مقدار عنصر مورد نظر مارو میخونه.
فرض کنید که آرایه ما از ادرس ( memory address ) 1010 شروع شده باشه و ما بخوایم مقدار عنصر موجود در موقعیت ( index ) 3 رو بخونیم.
به دلیل اینکه خواندن از روی آرایه تنها در یک قدم انجام میشه پس این عملیات پرفورمنس ( performance ) بالایی دارد
پس به طور طبیعی عملیاتی که در یک قدم انجام شود بالاترین سرعت رو دارد.