بهترین ؟
مگه داریم اصلا همچین چیزی تو اصول مهندسی ؟
مهندسی نرم افزار هم ازین قاعده مستثنا نیست. در ادامه سعی میکنم مقدمه ای درباره انواع الگوریتم ها و روش انتخاب شون برای هر نیاز رو ارائه بدم.
معیار های مقایسه الگوریتم ها
با دو تا معیار میشه الگوریتم مورد نیاز رو انتخاب کرد:
1. Compression Ratio
2. Compression Speed
ما نمی تونیم هر دور معیار کیفیت رو با هم افزایش بدیم چرا که با هم رابطه عکس دارن.
اما میتونیم انتخاب کنیم که کدوم برامون اولویت داره نسبت به دیگری.
مثال:
اگر فشرده سازی ما تجربه کاربر رو تحت تاثیر قرار میده و UX جز Quality Attribute های ما هست، تصمیم درست اینه که الگوریتم هایی که سرعت بیشتری دارند رو انتخاب کنید و هزینه مصرف حافظه رو بپردازید.
الگوریتم هایی که حافظه کمتری مصرف میکنند
1. LZMA (Lempel-Ziv-Markov chain):
این الگوریتم Compression Ratio خیلی زیادی داره، در compression کنده و در decompression نسبتا سریعه. برای فشرده سازی ارشیو های بزرگ خیلی کاربرد داره (مثل 7z)
2. Brotli:
این الگوریتم Compression Ratio نسبتا زیادی داره، در decompression خوب عمل میکنه اما در compression کند تره. تو فضای وب خیلی استفاده داره (serve کردن static فایل ها)
الگوریتم هایی که سرعت بهتری دارند
1. Huffman Coding:
compression و decompression سریعی داره حافظه ای هم که نیاز داره متوسطه.
توی real-time applications استفاده میشه
2. LZ77 (Sliding Window):
سرعت compression , decompression و Compression Ratio متوسط هست .
دو تا از استفاده هایی که ازش میشه توی gzip , PNG هست.