تنفيذ خوارزمية ضغط LZW في Java.
LZW هي خوارزمية ضغط تم إنشاؤها في عام 1984 بواسطة Abraham Lempel و Jacob Ziv و Terry Welch.in في أبسط أشكالها ، ستخرج ملفًا مضغوطًا كسلسلة من المجالات الترميز الثابتة. يمكن استخدام أكواد الترميز المتغيرة لزيادة حجم إخراج الكوهرات حيث يملأ القاموس. فورثر ، بمجرد أن تملأ القاموس ، يمكن أن تتوقف الخوارزمية إما عن إضافة أنماط ومواصلة الضغط مع الأنماط فقط التي تم اكتشافها بالفعل ، أو يمكن للخوارزمية إعادة تعيين أنماط الكود الجديدة.
هذا المشروع عبارة عن تعديل لخوارزمية ضغط LZW لاستخدام فئة الترميز المتغيرة للعرض ، وإعادة ضبط دفتر الشفرة اختياريًا في ظل ظروف معينة. من خلال هذه التغييرات في متناول اليد ، قارنت أداء رمز LZW المعدل مع رمز LZW في الكتاب المدرسي بالطبع ، وأكثر مع أداء تطبيق ضغط يستخدم على نطاق واسع.
تجميع البرنامج عن طريق تشغيل javac MyLZW.java .
هناك 3 أوضاع لتشغيل هذا المشروع:
LZW.java ). يجب اختيار الوضع الذي يجب استخدامه بواسطة البرنامج أثناء الضغط. أيًا كان الوضع المستخدم لضغط ملف يجب أيضًا استخدامه لتوسيع الملف. لا يُطلب من المستخدم تحديد الوضع لاستخدامه للتوسع. سيتم تخزين الوضع المستخدم لضغط ملف في بداية ملف الإخراج ، بحيث يمكن استرداده تلقائيًا أثناء التوسع. لإنشاء الوضع المراد استخدامه أثناء الضغط ، سيقبل البرنامج 3 وسيطات سطر الأوامر:
* "N" لعدم القيام بأي شيء
* "R" لوضع إعادة التعيين
* "م" لوضع الشاشة
لاحظ أن رمز LZW المقدم يقبل بالفعل وسيطة سطر الأوامر لتحديد ما إذا كان ينبغي تنفيذ الضغط أو التوسع ("-"-"و"+"، على التوالي) ، ويتم توفير ملفات الإدخال/الإخراج عبر إعادة توجيه I/O القياسية (" <"للإشارة إلى ملف إدخال و"> "للإشارة إلى ملف الإخراج). لضغط الملف foo.txt لإنشاء foo.lzw باستخدام وضع إعادة التعيين ، يجب أن تكون قادرًا على تشغيل:
java MyLZW - r < foo.txt > foo.lzw بشكل مشابه لتوسيع foo.lzw إلى foo2.txt ، يجب تشغيل:
java MyLZW + < foo.lzw > foo2.txt