كيف يتم ضغط البيانات ؟ وكيف يتم إسترجاعها ؟
مين مننا مبيستخدمش برامج زي Winrar, 7zip و PowerISO. غالبا معظم الملفات اللي بنحملها من الإنترنت بتكون مضغوطة بالشكل ده وبنفك ضغطها بإستخدام نفس البرنامج اللي قام بضغطها أو ببرامج تانية مشابهة ليه. من النظرة الأولي ممكن يكون الموضوع غامض – إزي برنامج بيحول داتا حجمها 100 ميجا مثلا لداتا حجمها 20 ميجا ! منطقيا أكيد فيه فقد في الداتا ، لكن ده مبيحصلش
تخيل معايا جملة زي جملة الرئيس الأمريكي جون كينيدي في 1961, قال كلمته المشهورة :
Ask not what your country can do for you – ask what you can do for your country.
الجملة فيها 17 كلمة، 61 حرف، 16 مسافة، شرطة واحدة ونقطة واحدة. كل حرف بيخزن علي شكل byte واحدة يبقي إحنا محتاجين 79 byte لتخزين الجملة كاملة (61+16+1+1 = 79)
برامج الضغط مبتشوفش الجمل زي مما إحنا بنقراها، بتشوف الجمل علي أساس إنها كلمات أساسية وحشو، بمعني لو الكلمة ذكرت مرة واحدة أو لأول مرة كانت كلمة رئيسية لكن لو أعيد ذكرها أكثر من مرة كانت حشو يمكن الاستغناء عنه والتعويض عنه برقم
في مثالنا – جملة الرئيس كينيدي :
– كلمة “ask” ظهرت مرتين
– كلمة “what” ظهرت مرتين
– كلمة “your” ظهرت مرتين
– كلمة “country” ظهرت مرتين
– كلمة “can” ظهرت مرتين
– كلمة “do” ظهرت مرتين
– كلمة “for” ظهرت مرتين
– كلمة “you” ظهرت مرتين
لو تجاهلنا الحروف الكبيرة والصغيرة، يبقي تقريبا نص الجملة “حشو”، فلو عوضنا عن كل كلمة برقم – علي سبيل المثال :
1- ask
2- what
3- your
4- country
5- can
6- do
7- for
8-you
فهتكون الجملة النهائية علي الشكل التالي : “1 not 2 3 4 5 6 7 8 – 1 2 8 5 6 7 3 4.” – ده بالظبط الأساس أو الفكرة العامة اللي بتشتغل بيه برامج الضغط / عمل قاموس للكلمة المكررة علي حسب قوة تكرارها بحيث إن تكون أكثر الكلمات المكررة تاخد أقل عدد مكان (مثلا 0) ونعوض في الجمل المكتوبة وندمج القاموس مع الملف المضغوط – بكدة لما نيجي نفك الضغط تاني هنقري من القاموس ونعيد كتابة كل كلمة فيطلعلنا الداتا بدون أي نقص.
الطريقة دي مش فعالة تماما لو قيسناها علي المقياس الكبير لأن إختيار كلمة كلمة هيولد في النهاية قاموس كبير الحجم فمش هنكون استفدنا حاجة تقريبا – إلا إن البرامج بتطبق نفس المبدئ لكن علي مقاطع أكبر. بمعني .. في مثالنا نقدر نعوض عن “can do for” كلها برقم واحد حيث إنها إتكررت مرتين و عن “your country” برضه برقم واحد، فبكدة نكون وفرنا bytes أكثر، تخيل لو قيسنا كتاب كامل علي المبدأ ده !
في الملفات النصية لأن التكرار والحشو بيكون كثير بتكون تأثير الطريقة دي مبهر جدا وبنلاحظ إنخفاض كبير في حجم الملفات بعد ضغطها، لكن في الصور وملفات الميديا اللي تقريبا بتحتوي علي معلومات فريدة بيكون نسبة الضغط قليلة جدا علشان كدة بنعتمد علي التحويل في الصيغ – مثلا من bitmap لـ jpg في الصور وده نوع من أنواع الضغط إسمه Lossy Compression.
أنواع الضغط :
1- Lossless Compression : وده النوع اللي بيتم فيه ضغط الداتا بدون أي فقد في المحتوي زي فكرة المثال اللي إتكلمنا عنها فوق – فكل الداتا بيعوض عنها بأرقام وبنرفق قاموس مع الملف المضغوط بيكون الدليل لفك الضغط
2- Lossy Compression : نتيجة إن فيه صيغ من الملفات بتحتوي علي معلومات فريدة من الصور، فلجأنا للطريقة دي حيث إن البرامج اللي بتشتغل بالطريقة دي بتحذف الـ bytes اللي ملهاش لزمة ومكررة وبتعيد إنشاء الملف من جديد
مثلا لو فيه صورة وفيها مساحة كبيرة للسماء، فبيبتدي البرنامج ياخد لون أزرق واحد ويغير في قيمة اللون بدرجة لايمكن ملاحظتها في المعتاد ويستبدل القيم دي بقيمة واحدة مكررة (حشو) ويعيد إنشاء الملف. وأكيد في الطريقة دي مش هتقدر تحصل علي الملف الأصلي
فيه خوارزميات معينة لضغط الملفات منها خوارزمية هوفمان اللي بتوفر من 20% إلى 90% من إجمالي حجم الملف !! وبيكون معتمد علي نوع الملف نفسه، حيث إن الخورازمية بتعمل بكفاءة عالية وبتوفر حجم كبير جدا في حالة الملفات النصية، لكن تأثيرها مش كبير على ملفات الصور والفديو.
المراجع:
[1] David Salomon, Giovanni Motta, Handbook of Data Compression 4th edition, Springer, California, 2009. [2] Ida Mengyi Pu, Fondamental Data Compression, Butterworth -Heinemann, Burlington, MA, 2006. [3] Christina Zeeh, The Lempel Ziv Algorithm, Seminar ”Famous Algorithms”, University of Stuttgart, Stuttgart, January 16, 2003. [4] Abdallah Arioua (كاتب المقالة), abdallah ahmedbey,Adel Djidel,Implementation of L.Z.S.S algorithm for Text compression based on dictionary approach, License Dissertation,University of M’sila,2010. [5] Ziv, J., And Lempel, A. A universal algorithm for sequential data compression. IEEE Transactions on Information Theory 23 (1977).