نظام الضغط هذا عبارة عن اختراع مفيد جداً، خاصّةً لمستخدمي الإنترنت لأنّه يُخفّض عدد البيتات (Bits) والبايتات (Bytes) في الملف، ممّا يُسهّل انتقال هذه الملفّات بشكل أسرع عبر الانترنت البطيء، أو حتّى يُمكن أن تستهلك مساحة أقل من القرص.
بمُجرّد أن تُحمّل الملف إلى جهازك الكومبيوتر سيقوم بإستخدام برامج خاصّة مثل WinZip أو Stuffit لفك ضغط الملف مرّة أُخرى واستعادته إلى وضعه الأصلي.
إذا عمل كُل شيء بشكل جيّد فإن الملف المُوسّع سيكون مطابق للملف الأصليّ قبل ضغطه.
يبدو هذا غامضاً جدّاً للوهلة الأولى؛ تخفيض عدد البيتّات والبايتات ومن ثمّ إضافتها من جديد لاحقاً.
تبيّن أنّ الفكرة الأساسيّة وراء هذه العلميّة واضحة إلى حدٍ ما.
في هذه المقالة سوف نتدارس هذه الطريقة البسيطة من خلال ضغط ملف صغير.
إنّ معظم ملفّات الكومبيوتر إضافيّة وزائدة عن الحاجة فهي تحمل نفس المعلومات المذكورة مراراً وتكراراً، برنامج ضغط الملفّات يتخلّص ببساطة من هذا التكرار الزائد، فهو يُسجّل المعلومة لمرّة واحدة ويكتفي بالإشارة إليها عند ذكرها مجدداً عوضاً عن تسجيلها عدّة مرات مُكررة.
لنأخذ مثال على هذه العمليّة لنوع مألوف من المعلومات وهو الكلمات.
في كلمة الافتتاح الشهيرة لجون كينيدي عام 1960 نجد هذا السطر الشهير:
Ask not what your country can do for you — ask what you can do for your” country.”
هذا الاقتباس مُؤلّف من 17 كلمة، 61 حرف، 16 مسافة، خط واحد وزمن واحد.
إذا حجز كل حرف، فراغ أو علامة ترقيم واحدة في الذاكرة، فسوف نحصل على ملف حجمه 79 واحدة، لتقليص حجم الملف علينا البحث عن التكرار فنجد:
- “ask” مرّتين.
- “what” مرّتين.
- “your” مرّتين.
- “country” مرّتين.
- “can” مرّتين.
- “do” مرّتين.
- “for” مرّتين.
- “you” أيضاً مرّتين.
بغض النظر عن حالة الحرف كبير أم صغير نجد أنّ نصف الجملة تقريباً زائدة.
9 كلمات فقط وهي ask, not, what, your, country, can, do, for, you
هذه الكلمات تُعطينا كُل ما يلزم تقريباً لتركيب هذه المقولة.
لبناء النصف الثاني من المقولة: سنشير فقط إلى الكلمات الّتي وردت في النصف الأوّل من المقولة ونملأ الفراغات وعلامات الترقيم.
لننظر بدقّة أكثر إلى طريقة تعامل أنظمة الضغط مع الزيادة.
التكرار والخوارزميات
مُعظم برامج الضغط تستخدم شكل LZ وهي خوارزميّة قائمة على قاموس مُعدّل قابل للتكيّف لتقليص الملفّات.
LZ ترمز إلى: Lempel and Ziv؛ مبتكري الخوارزميّة.
و”dictionary” تُشير إلى طريقة فهرسة البيانات.
يختلف نظام ترتيب القواميس، لكن من المُمكن أن يكون بسيطاً مثل قائمة مُرقّمة.
بالعودة إلى عبارة كينيدي الشهيرة سنلتقط الكلمات المُكررة و نضعها ضمن فهرس مُرقّم.
ببساطة نستطيع كتابة الرقم بدلاً من كتابة الكلمة، وليكن هذه القاموس الخاص بنا:
- ask
- what
- your
- country
- can
- do
- for
- you
وبالتالي العبارة تكون: 1not 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4″ 3″
تستطيع بسهولة إعادة تركيب العبارة باستخدام القاموس والأرقام.
هذا بالضبط ما يفعله برنامج فك الضغط الخاص بك، ومُن المُمكن أنّك صادفت أيضاً ملفّات مضغوطة تقوم بفتح نفسها تلقائيّاً، لإنشاء مثل هذا النوع من الملفّات؛ يقوم المُبرمج بإدراج ملف فك ضغط بسيط مع الملف المضغوط، عندما يتم تنزيل الملف يعمل البرنامج تلقائيّاً ويستعيد الوضع الأصلي للملف.
ولكن فعليّاُ هل تعتقد أنك وفّرت مساحة كافية؟
1not 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4″ 3″
هي حتماً أقصر من
“Ask not what your country can do for you; ask what you can do for your country;”
لكن لا تنسى أنّك لازلت تحتاج لحفظ و إدراج القاموس مع الملف.
معرفة المُتطلّبات المختلفة للملف في نظام الضغط الفعليّ هو إجراء مُعقّد لحدٍ ما، لكن لغايتنا في الدراسة فلنعد إلى فكرة أنّ كل حرف، فراغ وعلامة ترقيم يحجز واحدة من الذاكرة.
قد وجدنا مُسبقاً أنّ العبارة أخذت معنا 79 واحدة، لكن جملتنا المضغوطة مُتضمّنةً الفراغات حجزت 37 واحدة، القاموس الذي أنشأناه أيضاً حجز 37 واحدة، هذا يُؤدّي إلى ملف حجمه 74 واحدة ممّا يعني أنّنا لم نستطع ضغط حجم الملف بما يكفي.
من ناحيةٍ أخرى، نحن قمنا بضغط جملة واحدة فقط، لكن إذا أكملنا خطاب كينيدي بنفس الطريقة، فإنّه سيكون من الممكن إعادة كتابة القاموس للحصول على أكثر كفاءة ممكنة.
في مثالنا السابق، التقطنا جميع الكلمات المُكررة وأدرجناها في قاموس.
هذه أوضح طريقة لكتابة قاموس بالنسبة لنا، لكن برنامج الضغط يرى الأمور بشكل مختلف تماماً؛ البرنامج لا يمتلك أي مفهوم عن الكلمات المُنفصلة، إنّها مُجرّد أنماط بالنسبة له، وبالتالي لتخفيض حجم الملف قدر الإمكان فهو يختار الأنماط التي يجب إدراجها بالقاموس بعناية.
إذا نظرنا للعبارة من هذا المنظور سننتهي بقاموسان مختلفان تماما.
لنرى العبارة من وجهة نظر البرنامج:
الإضافة الأولى في العبارة “ask not what your ” هي وجود فراغ بعد كل حرف t، وسنرمز لهذا الاختلاف بالقاموس بالرقم 1.
لكن في هذه العبارة القصيرة هذا النوع من الاختلاف لن يكون جديراً بالاهتمام وكافياً لإدراجه بالقاموس.
الإضافة الثانية
تكرار “ou” في كلمتي your,country.
اذا كان هذا مُكرر في الوثيقة فإنّ إدراج هذا النمط في القاموس سيوفّر مساحة جيّدة لأن “ou” مزيج شائع جداً في اللغة الإنجليزيّة.
وباستمرار عمل البرنامج سيلاحظ خيار أفضل للإدراج بالقاموس و هو “your country.”
في هذه الحالة سيتم استبدل التكرار “ou” بالتكرار “your country.”
عبارة “can do for” مُكررة أيضاً.
مرّة تليها “your”. ومرّة تليها “you”. ممّا يُعطينا النمط “can do for you.”
هذا يُوفّر لنا استبدال 13 حرف مع المسافات برقم واحد.
لذا البرنامج سيستبدل “your country “ ب “ r country “.
ثمّ سيُدرج إضافة منفصلة “can do for you.”
البرنامج يقوم بالمعالجة بهذا الشكل، يلتقط جميع البيتات المُكررة من المعلومات ومن ثمّ يحسب الأنماط التي ينبغي إدراجها في القاموس.
هذه القدرة على إعادة كتابة القاموس هي جزئيّة التكيّف من الخوارزمية.
إن ّطريقة المعالجة التي يقوم بها البرنامج معقدة نوعا ما.
لا يهم استخدام طريقة محدّدة.
ففي نظام البحث العميق ستسطيع ضغط الملف بفعاليّة أكبر بكثير من مجرّد التقاط الكلمات المكرّرة.
إنّ استخدام أنماط جديدة وإضافات ستخرجنا بقاموس أكبر:
- ask__
- what__
- you
- r__country
- __can__do__for__you
وهذه الجملة الصغيرة: “1not__2345__–__12354”
الجملة الآن تحجز 18 واحدة من الذhكرة، و القاموس 41 واحدة.
لقد قُمنا بضغط الملف من 79 واحدة إلى 59.
هذه فقط طريقة أخرى للضغط وليست بالضرورة الأكثر فعاليّة.
إلى أي مدى يُعتبر هذا النظام جيّد؟
نسبة تقليص حجم الملفّات تعتمد على عدد من العوامل منها نوع الملف، الحجم ونظام الضغط.
الملفات النصيّة تُضغط بشكل جيّد وذلك بسبب وجود كلمات و أحرف محدّدة تظهر معاً في أنماط معيّنة وذلك في معظم لغات العالم، قد تصل نسبة الضغط في ملف نصي جيّد إلى 50 بالمئة.
الأمر مُماثل في لغات البرمجة التي تستخدم مجموعة صغيرة مشتركة من الأوامر، في معظم الأحيان تُدرج في نمط مجموعة.
وبالنسبة إلى الملفّات التي تتضمّن معلومات غريبة غير متشابهة، مثل الرسومات أو ملفات MP3، فمن غير المُمكن ضغطها بشكل كبير وذلك لأنّها لاتحوي أنماط متشابهة متكرّرة.
إذا كان هناك ملف يحوي أنماط مُكررة، فإنّ معدّل الضغط يزداد مع حجم الملف.
من المُمكن رؤية هذا في مثالنا؛ فإذا كان لدينا المزيد من خطاب كينيدي يمكننا استخدام أنماط القاموس أكثر والحصول على المزيد من المساحة الخالية، بالإضافة إلى أنّ الأنماط المنتشرة مُمكن أن تظهر أكثر في فترة عمل أكبر ممّا يمكّننا من إنشاء قاموس أكثر فعاليّة.
تعتمد هذه الكفاءة أيضاً خوارزميّة محدّدة تُستخدم في برامج الضغط.
بعض البرامج عمليّاً ملائمة لإلتقاط أنماط في أنواع معيّنة من الملفّات، هذا يؤدّي لضغط أكثر سهولة.
برامج أُخرى تمتلك قواميس داخل القواميس ممّا يُوفّر فرصة ضغط أفضل للملفات الكبيرة وليس الصغيرة.
في حين أنّ جميع برامج الضغط من هذا النوع تعمل بنفس الفكرة الأساسيّة، لكن في الواقع يوجد اختلاف كبير في طريقة التنفيذ.
المبرمجون يحاولون دائماً بناء نظام أفضل.
Lossy and Lossless Compression:
طريقة الضغط التي كنّا نتدارسها تُدعى Lossless Compression.
لأنّها تسمح لك بإعادة إنشاء الملف الأصلي تماماً، تعتمد هذه القاعدة على تجزيىء الملف ومن ثمّ إعادة تجميعه بحيث يمكن استخدامه مرّة أخرى.
بينما طريقة Lossy compression تعمل بشكل مختلف تماماً؛ هذا البرنامج يقضي ببساطة على البيتات غير الضروريّة من المعلومات، فيصغر الملف.
يُستخدم هذا النوع من الضغط في الصور النقطيّة الضخمة.
لرؤية طريقة عمل هذا النوع، سننظر كيف يقوم جهاز الكومبيوتر بضغط الصورة الممسوحة ضوئيّاً.
برامج lossless compression لا تستطيع فعل الكثير مع هذا النوع من الملفات، بينما أجزاء كبيرة من الصورة قد تبدو مُتماثلة، فالسماء كلّها زرقاء كمثال على ذلك؛ لكن معظم ال pixels تختلف قليلاً.
لجعل الصورة أصغر حجماً من دون تقليل الوضوح، يجب تغيير قيمة اللون ل pixels معينة.
إذا كانت السماء الزرقاء تحتل جزءاً كبيراً من الصورة، فإنّ البرنامج سيختار لون أزرق واحد يُمكن استخدامه لكل بيكسل، ومن ثمّ سيُعيد البرنامج كتابة الملف بحيث أنّ كل قيمة بيكسل ستُشير إلى تلك المعلومات.
إذا كان نظام الضغط يعمل بشكل جيّد، فإنّك لن تلاحظ التغيير، ولكن سيتم تخفيض حجم الملف بشكل كبير.