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

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

    کار خوببه سایت">

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

    میزبانی شده در http://www.allbest.ru/

    متراکم سازی داده ها

    1. اطلاعات. انواع و خواص آن

    در ادبیات، می توان تعاریف زیادی از اصطلاح "اطلاعات" را پیدا کرد که منعکس کننده است رویکردهای مختلفبه تفسیر این مفهوم. فرهنگ لغتزبان روسی Ozhegova 2 تعریف از کلمه "اطلاعات" ارائه می دهد:

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

    پیام هایی که در مورد وضعیت امور، در مورد وضعیت چیزی اطلاع می دهند. (اطلاعات علمی- فنی و روزنامه، رسانه های گروهی - مطبوعات، رادیو، تلویزیون، سینما).

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

    اطلاعات دارای شخصیت دوگانه است: مواد - قابل انتقال، ذخیره و غیره. و نامشهود - با توجه به گوگرد انتقال، می توان آن را دوباره پر کرد. اطلاعات بدون آن نمی تواند وجود داشته باشد حامل مواد، وسیله انتقال آن در مکان و زمان است. خود جسم فیزیکی یا معادل انرژی آن می تواند به عنوان یک حامل به عنوان سیگنال های صدا، نور، الکتریکی و سایر سیگنال ها عمل کند.

    برای انجام این کار، در حال حاضر روش‌های زیادی برای ذخیره‌سازی اطلاعات در رسانه‌های خارجی (نسبت به مغز انسان) و انتقال آن در فواصل دور ابداع شده است.

    انواع اصلی اطلاعات در قالب ارائه، روش های رمزگذاری و ذخیره سازی آن، که دارد بالاترین ارزشبرای علوم کامپیوتر، این است:

    · گرافیکییا تصویری - اولین نوع که برای آن روشی برای ذخیره اطلاعات در مورد جهان اطراف به شکل نقاشی های سنگی و بعداً به صورت نقاشی، عکس، نمودار، نقاشی روی کاغذ، بوم، سنگ مرمر و سایر موادی که تصاویر را به تصویر می کشند، اجرا شد. از دنیای واقعی؛

    · صدا- دنیای اطراف ما مملو از صداها است و مشکل ذخیره و تکرار آنها با اختراع دستگاه های ضبط صدا در سال 1877 حل شد. تنوع آن اطلاعات موسیقی است - برای این نوع، روشی برای رمزگذاری با استفاده از کاراکترهای خاص اختراع شد که امکان ذخیره آن را به روشی مشابه فراهم می کند. اطلاعات گرافیکی;

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

    · عددی- اندازه گیری کمی اشیاء و خواص آنها در دنیای اطراف. با توسعه تجارت، اقتصاد و مبادله پول اهمیت ویژه ای پیدا کرد. به همین ترتیب اطلاعات متنیبرای نمایش آن، از روش کدگذاری با کاراکترهای ویژه - اعداد استفاده می شود، و سیستم های کدگذاری (اعداد) می توانند متفاوت باشند.

    · اطلاعات ویدیویی- راهی برای حفظ تصاویر "زنده" از دنیای اطراف ما که با اختراع سینما ظاهر شد.

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

    با ظهور رایانه ها (یا همانطور که برای اولین بار در کشور ما به آنها رایانه می گفتند - رایانه های الکترونیکی) وسیله ای برای پردازش اطلاعات عددی. با این حال، در آینده، به ویژه پس از استفاده گسترده از کامپیوترهای شخصی(PC)، کامپیوترها برای ذخیره، پردازش، انتقال و جستجوی اطلاعات متنی، عددی، بصری، صوتی و تصویری مورد استفاده قرار گرفتند. از زمان ظهور اولین رایانه های شخصی - رایانه های شخصی (دهه 80 قرن بیستم) - تا 80٪ از زمان کار آنها به کار با اطلاعات متنی اختصاص دارد.

    ذخیره سازی اطلاعات هنگام استفاده از رایانه انجام می شود دیسک های مغناطیسییا روبان، دیسک های لیزری(سی دی و دی وی دی)، دستگاه های حافظه ویژه غیر فرار (فلش مموری و ...). این روش ها به طور مداوم در حال بهبود هستند، دستگاه ها و حامل های اطلاعات جدید اختراع می شوند. پردازش اطلاعات (تولید، تبدیل، انتقال، ضبط در رسانه خارجی) توسط پردازنده کامپیوتر اجرا می شود. با کمک کامپیوتر می توان اطلاعات جدیدی از هر نوعی را ایجاد کرد و ذخیره کرد برنامه های ویژهدر رایانه ها و دستگاه های ورودی استفاده می شود.

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

    ویژگی های اطلاعاتی

    بسیاری از ویژگی های مختلف اطلاعات را می توان ذکر کرد. هر رشته علمی مواردی را که برای خود اهمیت بیشتری دارند در نظر می گیرد. از نظر علم کامپیوتر، ویژگی های زیر مهمترین هستند:

    1. عینیت و ذهنیت اطلاعات. اطلاعات عینی تر، اطلاعاتی در نظر گرفته می شود که در آن روش ها عنصر ذهنی کوچکتری را معرفی می کنند. در حین فرآیند اطلاعاتدرجه عینیت اطلاعات همیشه کاهش می یابد.

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

    3. قابلیت اطمینان اطلاعات. داده ها در لحظه ثبت سیگنال ها اتفاق می افتد، اما همه سیگنال ها "مفید" نیستند - همیشه سطحی از سیگنال های خارجی وجود دارد.

    5. در دسترس بودن اطلاعات.

    6. ارتباط.

    2. متراکم سازی داده ها

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

    بامتراکم سازی داده ها- روش رمزگذاری مجدد داده ها، به منظور کاهش حجم آنها انجام می شود. برای استفاده منطقی تر از وسایل ذخیره سازی و انتقال داده استفاده می شود. اگر روش‌های فشرده‌سازی اطلاعات برای اسناد تکمیل‌شده اعمال شود، اصطلاح «فشرده‌سازی داده» اغلب با عبارت «بایگانی داده» جایگزین می‌شود.

    فشرده سازی بر اساس حذف افزونگی اطلاعات موجود در داده های اصلی است. مثالی از افزونگی، تکرار قطعات در متن است (مثلاً کلمات زبان طبیعی یا ماشین). چنین افزونگی معمولاً با جایگزینی دنباله تکراری با یک مقدار کوتاهتر (کد) حذف می شود. نوع دیگری از افزونگی به این دلیل است که برخی از مقادیر در داده های فشرده بیشتر از سایرین رخ می دهند، در حالی که می توان داده های متداول را با کدهای کوتاه تر و موارد نادر را با کدهای طولانی تر جایگزین کرد (فشرده سازی احتمالی). فشرده سازی داده هایی که خاصیت افزونگی ندارند (به عنوان مثال، سیگنال تصادفییا نویز) بدون از دست دادن غیر ممکن است. همچنین معمولاً امکان فشرده سازی اطلاعات رمزگذاری شده وجود ندارد.

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

    2 روش اصلی برای فشرده سازی فایل های با فرمت ناشناخته وجود دارد.

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

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

    فشرده‌سازی می‌تواند بدون تلفات (زمانی که امکان بازیابی داده‌های اصلی بدون اعوجاج وجود دارد) یا با اتلاف (بازیابی با اعوجاج‌هایی که از نقطه نظر استفاده بیشتر از داده‌های بازیابی شده ناچیز هستند امکان پذیر است). فشرده سازی بدون تلفات معمولاً در پردازش استفاده می شود برنامه های کامپیوتریو داده ها، کمتر - برای کاهش حجم اطلاعات صدا، عکس و ویدئو. فشرده سازی Lossy برای کاهش حجم اطلاعات صوتی، عکس و ویدیو استفاده می شود، بسیار کارآمدتر از فشرده سازی بدون اتلاف است.

    3. نرم افزار فشرده سازی داده ها

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

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

    بنابراین، بایگانی می تواند مفید باشد:

    1) هنگام ذخیره کپی از فایل ها و دیسک های فلاپی، زیرا فلاپی دیسک از نظر اندازه محدود است.

    2) برای آزاد کردن فضای هارد دیسک؛

    3) هنگام انتقال اطلاعات از طریق شبکه.

    بایگانی اطلاعات، تغییر شکلی از اطلاعات است که در آن حجم آن کاهش نمی یابد، اما مقدار اطلاعات ثابت می ماند.

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

    میزان فشرده سازی اطلاعات به نوع فایل منبع، برنامه مورد استفاده و همچنین روش بسته بندی انتخاب شده بستگی دارد. بهترین فایل ها برای فشرده سازی اشیاء گرافیکی، فایل های متنی و فایل های داده، که نسبت فشرده سازی آنها می تواند به 5-40٪ برسد، فایل ها کمتر فشرده می شوند. برنامه های اجراییو ماژول های بوت -60-90٪.

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

    بایگانی WinRAR با محبوبیت آن , بدون شک، در مقام اول در روسیه، و یکی از اولین ها - در سراسر جهان است. آرشیو توسط Evgeny Roshal در سال 2003 ساخته شد. برنامه فراهم می کند تسلط کاملفایل ها در آرشیو، بازیابی آرشیوهای آسیب دیده، رمزگذاری، ایجاد آرشیوهای خود استخراج و چند جلدی.

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

    خود Zip - این الگوریتم آزادانه در ده ها برنامه استفاده می شود، با این حال، برای بسیاری از آنها کاربران ویندوزدقیقاً WinZip است برنامه استانداردبرای کار با آرشیو ابزارهای پردازش آرشیو داخلی WinZIP به شما امکان بسته بندی، مشاهده و استخراج فایل ها از فرمت های بایگانی پرکاربرد مانند ZIP، CAB، Microsoft Compress، GZIP، TAR و غیره را می دهد. WinZip بسیار ساده و آسان برای استفاده است.

    با این حال، استفاده از آرشیوهای جداگانه با خود همیشه توجیه پذیر نیست پوسته های گرافیکی. راحت ترین پوسته برای بایگانی ها معمول است مدیر فایلبه عنوان مثال Windows Commander که قابلیت مشاهده و بازکردن فایل های آرشیو ZTP, ARJ, RAR, TAR, GZ, CAB, ACE را دارد. با این حال، اکثر عملیات با فایل ها، از جمله بایگانی، در چنین مدیرانی انجام می شود.

    4. فشرده سازی داده های از دست رفته

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

    انواع فشرده سازی با اتلاف

    دو طرح اصلی فشرده سازی با تلفات وجود دارد:

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

    در کدک های پیش بینی، داده های قبلی و/یا بعدی برای پیش بینی فریم فعلی یک تصویر یا صدا استفاده می شود. خطای بین داده‌های پیش‌بینی‌شده و داده‌های واقعی، همراه با اطلاعات اضافی مورد نیاز برای تولید پیش‌بینی، سپس کوانتیزه و کدگذاری می‌شود.

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

    فشرده سازی Lossy در مقابل Lossless

    مزیت روش‌های فشرده‌سازی با اتلاف نسبت به روش‌های فشرده‌سازی بدون تلفات این است که روش‌های اولی به طور قابل‌توجهی از نسبت تراکم بهتر عمل می‌کنند و در عین حال الزامات را برآورده می‌کنند.

    تکنیک های فشرده سازی با اتلاف اغلب برای فشرده سازی صدا یا تصاویر استفاده می شود.

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

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

    داده‌های صوتی فشرده‌شده از دست رفته توسط دادگاه‌ها به عنوان مدرک مادی پذیرفته نمی‌شوند (و حتی مورد توجه قرار نمی‌گیرند) به این دلیل که اطلاعات فشرده، مصنوعات فشرده‌سازی را به دست می‌آورند و نویز طبیعی محیطی را که از آن ضبط شده است، از دست می‌دهند. در این رابطه، تعیین اینکه آیا ضبط واقعی است یا سنتز شده، غیرممکن است. بنابراین، ضبط های مهم توصیه می شود که با فرمت PCM انجام شوند یا از ضبط صوت استفاده کنید.

    عکس های ثبت شده در فرمت JPEG، می تواند توسط دادگاه پذیرفته شود (علیرغم اینکه داده ها تحت فشرده سازی با اتلاف قرار گرفته اند). اما در عین حال دوربینی که با آن ساخته شده اند یا جدول رندر رنگ مربوطه باید تهیه شود.

    روش های فشرده سازی داده های از دست رفته

    v فشرده سازی تصویر:

    کاهش عمق رنگ

    · روش جزء اصلی.

    · فشرده سازی فراکتال.

    v فشرده سازی ویدئو:

    فلش (همچنین از حرکت پشتیبانی می کند تصاویر JPEG);

    MPEG-1 قسمت 2;

    · MPEG-2 قسمت 2;

    · MPEG-4 قسمت 2;

    v فشرده سازی صدا:

    · MP3 - توسط مشخصات MPEG-1 تعریف شده است.

    Ogg Vorbis (قابل توجه به دلیل عدم وجود محدودیت های ثبت اختراع و موارد دیگر کیفیت بالا);

    · AAC، AAC+ - در چندین نسخه تعریف شده با مشخصات MPEG-2 و MPEG-4 وجود دارد، به عنوان مثال، در رایانه اپل استفاده می شود.

    eAAC+ فرمتی است که توسط سونی به عنوان جایگزینی برای AAC و AAC+ ارائه شده است.

    · WMA - دارایی مایکروسافت.

    از دست دادن بایگانی فشرده سازی اطلاعات

    5. فشرده سازی داده ها بدون تلفات

    فشرده سازی بدون اتلاف(انگلیسی: فشرده سازی داده های بدون تلفات) - روشی برای فشرده سازی اطلاعات، که با استفاده از آن می توان اطلاعات رمزگذاری شده را در یک بیت بازیابی کرد. در این حالت داده های اصلی به طور کامل از حالت فشرده بازیابی می شوند. این نوع فشرده سازی اساساً با فشرده سازی داده های با اتلاف متفاوت است. برای هر نوع اطلاعات دیجیتال، به عنوان یک قاعده، الگوریتم های فشرده سازی بدون تلفات بهینه وجود دارد.

    فشرده سازی اطلاعات بدون تلفات در بسیاری از برنامه ها استفاده می شود. به عنوان مثال، در فایل محبوب استفاده می شود فرمت ZIPو ابزار یونیکس Gzip. همچنین به عنوان یک جزء در فشرده سازی با اتلاف استفاده می شود.

    فشرده‌سازی بدون تلفات زمانی استفاده می‌شود که هویت داده‌های فشرده‌شده با اصلی مهم باشد. یک مثال رایج این است فایل های اجراییو منبع. مقداری گرافیک فرمت های فایل، مانند PNG یا GIF، فقط از فشرده سازی بدون تلفات استفاده کنید. در حالی که دیگران (TIFF، MNG) می توانند از فشرده سازی با اتلاف و بدون تلفات استفاده کنند.

    تکنیک فشرده سازی بدون اتلاف

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

    الگوریتم های فشرده سازی چند منظوره با این واقعیت متمایز می شوند که می توانند طیف گسترده ای از داده ها - فایل های اجرایی، فایل های داده، متون، گرافیک ها و غیره را کاهش دهند و در بایگانی ها استفاده می شوند. الگوریتم های تخصصی برای نوع خاصی از فایل ها (متن، گرافیک، صدا و غیره) طراحی شده اند، اما این گونه فایل ها را بسیار قوی تر فشرده می کنند. به عنوان مثال: آرشیوها صدا را حدود یک سوم (1.5 بار) فشرده می کنند، در حالی که FLAC آن را 2.5 بار فشرده می کند. بیشتر الگوریتم‌های تخصصی برای انواع فایل‌های «بیگانه» کاربرد چندانی ندارند: به عنوان مثال، داده‌های صوتی توسط الگوریتمی که برای متون طراحی شده است، فشرده نمی‌شوند.

    اکثر الگوریتم‌های فشرده‌سازی بدون تلفات در دو مرحله کار می‌کنند: اولی یک مدل آماری برای داده‌های ورودی تولید می‌کند، دومی با بیت‌مپ داده‌های ورودی، از مدل برای تولید داده‌های «احتمال‌ای» (یعنی اغلب اتفاق می‌افتد) استفاده می‌کند، که بیشتر از داده های "غیر محتمل"

    مدل‌های الگوریتم آماری برای متن (یا داده‌های باینری مبتنی بر متن مانند فایل‌های اجرایی) عبارتند از:

    تبدیل Burrows-Wheeler (پیش پردازش مرتب‌سازی بلوکی که فشرده‌سازی را کارآمدتر می‌کند)

    LZ77 و LZ78 (با استفاده از DEFLATE)

    الگوریتم های رمزگذاری از طریق تولید توالی بیت:

    الگوریتم هافمن (همچنین توسط DEFLATE استفاده می شود)

    کدگذاری حسابی

    روش های فشرده سازی بدون تلفات

    · چند منظوره

    · کدگذاری طول اجرا - مدار ساده، که داده هایی را که حاوی مقادیر تکراری زیادی هستند فشرده سازی خوبی می کند

    · LZW - در gif و بسیاری دیگر استفاده می شود.

    · Deflate - در gzip، یک نسخه پیشرفته از zip، و به عنوان بخشی از فرآیند فشرده سازی PNG استفاده می شود.

    · LZMA - مورد استفاده در 7-zip.

    v فشرده سازی صدا:

    · Apple Lossless - ALAC (Apple Lossless Audio Codec).

    · کدگذاری بدون افت صدا - همچنین به عنوان MPEG-4 ALS شناخته می شود.

    · انتقال مستقیم جریان - DST.

    · کدک صوتی بدون اتلاف رایگان - FLAC.

    v فشرده سازی گرافیک

    ABO - بهینه سازی باینری تطبیقی.

    · GIF - (فقط برای تصاویر حاوی کمتر از 256 رنگ بدون ضرر).

    · JBIG2 - (با یا بدون تصاویر B/W با اتلاف).

    · JPEG-LS - (استاندارد فشرده سازی بدون تلفات / تقریباً بدون تلفات).

    · JPEG 2000 - (شامل فشرده سازی بدون تلفات؛ همچنین توسط Sunil Kumar، استاد دانشگاه ایالتی سن دیگو آزمایش شده است).

    · PGF - فایل گرافیکی پیشرو (فشرده سازی با/بدون از دست دادن).

    PNG - گرافیک شبکه قابل حمل.

    · WMPhoto - (از جمله روش فشرده سازی بدون اتلاف).

    v فشرده سازی ویدیو

    کدک انیمیشن;

    · کدک ویدیویی CamStudio.

    6. ذخیره سازی اطلاعات (متن، گرافیک، صدا)

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

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

    حامل اطلاعات می تواند ماهیت متفاوتی داشته باشد: کاغذ. مکانیکی، مغناطیسی، الکتریکی. اطلاعات ثبت شده در رسانه ممکن است به صورت نمادی قابل خواندن توسط انسان یا به صورت رمزگذاری شده باشد. اطلاعات برای ضبط صوت، ضبط ویدئو، دوربین فیلم - صداذخیره شده در دستگاه های خاص: کاست های صوتی، کاست های ویدئویی، فیلم ها. با کمک میکروفون و سایر وسایل، اطلاعات صدا بر روی نوار مغناطیسی ضبط می شود.

    در رایانه ها، به عنوان ابزاری برای نوشتن، خواندن اطلاعات شروع به استفاده کرد: کارت خوان های پانچ. درایوهای نوار مغناطیسی، فلاپی (درایو دیسک) و هارد (دیسک سخت) درایوهای دیسک مغناطیسی؛ درایوهای دیسک فشرده (CD-ROM) و موارد دیگر دستگاه های مدرنانباشت و ذخیره سازی اطلاعات

    فهرست کتابشناختی

    1. قانون فدرال فدراسیون روسیه "در مورد اطلاعات، اطلاعات و حفاظت اطلاعات" مورخ 27 ژوئیه 2006 شماره 149-FZ.

    2. لوین ا.ش. آموزش کامپیوتر. - سن پترزبورگ: پیتر، 2006. - 655 ص.

    3. Romanova N.I. مبانی انفورماتیک - سنت پترزبورگ: پلی تکنیک، 2004. -224 ص.

    4. Simonovich S.V. علوم کامپیوتر. دوره پایه. - سن پترزبورگ: پیتر، 2008 - 640 ص.

    میزبانی شده در Allbest.ru

    اسناد مشابه

      انواع فشرده سازی داده ها: با اتلاف (تلفات) و بدون اتلاف (بی ضرر). فشرده سازی با حداقل افزونگی. رمزگذاری شانون-فانو بررسی برنامه برای فشرده سازی فایل های bmp و xls. اجرای دلفی الگوریتم فشرده سازی شانون و هافمن.

      مقاله ترم، اضافه شده در 2011/01/26

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

      مقاله ترم، اضافه شده در 2011/03/17

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

      ارائه، اضافه شده در 01/06/2014

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

      چکیده، اضافه شده در 1392/05/12

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

      ارائه، اضافه شده در 04/05/2011

      مفاهیم اولیه و روش های فشرده سازی داده ها. تبدیل اطلاعات ذخیره شده در یک فایل به فرمی که باعث کاهش افزونگی در ارائه آن می شود. روش های فشرده سازی آماری و فرهنگ لغت. بایگانی برنامه ها، ویژگی های اصلی WinRAR.

      کار کنترل، اضافه شده 03/12/2011

      بررسی کوتاهنظریه های اصلی فشرده سازی مفاهیم ایده ها و اجرای آنها. فشرده سازی داده ها با استفاده از تبدیل Burrows-Wheeler. الگوریتم هافمن استاتیک الگوریتم فشرده سازی تطبیقی ​​محلی الگوریتم زیو لمپل (ولچ) و روش شانون فانو.

      کار عملی، اضافه شده در 2014/04/24

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

      مقاله ترم، اضافه شده در 2009/07/28

      استفاده از الگوریتم هایی که درجه بالایی از فشرده سازی را برای افزایش سرعت انتقال داده ها از طریق کانال های ارتباطی فراهم می کند. ویژگی‌ها و روش‌های یافتن تجزیه ارزش منفرد. توسعه برنامه ای که فشرده سازی تصویر را با استفاده از فشرده سازی SVD پیاده سازی می کند.

      پایان نامه، اضافه شده در 1394/10/13

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

    هدف از سخنرانی: برای مطالعه انواع و الگوریتم های اصلی فشرده سازی داده ها و آموزش حل مسائل فشرده سازی داده ها با استفاده از روش هافمن و با استفاده از درختان کد.

    کلود شانون را بنیانگذار علم فشرده سازی اطلاعات می دانند. قضیه کدگذاری بهینه او نشان می دهد که هنگام رمزگذاری اطلاعات باید برای چه چیزی تلاش کرد و این یا آن اطلاعات چقدر فشرده می شود. علاوه بر این، او آزمایش‌هایی را بر روی ارزیابی تجربی افزونگی متن انگلیسی انجام داد. شانون از مردم خواست حرف بعدی را حدس بزنند و احتمال حدس زدن درست را تخمین زد. او بر اساس تعدادی آزمایش به این نتیجه رسید که مقدار اطلاعاتدر متن انگلیسی بین 0.6 - 1.3 بیت در هر کاراکتر در نوسان است. علیرغم این واقعیت که نتایج تحقیقات شانون تا چند دهه بعد واقعاً مورد تقاضا نبود، دشوار است که اهمیت آنها را بیش از حد برآورد کنیم.

    متراکم سازی داده هافرآیندی است که حجم داده ها را با کاهش افزونگی آنها کاهش می دهد. فشرده سازی داده ها با آرایش فشرده ای از تکه های داده همراه است. اندازه استاندارد. فشرده سازی داده ها را می توان به دو نوع اصلی تقسیم کرد:

    • فشرده سازی بدون تلفات (کاملاً برگشت پذیر)- این یک روش فشرده‌سازی داده‌ها است که در آن بخشی از داده‌ها که قبلاً کدگذاری شده‌اند، پس از فشرده‌سازی کامل، بدون ایجاد تغییرات، بازیابی می‌شوند. برای هر نوع داده، به عنوان یک قاعده، الگوریتم های فشرده سازی بدون تلفات بهینه وجود دارد.
    • فشرده سازی از دست رفتهیک روش فشرده سازی داده است که در آن، به منظور ارائه حداکثر درجهفشرده سازی آرایه داده اصلی، بخشی از داده های موجود در آن دور ریخته می شود. برای داده های متنی، عددی و جدولی، استفاده از برنامه هایی که چنین روش های فشرده سازی را پیاده سازی می کنند غیرقابل قبول است. اساساً از چنین الگوریتم هایی برای فشرده سازی داده های صوتی و تصویری، تصاویر استاتیک استفاده می شود.

    الگوریتم فشرده سازی داده ها (الگوریتم آرشیو)الگوریتمی است که افزونگی ثبت داده ها را حذف می کند.

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

    الفبای کدمجموعه تمام نمادهای جریان ورودی است. هنگام فشرده سازی متون انگلیسی معمولاً از مجموعه ای از 128 کد اسکی استفاده می شود. هنگام فشرده سازی تصاویر، مجموعه ای از مقادیر پیکسل می تواند شامل 2، 16، 256 یا تعداد دیگری از عناصر باشد.

    نماد رمزکوچکترین واحد داده ای است که باید فشرده شود. معمولا یک کاراکتر 1 بایت است، اما می تواند یک بیت، یک تریت (0،1،2) یا هر چیز دیگری باشد.

    یک کلمه رمزدنباله ای از نمادهای کد از الفبای رمز است. اگر تمام کلمات دارای طول یکسانی (تعداد کاراکترها) باشند، چنین کدی فراخوانی می شود یکنواخت (طول ثابت)، و اگر کلمات با طول های مختلف مجاز باشند، پس - ناهموار (طول متغیر).

    کد یک مجموعه کامل از کلمات است.

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

    عبارت- قطعه ای از داده ها برای استفاده بیشتر در فشرده سازی در یک فرهنگ لغت قرار داده شده است.

    کد نویسیفرآیند فشرده سازی داده ها است.

    رمزگشایی- فرآیند رمزگذاری معکوس، که در آن بازیابی داده ها انجام می شود.

    نسبت تراکمیکی از رایج ترین مقادیر مورد استفاده برای نشان دادن کارایی یک روش فشرده سازی است.

    مقدار 0.6 به این معنی است که داده ها 60٪ از حجم اصلی را اشغال می کنند. مقادیر بیشتر از 1 به این معنی است که جریان خروجی بزرگتر از جریان ورودی است (فشرده سازی یا گسترش منفی).

    نسبت تراکممتقابل نسبت تراکم است.

    مقادیر بیشتر از 1 نشان دهنده فشرده سازی و مقادیر کمتر از 1 نشان دهنده انبساط است.

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

    L cp = p 1 L 1 + p 2 L 2 +... + p n L n ,

    احتمال کلمات رمز کجاست.

    L 1 ,L 2 ,...,L n طول کلمات رمز هستند.

    دو روش اصلی برای انجام فشرده سازی وجود دارد.

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

    فشرده سازی فرهنگ لغتروش‌های فشرده‌سازی هستند که تکه‌هایی از داده‌ها را در یک «فرهنگ لغت» ذخیره می‌کنند (برخی ساختار داده ها). اگر رشته داده های ورودی جدید با قطعه ای که قبلاً در فرهنگ لغت وجود دارد یکسان باشد، یک اشاره گر به آن قطعه در جریان خروجی قرار می گیرد. بهترین روش های دیکشنری از روش Ziv-Lempel استفاده می کنند.

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

    روش هافمن

    این الگوریتم رمزگذاری اطلاعاتتوسط D.A. پیشنهاد شد. هافمن در سال 1952. کدگذاری هافمن (فشرده سازی)یک روش فشرده سازی پرکاربرد است که اختصاص می دهد کاراکترهای الفباکدهای طول متغیر بر اساس احتمال وقوع این کاراکترها.

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

    کد پیشوندکدی است که در آن هیچ کلمه رمزی پیشوند هیچ کلمه رمز دیگری نیست. این کدها دارای طول متغیر هستند.

    کد پیشوند بهینهکد پیشوندی است که حداقل طول متوسط ​​را دارد.

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

    1. تعیین احتمال وجود کاراکترها در متن مبدا.

      در ابتدا لازم است متن مبدأ به طور کامل خوانده شود و احتمال وقوع کاراکترها در آن محاسبه شود (گاهی شمارش می کنند که هر کاراکتر چند بار رخ می دهد). اگر این همه 256 کاراکتر را در نظر بگیرد، در فشرده سازی متن یا فایل با فرمت متفاوت تفاوتی وجود نخواهد داشت.

    2. یافتن کد پیشوند بهینه

      سپس دو نماد a و b با کمترین احتمال وقوع پیدا می‌شوند و با یک نماد ساختگی x جایگزین می‌شوند که احتمال وقوع آن برابر با مجموع احتمالات وقوع نمادهای a و b است. سپس، با استفاده از این روش به صورت بازگشتی، کد پیشوند بهینه برای مجموعه کوچک‌تری از کاراکترها (که در آن کاراکترهای a و b با یک کاراکتر x جایگزین می‌شوند) پیدا می‌شود. کد مجموعه کاراکترهای اصلی از کدهای کاراکتر جایگزین با افزودن 0 یا 1 در مقابل کد کاراکتر جایگزین به دست می آید و این دو کد جدید به عنوان کد کاراکتر جایگزین دریافت می شوند. به عنوان مثال، کد کاراکتر a با کد x با صفر اضافه شده قبل از آن کد مطابقت دارد و برای کاراکتر b، یک قبل از کد کاراکتر x اضافه می‌شود.

    کدهای هافمن یک پیشوند منحصر به فرد دارند که به آنها امکان می دهد با وجود طول متغیرشان به طور واضح رمزگشایی شوند.

    مثال 1. پیاده سازی نرم افزار روش هافمن

    #include "stdafx.h" #include با استفاده از namespace std. void Expectancy(); long MinK(); void SumUp(); void BuildBits(); void OutputResult(char **نتیجه); voidClear(); const int MaxK = 1000; طولانی k، a، b; charbits; چارسک; bool Free; char*res; طولانی i، j، n، m، kj، kk1، kk2. char str; int _tmain(int argc, _TCHAR* argv)(char *BinaryCode; Clear(); cout<< "Введите строку для кодирования: "; cin >> خ. توقع، انتظار()؛ sumUp(); BuildBits(); OutputResult(&BinaryCode); کوت<< "Закодированная строка: " << endl; cout << BinaryCode << endl; system("pause"); return 0; } //описание функции обнуления данных в массивах void Clear(){ for (i = 0; i < MaxK + 1; i++){ k[i] = a[i] = b[i] = 0; sk[i] = 0; Free[i] = true; for (j = 0; j < 40; j++) bits[i][j] = 0; } } /*описание функции вычисления вероятности вхождения каждого символа в тексте*/ void Expectancy(){ long *s = new long; for (i = 0; i < 256; i++) s[i] = 0; for (n = 0; n < strlen(str); n++) s]++; j = 0; for (i = 0; i < 256; i++) if (s[i] != 0){ j++; k[j] = s[i]; sk[j] = i; } kj = j; } /*описание функции нахождения минимальной частоты символа в исходном тексте*/ long MinK(){ long min; i = 1; while (!Free[i] && i < MaxK) i++; min = k[i]; m = i; for (i = m + 1; i <= kk2; i++) if (Free[i] && k[i] < min){ min = k[i]; m = i; } Free[m] = false; return min; } //описание функции подсчета суммарной частоты символов void SumUp(){ long s1, s2, m1, m2; for (i = 1; i <= kj; i++){ Free[i] = true; a[i] = 0; b[i] = 0; } kk1 = kk2 = kj; while (kk1 >دو /توضیح تابع برای تولید کدهای پیشوند void BuildBits()( strcpy(bits,"1")؛ Free = false؛ strcpy(bits],bits); strcat(bits] , "0")؛ strcpy(bits], بیت)؛ strcat(bits] , "1")؛ i = MinK()؛ strcpy(bit[m],"0")؛ Free[m] = true؛ strcpy(bits],bits[m])؛ strcat (bit] , "0")؛ strcpy(bits],bits[m])؛ strcat(bits] , "1")؛ برای (i = kk2 - 1; i > 0; i--) اگر (!رایگان [i] ) ( strcpy(bits],bits[i])؛ strcat(bits] , "0"); strcpy(bits],bits[i]); strcat(bits] , "1"); ) ) / /توصیف تابع خروجی داده void OutputResult(char **نتیجه)( (*نتیجه) = کاراکتر جدید؛ برای (int t = 0; i< 1000 ;i++) (*Result)[t] = 0; for (i = 1; i <= kj; i++) res] = bits[i]; for (i = 0; i < strlen(str); i++) strcat((*Result) , res]); } Листинг.

    الگوریتم هافمن جهانی است، می توان از آن برای فشرده سازی داده ها از هر نوع استفاده کرد، اما برای فایل های کوچک (به دلیل نیاز به ذخیره فرهنگ لغت) بی اثر است. در حال حاضر، این روش عملاً به شکل خالص آن مورد استفاده قرار نمی گیرد، معمولاً به عنوان یکی از مراحل فشرده سازی در طرح های پیچیده تر استفاده می شود. این تنها الگوریتمی است که در بدترین حالت اندازه داده های اصلی را افزایش نمی دهد (به جز نیاز به ذخیره جدول جستجو به همراه فایل).

    روش‌های فشرده‌سازی داده‌ها دارای تاریخچه نسبتاً طولانی توسعه هستند که مدت‌ها قبل از ظهور اولین رایانه آغاز شد. در این مقاله سعی بر آن است تا مروری اجمالی بر نظریه‌های اصلی، مفاهیم ایده‌ها و پیاده‌سازی آن‌ها ارائه شود که البته ادعای کامل بودن آن را ندارد. اطلاعات دقیق تر را می توان به عنوان مثال در کریچفسکی R.E. ، ریابکو بی.یا. ، ویتن I.H. ، Rissanen J. ، Huffman D.A. ، Gallager R.G. ، Knuth D.E. ، ویتر جی.اس. و غیره.

    فشرده سازی اطلاعات مشکلی است که سابقه نسبتاً طولانی دارد، بسیار قدیمی تر از تاریخچه توسعه فناوری رایانه، که (تاریخ) معمولاً به موازات تاریخچه توسعه مشکل رمزگذاری و رمزگذاری اطلاعات پیش می رفت. همه الگوریتم های فشرده سازی بر روی یک جریان ورودی اطلاعات کار می کنند که حداقل واحد آن یک بیت و حداکثر واحد آن چندین بیت، بایت یا چند بایت است. هدف فرآیند فشرده سازی، به عنوان یک قاعده، به دست آوردن یک جریان خروجی فشرده تر از واحدهای اطلاعاتی از برخی جریان های ورودی اولیه غیر فشرده با استفاده از تغییر شکل آنها است. مشخصات فنی اصلی فرآیندهای فشرده سازی و نتایج کار آنها عبارتند از:

    درجه فشرده سازی (رتبه فشرده سازی) یا نسبت (نسبت) حجم منبع و جریان های حاصل.

    نرخ فشرده سازی - زمان صرف شده برای فشرده سازی مقدار معینی از اطلاعات در جریان ورودی تا زمانی که یک جریان خروجی معادل از آن به دست آید.

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

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

    فشرده سازی برگشت ناپذیر به معنای چنین تبدیلی در جریان داده ورودی است که در آن جریان خروجی، بر اساس یک قالب اطلاعاتی خاص، از نقطه نظر معینی، شیئی را نشان می دهد که از نظر ویژگی های خارجی کاملاً شبیه به جریان ورودی است، اما متفاوت است. از آن در حجم. درجه تشابه جریان ورودی و خروجی با درجه مطابقت برخی از خصوصیات شیء (یعنی اطلاعات فشرده و فشرده نشده، مطابق با فرمت داده خاص) که توسط این جریان اطلاعات نشان داده شده است، تعیین می شود. چنین رویکردها و الگوریتم هایی برای فشرده سازی، به عنوان مثال، داده های فایل گرافیکی شطرنجی با نرخ تکرار بایت پایین در جریان استفاده می شود. با این رویکرد، از ویژگی ساختار فرمت فایل گرافیکی و توانایی ارائه یک تصویر گرافیکی تقریباً مشابه در کیفیت نمایش (برای درک توسط چشم انسان) به چندین روش (یا بهتر است بگوییم n) استفاده می شود. بنابراین، علاوه بر درجه یا مقدار فشرده سازی، مفهوم کیفیت نیز در چنین الگوریتم هایی مطرح می شود، زیرا از آنجایی که تصویر اصلی در طی فرآیند فشرده‌سازی تغییر می‌کند، پس کیفیت را می‌توان به عنوان درجه مطابقت بین تصویر اصلی و نتیجه درک کرد که به طور ذهنی بر اساس فرمت اطلاعات ارزیابی می‌شود. برای فایل های گرافیکی، این مطابقت به صورت بصری تعیین می شود، اگرچه الگوریتم ها و برنامه های هوشمند مربوطه نیز وجود دارد. فشرده سازی برگشت ناپذیر را نمی توان در مناطقی که نیاز به تطابق دقیق بین ساختار اطلاعات جریان ورودی و خروجی وجود دارد استفاده کرد. این رویکرد در فرمت‌های ویدیویی و عکس معروف به نام الگوریتم‌های JPEG و JFIF و فرمت‌های فایل JPG و JIF پیاده‌سازی می‌شود.

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

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

    اجازه دهید اکنون مستقیماً به ویژگی‌های الگوریتمی الگوریتم‌های برگشت‌پذیر برویم و مهم‌ترین رویکردهای نظری برای فشرده‌سازی داده‌ها را در رابطه با پیاده‌سازی سیستم‌های کدگذاری و روش‌های فشرده‌سازی اطلاعات در نظر بگیریم.

    فشرده سازی رمزگذاری سری

    شناخته شده ترین روش ساده و الگوریتم فشرده سازی برگشت پذیر، رمزگذاری طول اجرا (RLE) است. ماهیت روش های این رویکرد جایگزینی زنجیره ها یا سری از بایت های تکرار شونده یا توالی آنها با یک بایت رمزگذاری و یک شمارنده برای تعداد تکرارهای آنها است. مشکل همه روش‌های مشابه تنها تعیین روشی است که در آن الگوریتم فشرده‌سازی می‌تواند سری رمزگذاری‌شده را از دیگر توالی‌های بایت رمزگذاری نشده در جریان بایت حاصل تشخیص دهد. راه حل مشکل معمولاً با قرار دادن برچسب ها در ابتدای زنجیره های کدگذاری شده به دست می آید. چنین علائمی ممکن است، به عنوان مثال، مقادیر بیت مشخصه در اولین بایت اجرای کدگذاری شده، مقادیر اولین بایت اجرای کدگذاری شده و موارد مشابه باشد. این روش ها، به عنوان یک قاعده، برای فشرده سازی تصاویر گرافیکی بیت مپ (BMP، PCX، TIF، GIF) کاملاً مؤثر هستند. دومی شامل چند سری طولانی از دنباله های تکراری بایت است. نقطه ضعف روش RLE نسبت فشرده سازی نسبتا کم یا هزینه رمزگذاری فایل ها با تعداد سری کم و حتی بدتر از آن، با تعداد کمی بایت های تکراری در سری است.

    فشرده سازی بدون استفاده از روش RLE

    فرآیند فشرده سازی داده ها بدون استفاده از روش RLE را می توان به دو مرحله مدل سازی (مدل سازی) و در واقع رمزگذاری (رمزگذاری) تقسیم کرد. این فرآیندها و الگوریتم های پیاده سازی آنها کاملاً مستقل و متنوع هستند.

    فرآیند کدگذاری و روش های آن

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

    مورد اول شامل مشاهده جریان ورودی و ساخت کدگذاری بر اساس آمار جمع‌آوری شده است (این به دو گذر از فایل نیاز دارد - یکی برای مشاهده و جمع‌آوری اطلاعات آماری، دومی برای رمزگذاری، که تا حدودی دامنه چنین الگوریتم‌هایی را محدود می‌کند، زیرا: بنابراین، امکان کدگذاری یک‌گذر در پرواز را که در سیستم‌های مخابراتی استفاده می‌شود، که در آن‌ها مقدار داده‌ها گاهی مشخص نیست، و ارسال مجدد یا تجزیه آن‌ها ممکن است زمان زیادی طول بکشد را از بین می‌برد. در چنین حالتی، طرح آنتروپی کدگذاری مورد استفاده در جریان خروجی نوشته می شود. این تکنیک به کدگذاری هافمن ایستا معروف است.

    معرفی.

    فشرده سازی مقدار فضای مورد نیاز برای ذخیره فایل ها را در رایانه کاهش می دهد و

    مقدار زمان لازم برای انتقال اطلاعات از طریق یک کانال مشخص

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

    جستجو و تصحیح خطاها و همچنین رمزگذاری هستند. فرآیند جستجو و

    تصحیح خطا برعکس فشرده سازی است - افزونگی داده ها را افزایش می دهد،

    زمانی که نیازی به ارائه به شکلی قابل خواندن برای انسان نباشد. در حال برداشتن

    از افزونگی متن، فشرده سازی رمزگذاری را تقویت می کند، که جستجو را دشوار می کند

    رمز را با یک روش آماری قابل دسترسی برای کرکر.

    اجازه دهید فشرده سازی برگشت پذیر یا فشرده سازی بدون تداخل را در نظر بگیریم، جایی که اولیه است

    متن را می توان دقیقاً از حالت فشرده بازیابی کرد. برگشت ناپذیر یا

    فشرده سازی مضر برای ضبط دیجیتالی سیگنال های آنالوگ مانند

    گفتار یا نقاشی های انسانی فشرده سازی برگشت پذیر به ویژه برای متون مهم است

    به زبان های طبیعی و مصنوعی نوشته شده است، زیرا در این مورد

    اشتباهات معمولا غیر قابل قبول هستند. اگرچه حوزه اصلی کاربرد

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

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

    کدگذاری توالی داده های گسسته

    دلایل خوبی برای تخصیص منابع کامپیوتری از نظر فشرده وجود دارد

    عملکرد، زیرا انتقال سریعتر داده ها و کاهش فضا برای

    ذخیره آنها باعث صرفه جویی زیادی در پول می شود و اغلب بهبود می یابد

    نشانگرهای کامپیوتری فشرده سازی احتمالاً به دلیل همه موارد در کانون توجه باقی خواهد ماند

    افزایش حجم داده های ذخیره شده و ارسال شده به رایانه، علاوه بر این، می تواند باشد

    برای غلبه بر برخی محدودیت های فیزیکی مانند:

    به عنوان مثال، پهنای باند نسبتا کم کانال های تلفن.

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

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

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

    متن منبع به عنوان ورودی و تولید متن فشرده مربوطه،

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

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

    متن مبدأ را مجموعه‌ای از رشته‌های متشکل از حروف الفبا در نظر بگیرید

    متن اصلی.

    افزونگی در نمایش رشته S L(S) - H(S) است، که در آن L(S) طول است

    نمایش در بیت، و H(S) - آنتروپی - اندازه گیری محتوای اطلاعات، نیز

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

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

    از متن منبع، یک حرف از مجموعه‌ای تصادفی را استخراج کنید،

    با استفاده از الفبای A، آنتروپی با فرمول بدست می آید:

    H(S) = C(S) p(c) log ----،

    که در آن C(S) تعداد حروف در رشته است، p(c) احتمال ایستا است

    وقوع برخی از حرف C. اگر فراوانی وقوع برای تخمین p(c) استفاده شود.

    هر حرف c در رشته S، سپس H(C) خود آنتروپی رشته S نامیده می شود.

    مقاله H(S) برای نشان دادن خود آنتروپی رشته ای که از آن گرفته شده است استفاده می شود

    منبع استاتیک

    درختان در حال گسترش معمولاً اشکال نظم واژگانی را توصیف می کنند

    درخت‌های جستجوی دودویی، اما درخت‌های مورد استفاده در فشرده‌سازی داده‌ها ممکن است نباشند

    منظم باشد حذف نظم منجر به

    ساده سازی قابل توجه عملیات توسعه اساسی در نتیجه دریافت شد

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

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

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

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

    بهینه و تقریباً بهینه در زمان.

    کدهای پیشوند.

    بیشتر الگوریتم‌های فشرده‌سازی داده‌ها که به طور گسترده مورد مطالعه قرار گرفته‌اند، بر اساس کدها هستند

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

    کد طول متغیر حروف بیشتر با کدهای کوتاه نشان داده می شوند،

    کمتر - طولانی. کدهای استفاده شده در متن فشرده باید رعایت شوند

    ویژگی های پیشوند، یعنی: کد استفاده شده در متن فشرده نمی تواند باشد

    پیشوند هر کد دیگری

    کدهای پیشوند را می توان از طریق درختی که در آن هر برگ وجود دارد، پیدا کرد

    با یک حرف از الفبای منبع مطابقت دارد. شکل 1 درخت کد را نشان می دهد

    پیشوند یک الفبای 4 حرفی. کد پیشوند یک حرف را می توان توسط

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

    و 1 - راست. درخت کد هافمن یک درخت برابر وزن است که در آن هر کدام

    وزن برگ برابر با دفعات وقوع حرف در متن مبدا است و

    گره های داخلی وزن خود را ندارند. درخت در مثال بهینه خواهد بود اگر

    فرکانس حروف A، B، C و D به ترتیب 0.125، 0.125، 0.25 و 0.5 خواهد بود.

    کدهای هافمن معمولی به اطلاعات قبلی در مورد دفعات وقوع نیاز دارند

    حروف در متن اصلی، که منجر به نیاز به مشاهده مضاعف می شود - یک

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

    پس از آن، مقادیر این فرکانس ها باید با متن فشرده شده ترکیب شوند تا

    آن را فعال کنید تا در آینده به کار گرفته شود. فشرده سازی تطبیقی ​​در حال انجام است

    در یک مرحله، زیرا کد مورد استفاده برای هر حرف از متن مبدأ بر اساس آن است

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

    پیاده سازی کد هافمن تطبیقی ​​توسط Gallagher، Knuth منتشر شده است

    نسخه عملی چنین الگوریتمی، و ویتر آن را توسعه داد.

    کد Witter سازگار بهینه همیشه در یک بیت در هر بیت قرار دارد

    منبع نامه با توجه به کد هافمن استاتیک بهینه، که معمولا

    چند درصد از H است. علاوه بر این، کدهای هافمن ثابت همیشه هستند

    در یک بیت در هر حرف متن ساده از H قرار می گیرند (آنها به این می رسند

    محدود کردن فقط زمانی که برای همه حروف p(C) = 2). الگوریتم های فشرده سازی وجود دارد

    که بتواند بر این محدودیت ها غلبه کند. برای مثال الگوریتم Ziv-Lempell

    کلمات را از یک آرشیو با طول ثابت به خطوط متن مبدأ اختصاص می دهد

    طول متغیر و فشرده سازی حسابی می تواند برای رمزگذاری استفاده شود

    حروف منبع حتی کسری از بیت.

    پسوند را برای کدهای پیشوند اعمال کنید.

    درختان در حال گسترش اولین بار در سال 1983 و با جزئیات بیشتر توصیف شدند

    در سال 1985 در نظر گرفته شد. در ابتدا، آنها به عنوان نوعی از خود متعادل شناخته شدند

    درختان جستجوی دودویی، و همچنین نشان داده شده است که اجازه می دهد

    سریع ترین اجرای صف های اولویت دار اگر گره درخت در حال گسترش است

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

    ریشه، تمام گره های سمت چپ آن یک زیردرخت سمت چپ جدید تشکیل می دهند، گره ها در سمت راست -

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

    ریشه به گره هدف در حالی که ایجاد تغییرات محلی، بنابراین قیمت

    انبساط متناسب با طول مسیر طی شده است.

    ترجان و اسلایتون نشان دادند که درختان در حال گسترش از نظر استاتیکی بهینه هستند.

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

    توزیع احتمال، سپس سرعت دسترسی به درخت در حال گسترش و

    متعادل استاتیک، بهینه شده توسط این توزیع، خواهد بود

    با یک عامل ثابت که به اندازه کافی قابل توجه است با یکدیگر تفاوت دارند

    سری طولانی دسترسی ها از آنجایی که درخت هافمن یک نمونه است

    درخت متوازن استاتیکی، سپس هنگام استفاده از پسوند فشرده سازی

    داده ها، اندازه متن فشرده شده در یک ضریب مشخص قرار دارد

    اندازه آرشیو به دست آمده با استفاده از کد هافمن.

    همانطور که در ابتدا توضیح داده شد، پسوند برای درختانی که ذخیره می کنند اعمال می شود

    داده ها در گره های داخلی هستند، نه در برگ ها. درختان کدهای پیشوند همه را دارند

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

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

    گره به ریشه منتقل نمی شود و فرزندان آن اصلاح نمی شوند،

    در عوض، مسیر از ریشه تا هدف به سادگی نصف می شود. نصف گسترش می رسد

    همان حدود نظری در یک ضریب ثابت به عنوان

    افزونه.

    در مورد پیمایش زیگزاگی درخت واژگانی، نگه داشتن به عنوان

    الحاقات، و نیمه پسوندها بر خلاف مسیر مستقیم در امتداد پیچیده تر می شوند

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

    شکل 2. تاثیر نیم امتداد در مسیر ریشه (گره w) تا برگ

    گره A برای تعویض هر جفت داخلی به دنبال یکدیگر است

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

    2 بار. در فرآیند نیمه انبساط، گره های هر جفت، که از ریشه فاصله بیشتری دارند،

    در مسیر جدید (گره های x و z) و موارد نزدیکتر از آن قرار می گیرند

    حذف می شوند (گره های w و y).

    حفظ نظم واژگانی در درختان کد با عملیات نیمه بسط

    پیشوند اختیاری است فقط در عملیات کد مهم است

    پیشوند تطبیق دقیق درخت مورد استفاده در روال فشرده سازی است

    درخت مورد استفاده در روش استقرار هر تغییری مجاز است

    بین حروف متوالی، فقط در صورتی انجام می شود که

    هر دو رویه تغییرات یکسانی را به ترتیب مشابه ایجاد می کنند.

    عدم پشتیبانی از نظم واژگانی، اجرا را تا حد زیادی ساده می کند

    عملیات نیمه انبساط با حذف حالت زیگزاگ. میتوانست باشد

    من و سرپرستم در حال تهیه یک مونوگراف کوتاه در مورد پردازش تصویر هستیم. تصمیم گرفتم فصلی در مورد الگوریتم های فشرده سازی تصویر به دادگاه جامعه هابرا ارائه کنم. از آنجایی که گنجاندن یک فصل کامل در یک پست سخت است، تصمیم گرفتم آن را به سه پست تقسیم کنم:
    1. روش های فشرده سازی داده ها.
    2. فشرده سازی تصویر بدون اتلاف.
    3. فشرده سازی تصویر از دست رفته.
    می توانید اولین پست این مجموعه را در زیر بخوانید.

    در حال حاضر، تعداد زیادی الگوریتم فشرده سازی بدون تلفات وجود دارد که می توان آنها را به طور مشروط به دو گروه بزرگ تقسیم کرد:
    1. الگوریتم های جریان و فرهنگ لغت. این گروه شامل الگوریتم‌هایی از خانواده‌های RLE (رمزگذاری طول اجرا)، LZ* و غیره می‌شود. یکی از ویژگی‌های الگوریتم‌های این گروه این است که در رمزگذاری نه از اطلاعات فرکانس نمادها در پیام، بلکه از اطلاعات مربوط به دنباله‌ها استفاده می‌شود. قبلا مواجه شد.
    2. الگوریتم های فشرده سازی آماری (آنتروپی). این گروه از الگوریتم ها اطلاعات را با استفاده از فرکانس های ناهمواری که با آن کاراکترهای مختلف در یک پیام رخ می دهد، فشرده می کند. الگوریتم های این گروه شامل الگوریتم های رمزگذاری حسابی و پیشوندی (با استفاده از Shannon-Fanno, Huffman, Secant trees) می باشد.
    الگوریتم های تبدیل اطلاعات را می توان به عنوان یک گروه جداگانه جدا کرد. الگوریتم های این گروه مستقیماً اطلاعات را فشرده نمی کنند، اما کاربرد آنها فشرده سازی بیشتر را با استفاده از الگوریتم های جریان، فرهنگ لغت و آنتروپی بسیار ساده می کند.

    الگوریتم های جریان و فرهنگ لغت

    کدگذاری طول را اجرا کنید

    رمزگذاری طول اجرا (RLE) یکی از ساده ترین و رایج ترین الگوریتم های فشرده سازی داده ها است. در این الگوریتم، دنباله ای از کاراکترهای تکرار شده با یک کاراکتر و تعداد دفعات تکرار آن جایگزین می شود.
    به عنوان مثال، رشته "AAAAA" که برای ذخیره به 5 بایت نیاز دارد (با فرض اینکه یک بایت برای ذخیره یک کاراکتر اختصاص داده شده است)، می تواند با "5A" که شامل دو بایت است جایگزین شود. بدیهی است که این الگوریتم کارآمدتر است، هر چه سری تکرارها طولانی تر باشد.

    عیب اصلی این الگوریتم راندمان بسیار پایین آن در توالی هایی از کاراکترهای غیر تکراری است. به عنوان مثال، اگر دنباله "ABABAB" (6 بایت) را در نظر بگیریم، پس از اعمال الگوریتم RLE، به "1A1B1A1B1A1B" (12 بایت) تبدیل می شود. روش های مختلفی برای حل مشکل تکرار نشدن کاراکترها وجود دارد.

    ساده ترین روش اصلاح زیر است: بایتی که تعداد تکرارها را رمزگذاری می کند باید اطلاعاتی را نه تنها در مورد تعداد تکرارها، بلکه در مورد حضور آنها نیز ذخیره کند. اگر بیت اول 1 باشد، 7 بیت بعدی تعداد تکرارهای کاراکتر مربوطه را نشان می دهد و اگر بیت اول 0 باشد، 7 بیت بعدی نشان دهنده تعداد کاراکترهایی است که باید بدون تکرار گرفته شوند. اگر "ABABAB" را با استفاده از این اصلاح رمزگذاری کنیم، "-6ABABAB" (7 بایت) دریافت می کنیم. بدیهی است که تکنیک پیشنهادی می‌تواند کارایی الگوریتم RLE را بر روی توالی‌های کاراکتر غیر تکراری به طور قابل‌توجهی بهبود بخشد. اجرای رویکرد پیشنهادی در فهرست 1 نشان داده شده است:

    1. نوع
    2. تابع RLEEncode(InMsg: ShortString): TRLEEncodedString;
    3. MatchFl: Boolean ;
    4. MatchCount: shortint ;
    5. EncodedString: TRLEEncodedString;
    6. N، i: بایت.
    7. شروع
    8. N:=0;
    9. SetLength(EncodedString، 2 * طول (InMsg) );
    10. while length(InMsg) >= 1 do
    11. شروع
    12. MatchFl : = (طول(InMsg) > 1 ) و (InMsg[ 1 ] = InMsg[ 2 ] ) ;
    13. MatchCount := 1 ;
    14. در حالی که (MatchCount<= 126 ) and (MatchCount < length(InMsg) ) and ((InMsg[ MatchCount] = InMsg[ MatchCount + 1 ] ) = MatchFl) do
    15. MatchCount : = MatchCount + 1 ;
    16. اگر MatchFl پس
    17. شروع
    18. N: = N + 2;
    19. EncodedString[ N - 2 ] : = MatchCount + 128 ;
    20. EncodedString[ N - 1 ] : = ord (InMsg[ 1 ] ) ;
    21. دیگر
    22. شروع
    23. اگر MatchCount<>طول (InMsg) سپس
    24. MatchCount : = MatchCount - 1 ;
    25. N := N + 1 + MatchCount;
    26. EncodedString[ N - 1 - MatchCount] : = - MatchCount + 128 ;
    27. برای من := 1 به MatchCount انجام دهید
    28. EncodedString[ N - 1 - MatchCount + i] : = ord (InMsg[ i] ) ;
    29. پایان ؛
    30. حذف (InMsg, 1, MatchCount) ;
    31. پایان ؛
    32. SetLength(EncodedString, N) ;
    33. RLEcode := EncodedString;
    34. پایان ؛

    رمزگشایی یک پیام فشرده بسیار ساده است و به یک گذر از پیام فشرده می رسد، لیست 2 را ببینید:
    1. نوع
    2. TRLEEncodedString = آرایه از بایت ;
    3. تابع RLEDecode (InMsg: TRLEEncodedString) : ShortString;
    4. RepeatCount: shortint ;
    5. من، ج: کلمه;
    6. OutMsg: ShortString;
    7. شروع
    8. OutMsg := "" ;
    9. i:=0;
    10. در حالی که من< length(InMsg) do
    11. شروع
    12. RepeatCount : = InMsg[i] - 128 ;
    13. i : = i + 1 ;
    14. اگر RepeatCount< 0 then
    15. شروع
    16. RepeatCount := abs(RepeatCount) ;
    17. برای j : = i به i + RepeatCount - 1 do
    18. OutMsg := OutMsg + chr (InMsg[j] ) ;
    19. i := i + RepeatCount;
    20. دیگر
    21. شروع
    22. برای j := 1 تا RepeatCount انجام دهید
    23. OutMsg := OutMsg + chr (InMsg[ i] ) ;
    24. i : = i + 1 ;
    25. پایان ؛
    26. پایان ؛
    27. RLDecode := OutMsg;
    28. پایان ؛

    روش دوم افزایش کارایی الگوریتم RLE، استفاده از الگوریتم‌های تبدیل اطلاعات است که مستقیماً داده‌ها را فشرده نمی‌کنند، بلکه آن‌ها را به فرمی تبدیل می‌کنند که برای فشرده‌سازی راحت‌تر باشد. به عنوان نمونه ای از چنین الگوریتمی، یک جایگشت BWT را به نام مخترعان تبدیل باروز-ویلر در نظر خواهیم گرفت. این جایگشت خود کاراکترها را تغییر نمی دهد، بلکه فقط ترتیب آنها را در رشته تغییر می دهد، در حالی که زیر رشته های تکراری پس از اعمال جایگشت در گروه های متراکم جمع آوری می شوند که با استفاده از الگوریتم RLE بسیار بهتر فشرده می شوند. تبدیل مستقیم BWT به دنباله ای از مراحل زیر می رسد:
    1. اضافه کردن یک کاراکتر انتهای خط خاص که در هیچ جای دیگری وجود ندارد به رشته منبع اضافه کنید.
    2. گرفتن همه جایگشت های چرخه ای رشته اصلی.
    3. مرتب سازی رشته های دریافتی به ترتیب واژگان.
    4. برگرداندن آخرین ستون ماتریس حاصل.
    اجرای این الگوریتم در فهرست 3 نشان داده شده است.
    1. پایان
    2. EOMsg="|" ;
    3. تابع BWTEcode(InMsg: ShortString): ShortString;
    4. OutMsg: ShortString;
    5. LastChar: ANSIChar;
    6. N، i: کلمه;
    7. شروع
    8. InMsg := InMsg + EOMsg;
    9. N := طول(InMsg) ;
    10. ShiftTable[ 1 ] := InMsg;
    11. برای i := 2 تا N انجام دهید
    12. شروع
    13. LastChar := InMsg[N] ;
    14. InMsg : = LastChar + copy(InMsg, 1 , N - 1 );
    15. ShiftTable[i] := InMsg;
    16. پایان ؛
    17. مرتب سازی (ShiftTable) ;
    18. OutMsg := "" ;
    19. برای i := 1 تا N انجام دهید
    20. OutMsg : = OutMsg + ShiftTable[ i] [ N] ;
    21. BWTEcode := OutMsg;
    22. پایان ؛

    ساده ترین راه برای توضیح این تبدیل با یک مثال خاص است. بیایید رشته «آناناس» را بگیریم و توافق کنیم که علامت «|» انتهای رشته باشد. تمام جایگشت های چرخه ای این رشته و نتیجه مرتب سازی واژگانی آنها در جدول آورده شده است. 1.

    آن ها نتیجه تبدیل مستقیم رشته "|NNAAAC" خواهد بود. به راحتی می توان فهمید که این رشته بسیار بهتر از رشته اصلی است، توسط الگوریتم RLE فشرده شده است، زیرا این شامل دنباله های طولانی از حروف تکراری است.
    یک اثر مشابه را می توان با استفاده از تبدیل های دیگر به دست آورد، اما مزیت تبدیل BWT این است که برگشت پذیر است، با این حال، تبدیل معکوس پیچیده تر از تبدیل مستقیم است. برای بازیابی رشته اصلی، باید مراحل زیر را انجام دهید:
    یک ماتریس خالی با اندازه n*n ایجاد کنید که n تعداد کاراکترهای پیام رمزگذاری شده است.
    سمت راست ترین ستون خالی را با پیام رمزگذاری شده پر کنید.
    ردیف های جدول را به ترتیب واژگانی مرتب کنید.
    مراحل 2-3 را تا زمانی که ستون های خالی وجود دارد تکرار کنید.
    رشته ای را که با کاراکتر انتهای خط ختم می شود برگردانید.

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

    1. پایان
    2. EOMsg="|" ;
    3. تابع BWTDecode(InMsg: ShortString): ShortString;
    4. OutMsg: ShortString;
    5. ShiftTable: آرایه ShortString.
    6. ن، من، ج: کلمه;
    7. شروع
    8. OutMsg := "" ;
    9. N := طول(InMsg) ;
    10. SetLength(ShiftTable، N + 1) ;
    11. برای i: = 0 تا N انجام دهید
    12. ShiftTable[i] := "" ;
    13. برای i := 1 تا N انجام دهید
    14. شروع
    15. برای j := 1 تا N انجام دهید
    16. ShiftTable[j] : = InMsg[j] + ShiftTable[j] ;
    17. مرتب سازی (ShiftTable) ;
    18. پایان ؛
    19. برای i := 1 تا N انجام دهید
    20. اگر ShiftTable[ i] [N] = EOMsg پس
    21. OutMsg := ShiftTable[i] ;
    22. حذف (OutMsg, N, 1 ) ;
    23. BWTDecode := OutMsg;
    24. پایان ؛

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

    پس از مرتب سازی جدول به دست آمده در مرحله هفتم، لازم است ردیفی از جدول انتخاب شود که با علامت «|» ختم می شود. به راحتی می توان فهمید که این تنها خط است. که ما تبدیل BWT را در یک مثال خاص در نظر گرفته‌ایم.

    به طور خلاصه می توان گفت که مزیت اصلی گروه الگوریتم RLE سادگی و سرعت عمل (از جمله سرعت رمزگشایی) است و عیب اصلی آن ناکارآمدی در مجموعه کاراکترهای غیر تکراری است. استفاده از جایگشت های خاص، کارایی الگوریتم را افزایش می دهد، اما زمان اجرا (به ویژه رمزگشایی) را نیز بسیار افزایش می دهد.

    فشرده سازی دیکشنری (الگوریتم های LZ)

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

    ساده ترین نسخه الگوریتم دیکشنری در زیر توضیح داده شده است:
    فرهنگ لغت را با تمام کاراکترهای موجود در رشته ورودی راه اندازی کنید.
    در فرهنگ لغت طولانی ترین دنباله (S) را که با ابتدای پیام رمزگذاری شده مطابقت دارد پیدا کنید.
    کد دنباله یافت شده را صادر کنید و آن را از ابتدای پیام رمزگذاری شده حذف کنید.
    اگر به انتهای پیام نرسید، کاراکتر بعدی را بخوانید و Sc را به فرهنگ لغت اضافه کنید، به مرحله 2 بروید. در غیر این صورت خارج شوید.

    به عنوان مثال، یک فرهنگ لغت جدید برای عبارت "CUCKOOCOOKOOHOOD" در جدول نشان داده شده است. 3:

    در طی فرآیند فشرده‌سازی، فرهنگ لغت با توالی‌هایی که در پیام مشاهده می‌شوند تکمیل می‌شود. روند به روز رسانی فرهنگ لغت در جدول آورده شده است. 4.

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

    ابتدا، دیکشنری را به‌عنوان رکوردی تعریف می‌کنیم که نه تنها رشته‌های فرعی که با آن‌ها مواجه شده‌اند، بلکه تعداد زیررشته‌های ذخیره‌شده در فرهنگ لغت را نیز ذخیره می‌کند:

    زیر دنباله هایی که قبلا با آنها مواجه شده اند در آرایه Words ذخیره می شوند و کد آنها اعداد دنباله های فرعی این آرایه است.
    ما همچنین جستجوی فرهنگ لغت را تعریف کرده و به توابع فرهنگ لغت اضافه می کنیم:

    1. پایان
    2. MAX_DICT_LENGTH = 256 ;
    3. تابع FindInDict(D: TDictionary; str: ShortString) : integer ;
    4. r: عدد صحیح
    5. i: عدد صحیح
    6. fl: boolean ;
    7. شروع
    8. r := - 1 ;
    9. اگر D. WordCount > 0 سپس
    10. شروع
    11. i := D.WordCount ;
    12. fl := false ;
    13. در حالی که (نه fl) و (i >= 0 ) انجام می دهند
    14. شروع
    15. i := i - 1 ;
    16. fl:=D.Words[i]=str;
    17. پایان ؛
    18. پایان ؛
    19. اگر fl سپس
    20. r :=i;
    21. FindInDict := r;
    22. پایان ؛
    23. رویه AddToDict(var D: TDictionary; str: ShortString) ;
    24. شروع
    25. اگر D.WordCount< MAX_DICT_LENGTH then
    26. شروع
    27. D.WordCount := D.WordCount + 1 ;
    28. SetLength(D. Words, D. WordCount) ;
    29. د. کلمات [ D. WordCount - 1 ] : = str;
    30. پایان ؛
    31. پایان ؛

    با استفاده از این توابع، فرآیند رمزگذاری طبق الگوریتم توصیف شده را می توان به صورت زیر پیاده سازی کرد:
    1. تابع LZWEncode(InMsg: ShortString): TEncodedString;
    2. OutMsg: TEncodedString;
    3. tmpstr: ShortString;
    4. د: دیکشنری;
    5. i، N: بایت.
    6. شروع
    7. SetLength(OutMsg, length(InMsg) ) ;
    8. N:=0;
    9. InitDict(D) ;
    10. while length(InMsg) > 0 do
    11. شروع
    12. tmpstr := InMsg[ 1 ] ;
    13. در حالی که (FindInDict(D, tmpstr) >= 0 ) و (length(InMsg) > length(tmpstr)) انجام می دهند
    14. tmpstr : = tmpstr + InMsg[ طول(tmpstr) + 1 ] ;
    15. if FindInDict(D، tmpstr)< 0 then
    16. delete(tmpstr, length(tmpstr) , 1 );
    17. OutMsg[N] := FindInDict(D, tmpstr) ;
    18. N: = N + 1;
    19. delete(InMsg, 1 , length(tmpstr) );
    20. اگر طول (InMsg) > 0 باشد
    21. AddToDict(D, tmpstr + InMsg[ 1 ] );
    22. پایان ؛
    23. SetLength(OutMsg، N) ;
    24. LZWEcode := OutMsg;
    25. پایان ؛

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

    تنها مشکل در شرایط زیر امکان پذیر است: زمانی که لازم است دنباله ای را رمزگشایی کنید که هنوز در فرهنگ لغت نیست. به راحتی می توان فهمید که این فقط در مواردی امکان پذیر است که نیاز به استخراج زیر رشته ای باشد که باید در مرحله فعلی اضافه شود. و این بدان معنی است که رشته فرعی الگوی cSc را برآورده می کند. با همان کاراکتر شروع و به پایان می رسد. در این مورد، cS رشته فرعی است که در مرحله قبل اضافه شده است. وضعیت در نظر گرفته شده تنها زمانی است که نیاز به رمزگشایی رشته ای است که هنوز اضافه نشده است. با توجه به موارد فوق، می توانیم گزینه زیر را برای رمزگشایی یک رشته فشرده ارائه کنیم:

    1. تابع LZWDecode(InMsg: TEncodedString): ShortString;
    2. د: دیکشنری;
    3. OutMsg, tmpstr: ShortString;
    4. من: بایت
    5. شروع
    6. OutMsg := "" ;
    7. tmpstr := "" ;
    8. InitDict(D) ;
    9. برای i := 0 به طول (InMsg) - 1 انجام دهید
    10. شروع
    11. if InMsg[i] >= D.WordCount آنگاه
    12. tmpstr : = D. کلمات [ InMsg[ i - 1 ] ] + D. کلمات [ InMsg[ i - 1 ] ] [ 1 ]
    13. دیگر
    14. tmpstr := D. کلمات [ InMsg[ i] ] ;
    15. OutMsg := OutMsg + tmpstr;
    16. اگر من > 0 پس
    17. AddToDict(D, D. Words [ InMsg[ i - 1 ] ] + tmpstr[ 1 ] );
    18. پایان ؛
    19. LZWDecode := OutMsg;
    20. پایان ؛

    از مزایای الگوریتم های دیکشنری می توان به راندمان فشرده سازی بیشتر آنها در مقایسه با RLE اشاره کرد. با این وجود، باید درک کرد که استفاده واقعی از این الگوریتم‌ها با برخی مشکلات پیاده‌سازی همراه است.

    کدگذاری آنتروپی

    رمزگذاری با درختان شانون-فانو

    الگوریتم شانون-فانو یکی از اولین الگوریتم های فشرده سازی توسعه یافته است. این الگوریتم مبتنی بر ایده نمایش کاراکترهای متداول تر با کدهای کوتاه تر است. در این حالت، کدهای به دست آمده با استفاده از الگوریتم شانون-فانو دارای خاصیت پیشوندی هستند: i.e. هیچ کدی آغاز هیچ کد دیگری نیست. ویژگی پیشوند تضمین می کند که رمزگذاری یک به یک است. الگوریتم ساخت کدهای شانون-فانو در زیر ارائه شده است:
    1. الفبا را به دو قسمت تقسیم کنید که احتمالات کل نمادها تا حد امکان به یکدیگر نزدیک باشد.
    2. به کد پیشوند قسمت اول نمادها 0 اضافه کنید، به کد پیشوند قسمت دوم نمادها 1 اضافه کنید.
    3. برای هر قسمت (که حداقل دو کاراکتر دارد)، مراحل 1-3 را به صورت بازگشتی انجام دهید.
    الگوریتم شانون-فانو علیرغم سادگی نسبی، بدون اشکال نیست که مهمترین آنها کدگذاری غیربهینه است. اگرچه پارتیشن بندی در هر مرحله بهینه است، اما الگوریتم نتیجه بهینه را در کل تضمین نمی کند. به عنوان مثال، رشته زیر را در نظر بگیرید: "AAAABVGDEZH". درخت شانون-فانو مربوطه و کدهای مشتق شده از آن در شکل نشان داده شده است. 1:

    بدون رمزگذاری، پیام 40 بیت (به شرط اینکه هر کاراکتر با 4 بیت کدگذاری شده باشد) و با استفاده از الگوریتم شانون-فانو 4*2+2+4+4+3+3+3=27 بیت خواهد بود. حجم پیام 32.5 درصد کاهش یافته است، اما در زیر نشان داده می شود که این نتیجه می تواند به طور قابل توجهی بهبود یابد.

    رمزگذاری با درختان هافمن

    الگوریتم کدگذاری هافمن که چند سال بعد از الگوریتم شانون-فانو توسعه یافت، دارای خاصیت پیشوند نیز هست و علاوه بر این، حداقل افزونگی ثابت شده، دلیل توزیع بسیار گسترده آن است. برای بدست آوردن کد هافمن از الگوریتم زیر استفاده می شود:
    1. تمام نمادهای الفبا به صورت گره های آزاد نشان داده می شوند که وزن گره متناسب با فرکانس نماد در پیام است.
    2. از مجموعه گره های آزاد، دو گره با حداقل وزن انتخاب شده و یک گره جدید (والد) با وزنی برابر با مجموع وزن گره های انتخاب شده ایجاد می شود.
    3. گره های انتخاب شده از لیست آزاد حذف می شوند و گره والد ایجاد شده بر اساس آنها به این لیست اضافه می شود.
    4. مراحل 2-3 تکرار می شود تا زمانی که بیش از یک گره در لیست آزاد وجود داشته باشد.
    5. بر اساس درخت ساخته شده، به هر کاراکتر الفبا یک کد پیشوند اختصاص داده می شود.
    6. پیام با کدهای دریافتی کدگذاری می شود.

    مثال مشابهی را در مورد الگوریتم شانون-فانو در نظر بگیرید. درخت هافمن و کدهای دریافت شده برای پیام "AAAABVGDEZH" در شکل نشان داده شده است. 2:

    به راحتی می توان محاسبه کرد که اندازه پیام رمزگذاری شده 26 بیت خواهد بود که کمتر از الگوریتم شانون-فانو است. به طور جداگانه لازم به ذکر است که با توجه به محبوبیت الگوریتم هافمن در این لحظهانواع مختلفی از کدگذاری هافمن وجود دارد، از جمله کدگذاری تطبیقی ​​که نیازی به ارسال فرکانس های نماد ندارد.
    از جمله معایب الگوریتم هافمن، بخش قابل توجهی از مشکلات مربوط به پیچیدگی پیاده سازی است. استفاده از نمادهای متغیر واقعی برای ذخیره فرکانس ها با از دست دادن دقت همراه است، بنابراین، متغیرهای عدد صحیح اغلب در عمل استفاده می شوند، اما، از آنجایی که وزن گره های والد به طور مداوم در حال رشد است، دیر یا زود سرریز اتفاق می افتد. بنابراین، با وجود سادگی الگوریتم، اجرای صحیح آن همچنان می تواند مشکلاتی را به خصوص برای الفبای بزرگ ایجاد کند.

    رمزگذاری با درختان بریده شده

    کدنویسی با استفاده از توابع secant الگوریتمی است که توسط نویسندگان توسعه یافته است که امکان به دست آوردن کدهای پیشوند را فراهم می کند. این الگوریتم مبتنی بر ایده ساختن یک درخت است که هر گره آن شامل یک تابع سکانس است. برای توضیح بیشتر الگوریتم، لازم است چندین تعاریف ارائه شود.
    کلمه یک دنباله مرتب شده از m بیت است (عدد m طول کلمه نامیده می شود).
    لفظ سکانت یک جفت بیت ارزش است. مثلاً لفظ (4،1) به این معناست که 4 بیت کلمه باید برابر با 1 باشد. اگر شرط لفظ صادق باشد، لفظ درست در نظر گرفته می شود و در غیر این صورت نادرست است.
    سکانت k بیتی مجموعه ای از k حرف است. اگر همه لفظ ها درست باشند، خود تابع secant درست است، در غیر این صورت نادرست است.

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

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

    کدگذاری حسابی

    کدگذاری حسابی یکی از بهترین هاست راه های موثرفشرده سازی اطلاعات بر خلاف الگوریتم هافمن، رمزگذاری حسابی اجازه می دهد تا پیام ها با آنتروپی کمتر از 1 بیت در هر نماد رمزگذاری شوند. زیرا اکثر الگوریتم‌های کدگذاری حسابی توسط پتنت محافظت می‌شوند، فقط ایده‌های اصلی در زیر توضیح داده خواهد شد.
    فرض کنید در الفبای مورد استفاده N کاراکتر a_1،…،a_N، با فرکانس‌های p_1،…، p_N وجود دارد. سپس الگوریتم کدگذاری حسابی به شکل زیر خواهد بود:
    به عنوان یک نیم فاصله کاری، بگیرید)