تحديد أفضل خوارزمية ضغط لاستخدامها في سلسلة من البايتات

StackOverflow https://stackoverflow.com/questions/605315

  •  03-07-2019
  •  | 
  •  

سؤال

عن مشروع شخصي لي أنا أكتب فئة صغيرة لضغط و فك ضغط بدلا من شكل غامض.لدي كامل المواصفات, ولكن هذا ليس مشكلة.

أولا هذا 'تنسيق' يستخدم مجموعة من 6 ضغط مختلفة الأنواع فضلا عن غير مضغوط كتل بايت من البيانات.تنسيقات RLE, فرع من RLE حيث عدد الزيادات كل بايت (مثلا ، 3, 4, 5, ...), 16-بت RLE, LZ-نسخ, عكس LZ-نسخ ، LZ-نسخ Xor مع 255.ليس أنظف من المواصفات, ولكن لم أكن تصميم ذلك أيضا.

ضغط بلدي الروتينية من المفترض أن تأخذ في مجموعة في أي مكان من 1 إلى 65535 بايت, و (أمل) ضغط عليه قدر الإمكان.لي محاولة سابقة في هذا تحسب ببساطة ، بدءا من أي مؤشر في غير مضغوط تيار ، والتي من تقنيات ضغط أعلاه سوف نقدم أفضل ضغط ثم يضغط بيد أن العديد من وحدات البايت التي وطريقة ضغط إلى صفيف بايت مضغوط قبل تكرار من جديد غير مضغوط' مؤشر على سبيل المثال:

{0,0,0,1,2,3,4}

الخوارزمية أن تقرأ أولا أن هناك ثلاثة أصفار في البداية ، ثم إخراج RLE ترميز لهم أن المواصفات المستخدمة ، ثم ابتداء من العنصر الرابع من يقرأ أن تزايد RLE تغطية '1,2,3,4' جيدا بما فيه الكفاية وضغط أنه قبل عودته.

المشكلة تلخيص أنه أثناء محاولة لمعرفة أفضل مواصفات لاستخدام روتين جدا بطيئة حتى على الصغيرة (20-30) بايت المصفوفات.يمكن لأي شخص أن تساعد مع نصائح حول كيف يمكن تحسين ذلك ، أو إذا كان هناك أي معلومات يمكن أن تقدم المساعدة ؟

هل كانت مفيدة؟

المحلول

يبدو أن ما تحاول القيام به هو العمل على عدد كبير من ضغط إمكانيات كل شريحة ممكنة (دعنا نتصل بك طول متغير 1-كتل 64 كيلو شرائح) من الملف.تصحيح لي إذا كنت مخطئا, ولكن هل أنت أفضل ضغط الجزء الأول من الخيارات التالية (الطريقة 0 مضغوط):

  • طريقة ضغط 0 بطول 1 بايت.
  • طريقة ضغط 1 بطول 1 بايت.
  • : : : : :
  • طريقة ضغط 6 بطول 1 بايت.
  • طريقة ضغط 0, طول 2 بايت.
  • طريقة ضغط 1, طول 2 بايت.
  • : : : : :
  • طريقة ضغط 6, طول 65534 بايت.
  • طريقة ضغط 0, طول 65535 بايت.
  • طريقة ضغط 1, طول 65535 بايت.
  • طريقة ضغط 2, طول 65535 بايت.
  • طريقة ضغط 3, طول 65535 بايت.
  • طريقة ضغط 4, طول 65535 بايت.
  • طريقة ضغط 5, طول 65535 بايت.
  • طريقة ضغط 6, طول 65535 بايت.

أن الأمر سوف يستغرق قدرا كبيرا من الوقت (حوالي 420,000 ضغط محاولات لكل شريحة).إذا كان هذا هو ما تفعله ، عليك أن تكون أفضل حالا اختيار شريحة واحدة حجم (على سبيل المثال ، 64 كيلو بايت) و تطبيق كل من سبعة أساليب الضغط عليه لاختيار الأفضل.ثم لكل شريحة من إخراج "الأسلوب" بايت تليها البيانات المضغوطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top