إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

الخوارزميات الحرة لضغط الملفات و مستويات الضغط ؟

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [سؤال] الخوارزميات الحرة لضغط الملفات و مستويات الضغط ؟


    السلام عليكم و رحمة الله و بركاته

    اريد معرفة بعض الاشياء عن خوارزميات الضغط الحرة ، وعن مستويات الضغط .

    يعني ما الفرق الاساسي بين bz2 و بين lzma (الخاص بـ 7z) .

    و ما هي مستويات الضغط ؟ ، بخلاف خوارزمية الضغط هل يوجد سبب اخر لكون ضغط rar قوي قليلاً عن نظائره من البرمجيات الحرة ؟


    مثلا الاخ مؤيد كان يقول في رد ليه التالي :
    المشاركة الأصلية بواسطة alsadi مشاهدة المشاركة
    حزم rpm تدعم عدة أنواع من طرق الضغط. في فيدورا 12 سيتم استخدام ضغط xz (وهو المكتبة التي تنفذ خوارزمية 7zip المعروفة) وهو أسرع وأقوى من gzip و bzip2 عند المستوى 2 وأقوى من كل الطرق الأخرى لكنه ليس الأسرع عند مستويات ضغط أعلى من 2.

    اذن ، تعالا فسر ردك يا مؤيد D:

    ما هى مستويات الضغط ؟ ما الفرق بينهم ؟ كيف اصل لأفضل ضغط باستخدام الخوارزميات الحرة ؟ و ما موقف نوع الملفات المضغوطة في تحديد مقدار الضغط ؟ - اقصد يعني ملفات الفيديو ، ملفات نصية ، ملفات صوتية ، صور ، و هكذا -

    ---------

    اخيرا لا اريد ردود منقوله ! اريد شخص فاهم الموضوع
    ثانياً ، انا لا اتكلم هنا عن برامج الضغط العجيبة التي نسمع عنها كل فترة و التي يقال انها تضغط لارقام خيالية ! و أيضاً تأخذ اوقات خيالية في فك ضغط الملفات ! ، اتكلم على خوارزميات الضغط العادية المعتمدة .

    : )

    كتاب أوبنتو ببساطة: http://www.simplyubuntu.com
    ابدأ مع النظام الرائع أوبنتو لينُكس الآن!

  • #2
    حاضر

    كيف اصل لأفضل ضغط باستخدام الخوارزميات الحرة ؟
    استخدم xz بأعلى مستوى وهو 9

    أما التفصيل فنبدأ بمكتبة اسمها zlib فهي الأقل ضغطا لكنها الأسرع والأخف على الذاكرة وهي مستخدمة حتى منتجات تجارية غير حرة

    zlib Home Site

    والخوارزمية المستخدمة فيها تسمى التنفيس deflate هي نفسها المستخدمة في gzip و zip وغيرها
    zlib was written by Jean-loup Gailly (compression) and Mark Adler (decompression). Jean-loup is also the primary author/maintainer of gzip(1), the author of the comp.compression FAQ list and the former maintainer of Info-ZIP's Zip; Mark is also the author of gzip's and UnZip's main decompression routines and was the original author of Zip. Not surprisingly, the compression algorithm used in zlib is essentially the same as that in gzip and Zip, namely, the `deflate' method that originated in PKWARE's PKZIP 2.x.
    للمزيد عنها انظر
    An Explanation of the `Deflate' Algorithm

    وهي تجمع بين lz77 وHuffman coding
    ومستويات الضغط فيها هي من 0 يعني غير مضغوط إلى 9 وهي أفضل ضغط في zlib
    وتحتلف مستويات الضغط فيما بينها في معاملات تضبط طريقة البحث مثل حجم النافذة وأكبر طول أو offset يبحث فيه وخاصية ل lazy match ومعنى ال lazy match هو أنه إن وجد نص سابق بطول أكبر من قيمة معينة لا يضيع الوقت بالبحث عن أطول منه

    انظر هذا الكود من ملف deflate.c
    كود PHP:
    typedef struct config_s {
       
    ush good_length/* reduce lazy search above this match length */
       
    ush max_lazy;    /* do not perform lazy search above this match length */
       
    ush nice_length/* quit search above this match length */
       
    ush max_chain;
       
    compress_func func;
    config;

    local const config configuration_table[2] = {
    /*      good lazy nice chain */
    /* 0 */ 
    {0,    0,  0,    0deflate_stored},  /* store only */
    /* 1 */ 
    {4,    4,  8,    4deflate_fast}}; /* max speed, no lazy matches */
    #else
    local const config configuration_table[10] = {
    /*      good lazy nice chain */
    /* 0 */ 
    {0,    0,  0,    0deflate_stored},  /* store only */
    /* 1 */ 
    {4,    4,  8,    4deflate_fast}, /* max speed, no lazy matches */
    /* 2 */ 
    {4,    516,    8deflate_fast},
    /* 3 */ {4,    632,   32deflate_fast},

    /* 4 */ {4,    416,   16deflate_slow},  /* lazy matches */
    /* 5 */ 
    {8,   1632,   32deflate_slow},
    /* 6 */ {8,   16128128deflate_slow},
    /* 7 */ {8,   32128256deflate_slow},
    /* 8 */ {321282581024deflate_slow},
    /* 9 */ {322582584096deflate_slow}}; /* max compression */
    #endif 
    برنامج gzip يعمل أرشيف بسيط لملف واحد وهو عبارة عن header يسبق المعلومات المضغوطة يحمل اسم الملف وبعض المعلومات عنه وربما نوع من checksum ...إلخ

    وللحديث بقية عن bz2
    التعديل الأخير تم بواسطة alsadi; الساعة 16-10-2009, 01:09 PM. سبب آخر: تصحيح إملائي

    تعليق


    • #3
      والله لا اعلم شئ عن خورزمايات الضط ولكن لما كنت عند الوندوز كان الضغط بيعتبر شئ غير متوقع لا اعلم ماذا في بعض الاحيان كنت اضغط فديو شرح مثلا من 1 جيجا الي 1 ميجا لا اعلم لمذا او كيفي في حين فديو اخر حجمه 45 ميجا بعد الضغط يتحول الي 44 ميجا مثلا بعد فترة عرفت انه البرنامج المستخدم السبب برنامج
      البرنامج المستخدم في الشرح وليس الضغط اما علي اللنكس بعد الضغط لا يقل المساحه كثيرا
      يارت الاستاذ مؤيد يجاوب علينا ويفسرلنا الحكايه دي

      تعليق


      • #4
        والله لا اعلم شئ عن خورزمايات الضط ولكن لما كنت عند الوندوز كان الضغط بيعتبر شئ غير متوقع لا اعلم ماذا في بعض الاحيان كنت اضغط فديو شرح مثلا من 1 جيجا الي 1 ميجا لا اعلم لمذا او كيفي في حين فديو اخر حجمه 45 ميجا بعد الضغط يتحول الي 44 ميجا مثلا بعد فترة عرفت انه البرنامج المستخدم السبب برنامج
        البرنامج المستخدم في الشرح وليس الضغط اما علي اللنكس بعد الضغط لا يقل المساحه كثيرا
        يارت الاستاذ مؤيد يجاوب علينا ويفسرلنا الحكايه دي
        ربما السبب هو الملف المضغوط نفسه وليس طريقة الضغط لأن الملفات لا تنضغط كلها بنفس المقدار

        مثلا ملف wav بترميز PCM غير المضغوط ينضغط بنسبة أكبر من ملف mp3

        كذلك ملف bmp (عادي دون ضغط RLE) ينضغط بنسبة أكثر من ملف png

        والسبب هو أن التكرار ظاهر في النوعين الأولين wav و bmp في حين أن ملفي mp3 و png مضغوطين أصلا

        في هذا المثال أخذت ملف bmp وملف png وضغطته بالطرق الثلاثة

        كود PHP:
        -rw-rw-r-- 1 alsadi alsadi 751K 2009-10-16 13:14 ch.bmp
        -rw-rw-r-- 1 alsadi alsadi  121 2009-10-16 13:14 ch.bmp.bz2
        -rw-rw-r-- 1 alsadi alsadi 3.4K 2009-10-16 13:14 ch.bmp.gz
        -rw-rw-r-- 1 alsadi alsadi  472 2009-10-16 13:14 ch.bmp.xz
        -rw-rw-r-- 1 alsadi alsadi 1.5K 2009-10-16 13:14 ch.png
        -rw-rw-r-- 1 alsadi alsadi  521 2009-10-16 13:14 ch.png.bz2
        -rw-rw-r-- 1 alsadi alsadi  400 2009-10-16 13:14 ch.png.gz
        -rw-rw-r-- 1 alsadi alsadi  432 2009-10-16 13:14 ch.png.xz 
        لاحظ أن ملف bmp انضغط بنسبة أعلى مع أن الصورة واحدة في كليهما

        كذلك الحال مع ملفات الفيديو من نوع dv غير المضغوطة أو ملفات avi غير المغوطة

        تعليق


        • #5
          الموضوع والمشاركات جدا قيمة بارك الله فيك يا استاذ مؤيد
          أنقر هنا

          تعليق


          • #6
            السلام عليكم

            رابط لاثراء الموضوع: http://www.linuxac.org/forum/linuxac...tml#post254639


            سلام
            عبدالرحيم الفاخوري -- abdilra7eem
            IRC: Fakhouri
            فلسطين
            مترجم ومبرمج ويب وفني شبكات وخوادم يحب البطاريق

            كتاب الإدارة المتقدمة لجنو/لينكس:
            https://librebooks.org/gnu-linux-adv...dministration/

            تعليق


            • #7
              > alsadi :
              شكرا جزيلا لك و جزاك الله كل خير ^_^

              وهي تجمع بين lz77 وHuffman coding
              ومستويات الضغط فيها هي من 0 يعني غير مضغوط إلى 9 وهي أفضل ضغط في zlib
              في هذه الجزئية تتكلم لخوارزمية اخرى ؟ لانك في النهاية توقل انها افضل من zlib ؟



              و في انتظار بقية التوضيح عن bz2 : )
              ـ

              -----------

              abdilra7eem - عبد العزيز حسن
              شكرا على الاضافات : )
              كتاب أوبنتو ببساطة: http://www.simplyubuntu.com
              ابدأ مع النظام الرائع أوبنتو لينُكس الآن!

              تعليق


              • #8
                ما أعرفه أنه إذا كانت الملفات اللتى يتم ضغطها مثلا ملفات نصية == فيمكن ضغطها بشكل كبير

                تعليق


                • #9
                  في هذه الجزئية تتكلم لخوارزمية اخرى ؟ لانك في النهاية توقل انها افضل من zlib ؟
                  لا أنا قلت في وليس من

                  ومستويات الضغط فيها هي من 0 يعني غير مضغوط إلى 9 وهي أفضل ضغط في zlib
                  مستوى الضغط في zlib صفر دون ضغط. 1 ضغط خفيف. 9 أكبر ضغط.

                  تعليق


                  • #10
                    يبدوا ان عقلي ما زال يحاول التفكير على التوازي
                    لم انتبه للحرف ، شكرا على التوضيح ^_^"
                    كتاب أوبنتو ببساطة: http://www.simplyubuntu.com
                    ابدأ مع النظام الرائع أوبنتو لينُكس الآن!

                    تعليق


                    • #11
                      طيب نتابع عند
                      وهي تجمع بين lz77 وHuffman coding
                      طريقة huffman coding هي one to one transformation
                      ينقل أي بيانات إلى تمثيل أقل حجما لها بناء على توزيعها التكراري

                      مثلا إن كان حرف l مكرر 500 مرة وحرف z مكرر 3 مرات
                      فإن مثلنا حرف l برمز طوله 1 بت على حساب حرف z الذي سيكون نصيبه 9 بت
                      ففي الحالة الاولى كسبنا 7 بت مع كل رمز للحرف l وفي الثانية خسرنا 1 بت مع كل رمز للحرف z
                      يعني 7*500-1*3
                      فنكون قد وفرنا 473 بايت

                      طريقة اختيار طول الرموز هو عبر شجرة ثنائية متوازنة (وزن كل عقدة فيها تكرارها)

                      وللحديث بقية

                      تعليق

                      يعمل...
                      X