การใช้อัลกอริทึมการบีบอัด LZW ใน Java
LZW เป็นอัลกอริทึมการบีบอัดที่สร้างขึ้นในปี 1984 โดย Abraham Lempel, Jacob Ziv และ Terry Welch ในรูปแบบพื้นฐานที่สุดมันจะส่งออกไฟล์บีบอัดเป็นชุดของ codewords ที่มีความยาวคงที่ codewords ความกว้างของตัวแปร สามารถใช้เพื่อเพิ่มขนาดของเอาต์พุต codewords เมื่อพจนานุกรมเติมเต็มขึ้นเมื่อพจนานุกรมเติมเต็มอัลกอริทึมสามารถหยุดการเพิ่มรูปแบบและดำเนินการบีบอัดต่อไปด้วยรูปแบบที่ค้นพบแล้ว
โครงการนี้เป็นการปรับเปลี่ยนอัลกอริทึมการบีบอัด LZW เพื่อใช้ codewords ความกว้างของตัวแปรและเพื่อเลือกรีเซ็ต codebook ภายใต้เงื่อนไขบางประการ ด้วยการเปลี่ยนแปลงเหล่านี้ในมือฉันได้เปรียบเทียบประสิทธิภาพของรหัส LZW ที่แก้ไขกับรหัส LZW ในตำราเรียนหลักสูตรและต่อไปด้วยประสิทธิภาพของแอปพลิเคชันการบีบอัดที่ใช้กันอย่างแพร่หลาย
รวบรวมโปรแกรมโดยเรียกใช้ javac MyLZW.java
มี 3 โหมดในการเรียกใช้โครงการนี้:
LZW.java ) ควรใช้โหมดใดที่ควรใช้โดยโปรแกรมในระหว่างการบีบอัด โหมดใดก็ตามที่ใช้ในการบีบอัดไฟล์ควรใช้เพื่อขยายไฟล์ ผู้ใช้ไม่จำเป็นต้องระบุโหมดเพื่อใช้สำหรับการขยายตัว โหมดที่ใช้ในการบีบอัดไฟล์จะถูกเก็บไว้ที่จุดเริ่มต้นของไฟล์เอาต์พุตเพื่อให้สามารถเรียกคืนได้โดยอัตโนมัติในระหว่างการขยายตัว ในการสร้างโหมดที่จะใช้ในระหว่างการบีบอัดโปรแกรมจะยอมรับอาร์กิวเมนต์บรรทัดคำสั่ง 3 รายการ:
* "n" สำหรับโหมดทำอะไร
* "R" สำหรับโหมดรีเซ็ต
* "M" สำหรับโหมดมอนิเตอร์
โปรดทราบว่ารหัส LZW ที่ให้ไว้แล้วยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเพื่อตรวจสอบว่าควรทำการบีบอัดหรือการขยายตัว ("-" และ "+" ตามลำดับ) และไฟล์อินพุต/เอาต์พุตนั้นมีให้ผ่านการเปลี่ยนเส้นทาง I/O มาตรฐาน ("<" เพื่อระบุไฟล์อินพุตและ ">" เพื่อระบุไฟล์เอาต์พุต) ในการบีบอัดไฟล์ foo.txt เพื่อสร้าง foo.lzw โดยใช้โหมดรีเซ็ตคุณควรจะทำงาน:
java MyLZW - r < foo.txt > foo.lzw ในทำนองเดียวกันเพื่อขยาย foo.lzw ไปยัง foo2.txt คุณควรเรียกใช้:
java MyLZW + < foo.lzw > foo2.txt