پرش به محتوا

داده ساختارهای فشرده

از ویکی‌پدیا، دانشنامهٔ آزاد

در علوم کامپیوتر ،داده ساختار فشرده داده ساختاری است که از فضایی استفاده می‌کند که به نظریه اطلاعات کران پایین نزدیک است؛ ولی (برخلاف دیگر نمایش‌های فشرده) هنوز برای عملیات‌ها کارایی دارد. مفهوم این داده ساختار اولین بار توسط جاکوبسون[۱] معرفی شد. با مفهوم رمز گذاری آرایه بیتی، درخت (بدون برچسب) و گراف مسطح. برخلاف الگوریتم فشرده‌سازی بی‌اتلاف داده‌ها، به‌طور کلی داده ساختار فشرده، این ویژگی را دارد که می‌توان بدون ناهم فشرده کردن داده‌ها از آن‌ها استفاده کرد.[۱][۲][۳]

فرض کنید که Z تعداد بیت‌های مورد نیاز برای برای ذخیرهٔ برخی داده‌ها است. نمایش آن به شرح زیر است:

  • داده ساختار ضمنی: بیت از فضا
  • داده ساختار فشرده: بیت از فضا
  • داده ساختار متراکم: بیت از فضا

برای مثال، یک داده ساختار بیت استفاده می‌کند برای ذخیرهٔ داده ساختار متراکم است، یا بیت برای داده ساختار فشرده است و بیت برای داده ساختار ضمنی است.

داده ساختار ضمنی، بر اساس جایشگت‌های مختلف ورودی می‌تواند کاهش بیاید. مثال شناخته شدهٔ آن هرم است.

درخت پیشوندی و آرایهٔ پیشوندی

[ویرایش]

در درخت پیشوندی می‌توانیم در زمان دلخواه که با طول رشته مناسب است، جستجو کنیم، و در مورد آرایهٔ پیشوندی نیز، در این داده ساختار به نقطه‌ای که شاخص اش به آن اشاره دارد بر می‌گردد. این دو داده ساختار بسیار کاربردی هستند مخصوصاً زمانی که فقط با یک کاربر در ارتباط اند یا فقط در موتور جستجو استفاده می‌شود.[۲]

اکنون مشکل ما آن است که آیا می‌توانیم داده ساختار درخت را در فضای قابل ملاحظهٔ کمتری نمایش دهیم؟

به‌طور مثال در درخت جستحوی دودویی:

  • اندازه: گره داخلی و برگ
  • عملکرد: بچه، پدر، سایز زیر درخت، داده‌های برگ‌ها

واضح است که برای هر گره درخت در حدود بیت حافظه نیاز است .(۱-پدر، ۲-گره راست، ۳-گره چپ، ۴-اندازه، ۵-مدیریت حافظه، ۶-مرجع)[۲]

به عنوان مثال درخت پیشوندی کامل در حدود ۵ یا ۶ برابر آرایهٔ پیشوندی فضا از حافظه را نیاز دارد. (به عنوان مثال فقط مراجع برگ‌ها را در نظر بگیرید)

فشردگی

[ویرایش]

درخت فشرده

[ویرایش]

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

عدد کاتالان = اوردر ریشهٔ جنگل یا درخت دودویی =

پس کران بالای آن در حدود بیت است.[۲]

برای درخت

[ویرایش]

در این روش برای نمایش درخت از علامت پرانتر استفاده می‌کنیم. به این صورت عمل می‌کنیم که برای هر گره ")" قرار می‌دهیم سپس زیر درخت، در آخر "(". در عمل در این روش هر گره ۲ بیت فضا از حافظه را به خود اختصاص می‌دهد.[۲]

به‌طور مثال برای شکل زیر رشته دودویی مقابل رشتهٔ آن است: " (((())())((())()())) "

برای هرم

[ویرایش]

اگر به هرم مانند یک درخت دودویی نگاه کنیم، و سپس به هر گره آن (گره معادل عدد یک) و یک عدد اضافه کنیم (معادل عدد صفر) سپس شروع به خواندن سطر به سطر آن کنیم[۲] (مطابق شکل زیر):

در نتیجه، یه طور مثال برای هرمی مانند شکل زیر، برداری مانند "۱۱۱۱۰۱۱۱۰۰۱۰۰۰۰۰۰" خواهیم داشت، که طول آن برابر خواهد بود و یعنی این مقدار بیت از حافظه را اشغال می‌کند.

پیشنهاد کلیدی جاکوبسون

[ویرایش]

جاکوبسون پیشنهادی برای عملیا بردارهای بیتی داشت. به این صورت که چند تعریف جدید را بیان کرد.[۲]

  • برای .

به عبارت دیگر تعداد عناصری که برابر هستند و تا قبل از موقعیت قرار دارند را، بازمی‌گرداند. در حال که موقعیت امین رخ داد را بازمی‌گرداند.[۲]

در نتیجه برای درخت دودویی داریم :

لغت‌نامه فشرده

[ویرایش]

لغت‌نامه نمایه ساز فشرده، رتبه لغت‌نامه نیز نامیده می‌شود . بر اساس تعدادی از تکنیک‌های نمایش فشرده، از جمله درخت دودویی، چندمجموعه و درخت پسوندی. مشکل اساسی ذخیره‌سازی زیر مجموعهٔ S از مجموعه جهانی ()، معمولاً با ارائه بیتی که اگر نمایش داده می‌شوند. لغت‌نامه‌های نمایه ساز، تابع‌هایی را پشتیبانی می‌کند، مانند نمایش دادن، حذف و اضافه کردن در موارد پویا.

یک نمایش ساده وجود دارد[۳] که از بیت از فضای حافظه ( برای بیت اصلی آرایه و برای ساختار کمکی) استفاده می‌کند و در زمان ثابت، و را پشتیبانی می‌کند. این از یک ایدهٔ مشابه که برای محدوده حداقل نمایش بوده‌است، استفاده می‌کند. این یک عدد ثابت از تابع بازگشتی است قبل از پایان زیر مسئله‌ای که اندازهٔ محدود دارد.

منابع

[ویرایش]
  1. ۱٫۰ ۱٫۱ Jacobson, G. J (1988). "Succinct static data structures". {{cite journal}}: Cite journal requires |journal= (help)
  2. ۲٫۰ ۲٫۱ ۲٫۲ ۲٫۳ ۲٫۴ ۲٫۵ ۲٫۶ ۲٫۷ الگو:Ian Munro
  3. ۳٫۰ ۳٫۱ Jacobson, G. (1989). "Space-efficient static trees and graphs" (PDF). Archived from the original (PDF) on 4 June 2016. Retrieved 28 June 2016. {{cite journal}}: Cite journal requires |journal= (help)