مقاله امروز ما درمورد فشرده سازی فایل است که میتونه به شما کمک کنه تا حجم فایل های خودتون رو کاهش بدین و نهایتاً بتونین اونها رو خیلی راحت‌تر در فضای مجازی به اشتراک بذارین یا دانلود و ذخیرشون کنین!

فشرده سازی فایل برای کاهش اندازه یک یا چند فایل انجام میشه. وقتی که یک فایل یا گروهی از فایل ها فشرده میشن، “بایگانی” اغلب ۵۰ تا ۹۰ درصد فضای دیسک کمتری رو نسبت به فایل یا فایل های اصلی اشغال میکنه. انواع متداول فشرده سازی فایل شامل فشرده سازیZip ، Gzip ، RAR ، StuffIt و ۷z است. هر یک از این روش‌های فشرده سازی از یک الگوریتم منحصر به فرد برای فشرده سازی داده‌ها استفاده میکنن.

در این پست برای شما توضیح میدیم که این کار طبق چه الگویی انجام میشه و چه ابزارهایی برای کم کردن حجم فایل ها کاربر دارن، پس تا آخر با ما همراه باشین.

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

اگر بسیاری از برنامه‌ها و و فایل ها رو از اینترنت دانلود میکنین، احتمالاً قبلاً با فایل های ZIP مواجه شدین. این سیستم فشرده سازی به ویژه برای کابران وب اختراع بسیار مفیدی است، چون به شما امکان میده تعداد کلی بیت‌ها و بایت‌های فایل رو کاهش بدین. بنابراین میشه اون فایل رو از طریق اتصال به اینترنت با سرعت کم انتقال داد یا فضای کمتری رو روی دیسک اشغال کرد. وقتی که فایل رو دانلود کردین، کامپیوتر شما از WinZip یا Stuffit برای گسترش پرونده به حالت اولیه خودش استفاده میکنه.

درسته که هر الگوریتم فشرده سازی منحصر به فرد است، اما همه اونها به روشی مشابه کار میکنن. هدف اینه که داده‌های زائد در هر فایل رو با جایگزینی الگوهای رایج با متغیرهای کوچیک‌تر حذف کنین.

یک برنامه فشرده سازی فایل به جای این که اطلاعات رو بارها و بارها لیست کنه، اون اطلاعات رو یک بار لیست میکنه و هر زمان که در برنامه اصلی ظاهر میشن، دوباره به همون‌ ارجاع میشه.

به عنوان مثال، کلمات در یک سند متنی ساده ممکنه با شماره یا نوعی دیگر از شناسه‌‌های کوتاه جایگزین بشن. به عنوان مثال، کلمه «کامپیوتر» ممکن است با شماره ۵ جایگزین بشه، که در این صورت کلمه «کامپیوتر» فضای بسیار کمتری رو اشغال میکنه. اینجوری هر چی کلمه «کامپیوتر» بیشتر در سند متنی پیدا بشه، فشرده سازی موثرتر خواهد بود.

در حالی که فشرده سازی فایل های متنی خوب کار میکنه، فایل های باینری هم میتونن فشرده بشن. با قرار دادن الگوهای باینری تکرار شده، یک الگوریتم فشرده سازی میتونه اندازه فایل های باینری، مانند برنامه‌ها و تصاویر دیسک رو به اندازه قابل توجهی کاهش بده.

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

به عنوان مثال بیاین یه نوع اطلاعات که رو که همه ما با اون آشنا هستیم بررسی کنیم: کلمات.

جان اف کندی در یک مراسم افتتاحیه در سال ۱۹۶۱ این یه این جمله معروف اشاره کرد:

(ترجمه: نپرسید کشور شما چه کاری برای شما میتونه انجام بده، بپرسین خودتون چه کاری میتونین برای کشورتون انجام بدین)

این نقل قول از جان اف کندی ۱۷ کلمه داره که از ۶۱ حرف، ۱۶ فاصله، یک دَش و یک دوره تشکیل شده. اگر هر حرف، فاصله یا علائم نگارشی یک واحد حافظه رو اشغال کنه، حجم کلی فایل اون ۷۹ واحد است.

برای پایین آوردن اندازه این فایل، باید به فکر تعدیل نیرو باشیم 🙂

بلافاصله، متوجه میشیم:

  • “ask” دوبار ظاهر شده
  • “what” دوبار ظاهر شده
  • “your” دوبار ظاهر شده
  • “country” دوبار ظاهر شده
  • “can” دوبار ظاهر شده
  • “do” دوبار ظاهر شده
  • “for” دوبار ظاهر شده
  • “you” دوبار ظاهر شده

با نادیده گرفتن تفاوت بین حروف بزرگ و کوچک، تقریباً نیمی از عبارت اضافی است. نُه کلمه‌ (ask, not, what, your, country, can, do, for, you) تقریباً هر چیزی که ما برای کل این عبارت نیاز داریم رو بهمون میده. برای ساختن نیمه دوم عبارت، ما فقط به کلمات نیمه اول اشاره میکنیم و فضاها و علائم نگارشی رو پر میکنیم.

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

افزونگی و الگوریتم‌ها

از نحوه فشرده سازی و کم کردن حجم فایل ها خبر دارین؟ میدونین چطوری همچین کاری انجام میشه و با چه فلسفه‌ای پیش میره؟ بهتره ادامه مطلب رو بخونین:

اکثر برنامه‌های فشرده سازی از LZ adaptive dictionary-based algorithm برای کوچک کردن فایل ها استفاده میکنن “LZ” به Lempel and Ziv و  algorithm’s creators و “dictionary” به روش فهرست بندی داده ها اشاره داره.

بهتره بدونین که سیستم تنظیم فرهنگ لغت‌ها متفاوت است، اما میتونه به سادگی یک لیست شماره دار باشه. وقتی کلمات معروف جان اف کندی رو مرور می‌کنیم، کلماتی که تکرار میشن رو انتخاب میکنیم و اونها رو در فهرست شماره گذاری شده قرار میدیم. سپس به جای نوشتن کل کلمه، به راحتی شماره اون کلمه رو مینویسیم.

بنابراین اگر این فرهنگ لغت ماست:

  1. ask
  2. what
  3. your
  4. country
  5. can
  6. you
  7. for

جملع ما الان به این شکل میشه:

” ۱ not 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4 “

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

  • اما با این سیستم در واقع چقدر فضا دخیره کردیم؟

” ۱ not 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4 “

قطعاً کوتاه‌تر از “Ask not what your country can do for you; ask what you can do for your country;” است. اما یادتون باشه که ما باید فرهنگ لغت رو به همراه فایل ذخیره کنیم.

در یک طرح فشرده سازی فایل واقعی، کشف نیازهای مختلف فایل نسبتاً پیچیده است. اما برای اهداف ما، بیاین به این ایده برگردیم که هر کاراکتر و هر فضا یک واحد حافظه رو اشغال میکنه. قبلاً دیدیم که عبارت کامل ۷۹ واحد حافظه رو اشغال میکنه. جمله فشرده شده ما (که شامل فضاها هم میشه) ۳۷ واحد حافظه رو اشغال میکنه و فرهنگ لغت (کلمات و اعداد) نیز ۳۷ واحد حافظه رو اشغال میکنه. این به ما یک فایل با اندازه ۷۴ میده. بنابراین ما اندازه فایل رو خیلی کم نکردیم.

اما این فقط یک جمله است! میتونین تصور کنین که اگر فشرده سازی روی بقیه سخنان جان اف کندی اعمال بشه، چقدر میتونه موثر واقع بشه.

جستجوی الگوها

در مثال قبلی، کلمات تکراری رو انتخاب کردیم و در فرهنگ لغت قرار دادیم. از نظر ما این بارزترین روش نوشتن فرهنگ لغت است. اما یک برنامه فشرده سازی فایل اون رو کاملاً متفاوت میبینه: هیچ کلمه جداگونه‌ای نداره، فقط به دنبال الگوها است و برای کاهش هر چه بیشتر اندازه فایل، یا دقت انتخاب میکنه که کدوم الگو رو در فرهنگ لغت قرار بده. اگر از این منظر به عبارت نزدیک بشیم، در آخر با یک فرهنگ لغت کاملاً متفاوت روبرو میشیم.

اگر برنامه فشرده سازی فایل عبارت جان اف کندی رو اسکن کنه، اولین افزایشی که در اون مشاهده میشه فقط دو حرف است. در “ask not what your” فقط یک الگوی تکرار شده از حرف “t” وجود داره، در “not” و “what.” که به دنبال اون یک فاصله وجود داره– اگر برنامه فشرده سازی این مطلب رو در فرهنگ لغت بنویسه، هر بار که یک “t” با یک فاصله دنبال بشه، یک “۱” مینویسه.

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

مورد بعدی که ممکن است برنامه متوجه بشه “ou” است. که هم در “country” تکرار شده و هم در “your”. اگر این یک سند طولانی‌تر بود، نوشتن این الگو در فرهنگ لغت باعث صرفه جویی فضای زیاد تری میشد. “ou” ترکیب بسیار رایجی در زبان انگلیسی است. اما همونطور که برنامه فشرده سازی از طریق این جمله کار میکنه، به سرعت انتخاب بهتری برای ورودی فرهنگ لغت پیدا میکنه. نه تنها ترکیب “ou” تکرار شده، بلکه کلمات “you” و “country” هم تکرار شده. و درواقع هر دوی این کلمات به صورت یک عبارت هم در کنار هم تکرار شدن. در این حالت، این برنامه ورودی فرهنگ لغت رو برای “ou” با ورودی “your country”  بازنویسی میکنه.

عبارت “can do for” هم تکرار میشه. یک بار به دنبال اون “your” میاد، و یک بار به دنبال اون “you” میاد که به ما الگوی تکراری “can do for you” رو میده.

این امر به ما امکان میده ۱۵ حرف (به علاوه فاصله رو با ۱ مقدار عددی بنویسیم. در حالی که “your country”  فقط به ما اجازه میده ۱۳ کاراکتر (بافاصله) رو با ۱ مقدار عددی بنویسیم. بنابر این برنامه ورودی “your country” رو با فقط با “r country” بازنویسی میکنه و بعد یک ورودی جداگونه برای “can do for you” مینویسه.

پس در نهایت این برنامه به این صورت کار میکنه. تمام بیت‌های مکرر اطلاعات رو جمع میکنه و سپس محاسبه میکنه که کدوم الگوها رو باید در فرهنگ لغت بنویسه.

مهم نیست که از چه روش خاصی استفاده میکنین، این جستجوی عمیق به شما امکان میده فایل رو بسیار کارآمدتر از اون چیزی که می‌تونستین، فشرده کنین. با استفاده از الگوهایی که در بالا انتخاب کردیم و افزودن “__” برای فاصله‌ها، به این فرهنگ لغت بزرگ‌تر میرسیم:

  • ask__
  • what__
  • your__country
  • __can__do__for__you

و این جمله کوچیک‌تر:

“۱not__2345__–__12354”

این جمله در حال حاظر ۱۸ واحد حافظه رو اشغال میکنه و فرهنگ لغت ما ۴۱ واحد رو اشغال میکنه. بنابراین حجم کلی فایل رو از ۷۹ واحد به ۵۹ واحد فشرده کردیم! این فقط یک روش فشرده سازی عبارت است و لزوماً کارآمدترین اون نیست (ببینین اگه میتونین راه بهتری پیدا کنین).

این سیستم چطوره؟ خوبه؟ نسبت کاهش اندازه فایل به عوامل مختلفی از جمله:

  • نوع فایل
  • اندازه فایل
  • و طرح فشرده سازی فایل

بستگی داره. در بیشتر زبان‌های جهان حروف و کلمات خاصی اغلب با الگوی یکسان ظاهر میشن. به دلیل این میزان زیاد افزونگی، فایل‌های متنی به خوبی فشرده میشن. کاهش ۵۰ درصدی یا بیشتر برای یک فایل متنی با اندازه خوب معمول است. اکثر زبان‌های برنامه نویسی هم بسیار زائد هستن چون از مجموعه نسبتاً کوچیکی از دستورات استفاده میکنن که اغلب به صورت یکسان تنظیم میشن.

فایل‌ هایی که شامل اطلاعات منحصر به فرد زیادی مث گرافیک یا فایل های MP3 هستن، نمیتونن با این سیستم زیاد فشرده بشن، چون بسیاری از الگوها رو تکرار نمیکنن.

اگر یک پرونده الگوی تکراری زیاد داشته باشه، میزان کاهش معمولاً با اندازه پرونده افزایش پیدا میکنه. همچنین ممکن است در کار طولانی‌تر، الگوهای فراگیرتر ظاهر بشن و به ما امکان ایجاد یک فرهنگ لغت کارآمدتر رو بدن. این کارآیی  همچنین به الگوریتم خاصی که توسط برنامه فشرده سازی فایل استفاده میشه بستگی داره.

درآخر بهتره بدونین که معیارهای فشرده ‌سازی فایل یکسان و بدون تغییر نیستن. ممکن است با توجه به نوع فایل شما، نتیجه‌ای متفاوت از چیزی که ما درموردش صحبت کردیم دریافت کنین. اما در حالت کلی روش فشرده سازی فایل و کم کردن حجم اون به همین صورته اما خب ممکن است شما نتایج مختلفی رو به دست بیارین که همچین چیزی صددرصد به نوع فایل شما بستگی داره.