กลับไปหน้าบทความ

อ่าน 5 นาที

LZ77 และ LZ78

LZ77 และ LZ78 เป็น อัลกอริธึมการ บีบอัดข้อมูลแบบไม่สูญเสีย สอง อัลกอริธึม ที่ตีพิมพ์ในเอกสารโดย Abraham Lempel และ Jacob Ziv ในปี 1977 [ 1 ] และ 1978 [ 2 ] อัลกอริธึมทั้งสองนี้...

LZ77 และ LZ78

LZ77และLZ78 เป็น อัลกอริธึมการบีบอัดข้อมูลแบบไม่สูญเสีย สอง อัลกอริธึม ที่ตีพิมพ์ในเอกสารโดยAbraham LempelและJacob Zivในปี 1977 [ 1 ]และ 1978 [ 2 ] อัลกอริธึมทั้งสองนี้ ยังเป็นที่รู้จักในชื่อLempel-Ziv 1 (LZ1) และLempel-Ziv 2 (LZ2) ตามลำดับ[ 3 ]อัลกอริธึมทั้งสองนี้เป็นพื้นฐานสำหรับอัลกอริธึมรูปแบบต่างๆ มากมาย รวมถึงLZW , LZSS , LZMAและอื่นๆ นอกจากอิทธิพลทางวิชาการแล้ว อัลกอริธึมเหล่านี้ยังเป็นพื้นฐานของรูปแบบการบีบอัดที่แพร่หลายหลายรูปแบบ รวมถึงรูปแบบที่ใช้ในGIFและ อัลกอริธึม DEFLATEที่ ใช้ในPNGและZIP

ทั้งสองวิธีเป็นตัวเข้ารหัสแบบพจนานุกรม ในทางทฤษฎี LZ77 รักษาหน้าต่างเลื่อนระหว่างการบีบอัด ซึ่งต่อมาพบว่าเทียบเท่ากับพจนานุกรมที่สร้างขึ้นอย่างชัดเจนโดย LZ78 อย่างไรก็ตาม วิธีนี้จะเทียบเท่ากันเฉพาะเมื่อต้องการคลายการบีบอัดข้อมูลทั้งหมดเท่านั้น

เนื่องจาก LZ77 เข้ารหัสและถอดรหัสจากหน้าต่างเลื่อนเหนืออักขระที่เห็นก่อนหน้านี้ การคลายการบีบอัดจึงต้องเริ่มต้นที่จุดเริ่มต้นของอินพุตเสมอ ตามหลักการแล้ว การคลายการบีบอัด LZ78 อาจอนุญาตให้เข้าถึงอินพุตแบบสุ่มได้หากทราบพจนานุกรมทั้งหมดล่วงหน้า อย่างไรก็ตาม ในทางปฏิบัติ พจนานุกรมจะถูกสร้างขึ้นระหว่างการเข้ารหัสและการถอดรหัสโดยการสร้างวลีใหม่ทุกครั้งที่มีการส่งออกโทเค็น[ 4 ]

อัลกอริทึมเหล่านี้ได้รับการตั้งชื่อเป็นIEEE Milestoneในปี 2547 [ 5 ]ในปี 2564 Jacob Ziv ได้รับรางวัลIEEE Medal of Honorสำหรับการมีส่วนร่วมในการพัฒนาอัลกอริทึมเหล่านี้[ 6 ]

ประสิทธิภาพเชิงทฤษฎี

ในเอกสารฉบับที่สองจากสองฉบับที่แนะนำอัลกอริธึมเหล่านี้ จะมีการวิเคราะห์อัลกอริธึมเหล่านี้ในฐานะตัวเข้ารหัสที่กำหนดโดยเครื่องจักรสถานะจำกัด มีการพัฒนามาตรวัดที่คล้ายคลึงกับเอนโทรปีของข้อมูลสำหรับลำดับแต่ละรายการ (ตรงข้ามกับกลุ่มความน่าจะเป็น) มาตรวัดนี้ให้ขอบเขตของอัตราส่วนการบีบอัดข้อมูลที่สามารถทำได้ จากนั้นจึงแสดงให้เห็นว่ามีตัวเข้ารหัสแบบไม่สูญเสียข้อมูลจำนวนจำกัดสำหรับทุกลำดับที่บรรลุขอบเขตนี้เมื่อความยาวของลำดับเพิ่มขึ้นเป็นอนันต์ ในแง่นี้ อัลกอริธึมที่อิงตามแผนการนี้จะสร้างการเข้ารหัสที่เหมาะสมที่สุดในเชิงอะซิมโทติก ผลลัพธ์นี้สามารถพิสูจน์ได้โดยตรงมากขึ้น เช่น ในบันทึกของPeter Shor [ 7 ]

ในทางทฤษฎี (ทฤษฎีบท 13.5.2 [ 8 ] )

LZ78 เป็นสากลและมีเอนโทรปีถ้าเป็นแหล่งกำเนิดไบนารีที่อยู่กับที่และมีเออร์โกดิก แล้วจะมีความน่าจะเป็น 1 โดยที่คืออัตราเอนโทรปีของแหล่งกำเนิด

ทฤษฎีบทที่คล้ายกันนี้สามารถนำไปใช้กับอัลกอริธึม LZ เวอร์ชันอื่นๆ ได้เช่นกัน

แอลซี77

อัลกอริทึม LZ77 บีบอัดข้อมูลโดยการแทนที่ข้อมูลที่ซ้ำกันด้วยการอ้างอิงถึงสำเนาเดียวของข้อมูลนั้นที่มีอยู่ก่อนหน้าในสตรีมข้อมูลที่ยังไม่ได้บีบอัด การจับคู่จะถูกเข้ารหัสด้วยคู่ตัวเลขที่เรียกว่าคู่ความยาว-ระยะทางซึ่งเทียบเท่ากับข้อความที่ว่า "อักขระตัวถัดไปที่ความยาวเท่ากับอักขระ ที่อยู่ข้างหลังมันเป็น ระยะระยะทางในสตรีมข้อมูลที่ยังไม่ได้บีบอัด" ( บางครั้ง ระยะทาง นี้ เรียกว่าค่าชดเชย )

ในการค้นหาข้อมูลที่ตรงกัน ตัวเข้ารหัสจะต้องเก็บข้อมูลล่าสุดไว้จำนวนหนึ่ง เช่น 2  KB , 4 KB หรือ 32 KB ล่าสุด โครงสร้างที่ใช้เก็บข้อมูลนี้เรียกว่าหน้าต่างเลื่อน (sliding window ) ซึ่งเป็นเหตุผลว่าทำไม LZ77 จึงถูกเรียกว่าการบีบอัดแบบหน้าต่างเลื่อน (sliding-window compression ) ในบางครั้ง ตัวเข้ารหัสจำเป็นต้องเก็บข้อมูลนี้ไว้เพื่อค้นหาข้อมูลที่ตรงกัน และตัวถอดรหัสจำเป็นต้องเก็บข้อมูลนี้ไว้เพื่อตีความข้อมูลที่ตรงกันซึ่งตัวเข้ารหัสอ้างถึง ยิ่งหน้าต่างเลื่อนมีขนาดใหญ่เท่าใด ตัวเข้ารหัสก็ยิ่งสามารถค้นหาข้อมูลอ้างอิงย้อนหลังได้ไกลมากขึ้นเท่านั้น

การอนุญาตให้ระบุความยาวที่มากกว่าระยะทางในคู่ความยาว-ระยะทางนั้น ไม่เพียงแต่เป็นที่ยอมรับ แต่ยังมักมีประโยชน์อีกด้วย ตัวอย่างเช่น คำสั่ง "ย้อนกลับไปสี่ตัวอักษร แล้วคัดลอกสิบตัวอักษรจากตำแหน่งนั้นไปยังตำแหน่งปัจจุบัน" อาจดูสับสน จะคัดลอกสิบตัวอักษรได้อย่างไร ในเมื่อในบัฟเฟอร์มีเพียงสี่ตัวอักษรเท่านั้น? แต่ถ้าจัดการทีละไบต์ จะไม่มีปัญหาในการตอบสนองคำขอ เพราะเมื่อคัดลอกไบต์แล้ว ก็สามารถป้อนไบต์นั้นกลับเข้าไปในคำสั่งคัดลอกได้อีกครั้ง เมื่อตำแหน่งที่คัดลอกมาจากไปถึงตำแหน่งปลายทางเริ่มต้น ก็จะได้รับข้อมูลที่ถูกวางจากจุดเริ่มต้นของตำแหน่งที่คัดลอกมาจาก ดังนั้น การดำเนินการจึงเทียบเท่ากับคำสั่ง "คัดลอกข้อมูลที่คุณได้รับ แล้ววางซ้ำๆ จนกว่าจะพอดี" เนื่องจากคู่ประเภทนี้ทำซ้ำสำเนาข้อมูลเดียวหลายครั้ง จึงสามารถนำไปใช้เพื่อสร้างรูปแบบการเข้ารหัสแบบRun-Length Encodingที่ ยืดหยุ่นและใช้งานง่ายได้

อีกวิธีหนึ่งในการมองสิ่งต่างๆ คือดังนี้: ในระหว่างการเข้ารหัส เพื่อให้ตัวชี้การค้นหาค้นหาคู่ที่ตรงกันต่อไปได้แม้จะเลยจุดสิ้นสุดของหน้าต่างการค้นหาแล้ว อักขระทั้งหมดตั้งแต่การจับคู่ครั้งแรกที่ตำแหน่งออฟเซ็ตDไปจนถึงจุดสิ้นสุดของหน้าต่างการค้นหาจะต้องตรงกับอินพุต และอักขระเหล่านี้ (ที่เคยเห็นมาก่อน) จะประกอบเป็นหน่วยรันเดียวที่มีความยาวL Rซึ่งต้องเท่ากับDจากนั้นเมื่อตัวชี้การค้นหาเคลื่อนที่ผ่านหน้าต่างการค้นหาและไปข้างหน้า ตราบเท่าที่รูปแบบรันซ้ำในอินพุต ตัวชี้การค้นหาและตัวชี้อินพุตจะซิงค์กันและจับคู่อักขระจนกว่ารูปแบบรันจะถูกขัดจังหวะ จากนั้นจะมีอักขระที่ตรงกันทั้งหมดL ตัว L > Dและรหัสคือ [ D , L , c ]

เมื่อถอดรหัส [ D , L , c ] อีกครั้งD = L R เมื่อ อ่านอักขระL Rตัวแรกไป ยังเอาต์พุต จะสอดคล้องกับหน่วยรันเดียวที่ถูกเพิ่มเข้าไปในบัฟเฟอร์เอาต์พุต ณ จุดนี้ ตัวชี้การอ่านอาจคิดได้ว่าจำเป็นต้องกลับไปยังจุดเริ่มต้นของหน่วยรันเดียวในบัฟเฟอร์นั้นเพียง int( L / L R ) + (1 ถ้าL mod L R ≠ 0) ครั้ง อ่าน อักขระ L Rตัว (หรืออาจน้อยกว่านั้นในการกลับครั้งสุดท้าย) และทำซ้ำจนกว่าจะอ่านอักขระได้ทั้งหมดLตัว แต่เนื่องจากรูปแบบซ้ำกัน ตัวชี้การอ่านจึงจำเป็นต้องติดตามไปพร้อมกับตัวชี้การเขียนด้วยระยะทางคงที่เท่ากับความยาวของรันL Rจนกว่าจะคัดลอกอักขระไปยังเอาต์พุตทั้งหมด L ตัว

เมื่อพิจารณาจากข้างต้น โดยเฉพาะอย่างยิ่งหากคาดว่าการบีบอัดข้อมูลแบบต่อเนื่องจะมีบทบาทสำคัญ การค้นหาแบบหน้าต่างควรเริ่มต้นที่จุดสิ้นสุดของหน้าต่างและดำเนินการย้อนกลับ เนื่องจากรูปแบบการต่อเนื่อง หากมีอยู่ จะถูกพบก่อนและทำให้การค้นหาสิ้นสุดลงได้ อย่างแน่นอนหากความยาวลำดับที่ตรงกันสูงสุดในปัจจุบันถึงขีดจำกัด หรืออย่างรอบคอบหากความยาวเพียงพอ และสุดท้ายเพื่อความเป็นไปได้ง่ายๆ ว่าข้อมูลนั้นใหม่กว่าและอาจมีความสัมพันธ์ที่ดีกว่ากับข้อมูลนำเข้าถัดไป

รหัสเทียม

รหัสเทียมต่อไปนี้เป็นการจำลองการทำงานของอัลกอริทึมการบีบอัดข้อมูล LZ77 แบบหน้าต่างเลื่อน (sliding window)

ในขณะที่ช่องป้อนข้อมูลไม่ว่างเปล่าให้ทำดังนี้ ตรงกับการปรากฏซ้ำที่ยาวที่สุดของอินพุตที่เริ่มต้นในหน้าต่าง ถ้าพบการจับคู่แล้ว d := ระยะทางถึงจุดเริ่มต้นของการแข่งขัน l := ความยาวของการจับคู่ c := อักขระที่ตรงกับข้อมูลป้อนเข้า อื่น d := 0 l := 0 c := อักขระตัวแรกของข้อมูลป้อนเข้า จบถ้าเอาต์พุต (d, l, c) ลบอักขระl + 1 ตัวจากด้านหน้าของหน้าต่าง s := ดึงอักขระl + 1 ตัวจากด้านหน้าของอินพุต เพิ่มตัวอักษร s ต่อท้ายหน้าต่าง ทำซ้ำ

การนำไปใช้

แม้ว่าอัลกอริทึม LZ77 ทั้งหมดจะทำงานบนหลักการพื้นฐานเดียวกันตามคำนิยาม แต่ก็อาจแตกต่างกันอย่างมากในวิธีการเข้ารหัสข้อมูลที่บีบอัด เพื่อให้ช่วงตัวเลขของคู่ความยาว-ระยะทางเปลี่ยนแปลงไป จำนวนบิตที่ใช้สำหรับคู่ความยาว-ระยะทาง และเพื่อแยกความแตกต่างระหว่างคู่ความยาว-ระยะทางกับค่าคงที่ (ข้อมูลดิบที่เข้ารหัสเป็นตัวมันเอง ไม่ใช่เป็นส่วนหนึ่งของคู่ความยาว-ระยะทาง) ตัวอย่างบางส่วน:

  • อัลกอริทึมที่แสดงในบทความต้นฉบับปี 1977 ของ Lempel และ Ziv จะส่งออกข้อมูลทั้งหมดทีละสามค่า ได้แก่ ความยาวและระยะห่างของการจับคู่ที่ยาวที่สุดที่พบในบัฟเฟอร์ และตัวอักษรที่ตามหลังการจับคู่นั้น หากอักขระสองตัวที่อยู่ติดกันในสตรีมอินพุตสามารถเข้ารหัสได้เฉพาะในรูปแบบตัวอักษรเท่านั้น ความยาวของคู่ความยาว-ระยะห่างจะเป็น 0
  • LZSSปรับปรุงจาก LZ77 โดยใช้แฟล็ก 1 บิตเพื่อระบุว่าส่วนข้อมูลถัดไปเป็นค่าคงที่หรือคู่ความยาว-ระยะทาง และจะใช้ค่าคงที่หากคู่ความยาว-ระยะทางมีความยาวมากกว่า
  • ในรูปแบบ PalmDoc คู่ความยาว-ระยะทางจะถูกเข้ารหัสด้วยลำดับสองไบต์เสมอ โดยในจำนวน 16 บิตที่ประกอบกันเป็นสองไบต์นี้ 11 บิตจะใช้ในการเข้ารหัสระยะทาง 3 บิตใช้ในการเข้ารหัสความยาว และอีก 2 บิตที่เหลือใช้เพื่อให้แน่ใจว่าตัวถอดรหัสสามารถระบุไบต์แรกว่าเป็นจุดเริ่มต้นของลำดับสองไบต์ดังกล่าวได้
  • ในการใช้งานที่ใช้สำหรับเกมหลายเกมโดยElectronic Arts [ 9 ] ขนาดเป็นไบต์ของคู่ความยาว-ระยะทางสามารถระบุได้ภายในไบต์แรกของคู่ความยาว-ระยะทางนั้นเอง โดยขึ้นอยู่กับว่าไบต์แรกขึ้นต้นด้วย 0, 10, 110 หรือ 111 (เมื่ออ่านใน ทิศทางบิต แบบ big-endian ) ความยาวของคู่ความยาว-ระยะทางทั้งหมดสามารถเป็น 1 ถึง 4 ไบต์
  • ณ ปี 2008 วิธีการบีบอัดข้อมูลแบบ LZ77 ที่ได้รับความนิยมมากที่สุดคือDEFLATEซึ่งเป็นการผสมผสาน LZSS กับ การ เข้ารหัสHuffman [ 10 ]ตัวอักษร ความยาว และสัญลักษณ์เพื่อระบุจุดสิ้นสุดของบล็อกข้อมูลปัจจุบันจะถูกจัดวางไว้ด้วยกันในตัวอักษรเดียวกัน ระยะทางสามารถจัดวางไว้ในตัวอักษรแยกต่างหากได้อย่างปลอดภัย เนื่องจากระยะทางจะปรากฏอยู่หลังความยาวเท่านั้น จึงไม่สามารถสับสนกับสัญลักษณ์ชนิดอื่นหรือในทางกลับกันได้

แอลซี78

อัลกอริทึม LZ78 บีบอัดข้อมูลแบบลำดับโดยการสร้างพจนานุกรมของลำดับโทเค็นจากข้อมูลอินพุต จากนั้นแทนที่การปรากฏครั้งที่สองและครั้งต่อๆ ไปของลำดับในสตรีมข้อมูลด้วยการอ้างอิงถึงรายการในพจนานุกรม ข้อสังเกตคือจำนวนลำดับที่ซ้ำกันเป็นตัววัดที่ดีของลักษณะที่ไม่สุ่มของลำดับ อัลกอริทึมแสดงพจนานุกรมเป็นต้นไม้n -ary โดยที่ nคือจำนวนโทเค็นที่ใช้ในการสร้างลำดับโทเค็น แต่ละรายการในพจนานุกรมมีรูปแบบdictionary[...] = {index, token}โดยที่indexคือดัชนีของรายการในพจนานุกรมที่แสดงถึงลำดับที่เคยเห็นมาก่อน และtokenคือโทเค็นถัดไปจากข้อมูลอินพุตที่ทำให้รายการนี้ไม่ซ้ำกันในพจนานุกรม โปรดสังเกตว่าอัลกอริทึมเป็นแบบโลภ (greedy) ดังนั้นจะไม่มีการเพิ่มอะไรลงในตารางจนกว่าจะพบโทเค็นที่ทำให้ไม่ซ้ำกัน อัลกอริทึมจะเริ่มต้นดัชนีที่ตรงกันครั้งสุดท้าย = 0 และดัชนีที่ว่างถัดไป = 1 จากนั้นสำหรับแต่ละโทเค็นของสตรีมอินพุต พจนานุกรมจะค้นหาการจับคู่{last matching index, token}: หากพบการจับคู่ ระบบจะตั้งค่าดัชนีการจับคู่ล่าสุดเป็นดัชนีของรายการที่ตรงกัน จะไม่มีการแสดงผลใดๆ และดัชนีการจับคู่ล่าสุดจะยังคงแสดงถึงข้อมูลที่ป้อนเข้ามาจนถึงขณะนี้ ระบบจะประมวลผลข้อมูลจนกว่าจะไม่พบการจับคู่ จากนั้นจะสร้างรายการพจนานุกรมใหม่dictionary[next available index] = {last matching index, token}และอัลกอริทึมจะแสดงผลดัชนีการจับคู่ล่าสุด ตามด้วยโทเค็น จากนั้นจะรีเซ็ตดัชนีการจับคู่ล่าสุดเป็น 0 และเพิ่มดัชนีที่ว่างอยู่ถัดไป ตัวอย่างเช่น พิจารณาลำดับของโทเค็นอาบบาซึ่งจะรวบรวมเป็นพจนานุกรม;

0 {0,_} 1 {0,A} 2 {1,B} 3 {0,B} 

และลำดับเอาต์พุตของข้อมูลที่ถูกบีบอัดจะเป็นดังนี้0A1B0Bโปรดทราบว่าสุดท้ายเอยังไม่ได้แสดงผล เนื่องจากอัลกอริทึมไม่สามารถรู้ได้ว่าอะไรจะเกิดขึ้นต่อไป ในทางปฏิบัติ จะมีการเพิ่มเครื่องหมาย EOF เข้าไปในข้อมูลนำเข้า:อาบบา$ตัวอย่างเช่น โปรดสังเกตด้วยว่าในกรณีนี้ผลลัพธ์0A1B0B1$มีความยาวมากกว่าอินพุตเดิม แต่อัตราส่วนการบีบอัดจะดีขึ้นอย่างมากเมื่อพจนานุกรมมีขนาดใหญ่ขึ้น และในรูปแบบไบนารี ดัชนีไม่จำเป็นต้องแสดงด้วยจำนวนบิตขั้นต่ำ[ 11 ]

การคลายการบีบอัดประกอบด้วยการสร้างพจนานุกรมขึ้นใหม่จากลำดับที่ถูกบีบอัด จากลำดับนั้น0A1B0B1$รายการแรกมักจะเป็นตัวจบเกมเสมอ0 {...}และตัวแรกจากลำดับนั้นจะเป็น1 {0,A}. เดอะเอถูกเพิ่มเข้าไปในผลลัพธ์ คู่ที่สองจากอินพุตคือ1บีและส่งผลให้มีการบันทึกเป็นลำดับที่ 2 ในพจนานุกรม{1,B}โทเค็นBจะถูกส่งออกมา โดยมีลำดับที่แสดงโดยรายการในพจนานุกรมหมายเลข 1 นำหน้า รายการหมายเลข 1 คือA(ตามด้วย "รายการหมายเลข 0" – ไม่มีอะไร) ดังนั้นเอบีจะถูกเพิ่มเข้าไปในผลลัพธ์ ถัดไป0Bถูกเพิ่มเข้าไปในพจนานุกรมเป็นรายการถัดไป3 {0,B}และB(โดยไม่มีอะไรนำหน้า) จะถูกเพิ่มเข้าไปในผลลัพธ์ สุดท้าย รายการในพจนานุกรมสำหรับ1 ดอลลาร์ถูกสร้างขึ้น และA$เป็นผลลัพธ์ที่ได้คือเอ เอบี บีเอ, หรืออาบบาโดยลบช่องว่างและเครื่องหมาย EOF ออก

แอลซีดับบลิว

LZWเป็นอัลกอริธึมที่พัฒนามาจาก LZ78 โดยใช้พจนานุกรมที่กำหนดค่าเริ่มต้นไว้ล่วงหน้าด้วยอักขระ (สัญลักษณ์) ที่เป็นไปได้ทั้งหมด หรือการจำลองพจนานุกรมที่กำหนดค่าเริ่มต้นไว้ล่วงหน้า ข้อดีหลักของLZWคือ เมื่อไม่พบการจับคู่ อักขระในสตรีมอินพุตปัจจุบันจะถือว่าเป็นอักขระตัวแรกของสตริงที่มีอยู่แล้วในพจนานุกรม (เนื่องจากพจนานุกรมถูกกำหนดค่าเริ่มต้นไว้ด้วยอักขระที่เป็นไปได้ทั้งหมด) ดังนั้นจึงแสดงเฉพาะดัชนีการจับคู่สุดท้ายเท่านั้น (ซึ่งอาจเป็นดัชนีพจนานุกรมที่กำหนดค่าเริ่มต้นไว้ล่วงหน้าซึ่งสอดคล้องกับอักขระอินพุตก่อนหน้า (หรือตัวแรก)) โปรดดู บทความเกี่ยวกับ LZWสำหรับรายละเอียดการใช้งาน

BTLZเป็นอัลกอริธึมที่ใช้ LZ78 ซึ่งพัฒนาขึ้นเพื่อใช้ในระบบสื่อสารแบบเรียลไทม์ (เดิมคือโมเด็ม) และได้รับการกำหนดมาตรฐานโดย CCITT/ITU เป็นV.42bisเมื่อ พจนานุกรมที่มีโครงสร้าง แบบไทรเต็ม จะมีการใช้อัลกอริธึมการนำกลับมาใช้ใหม่/การกู้คืนอย่างง่ายเพื่อให้แน่ใจว่าพจนานุกรมสามารถปรับตัวให้เข้ากับข้อมูลที่เปลี่ยนแปลงได้ ตัวนับจะวนรอบพจนานุกรม เมื่อต้องการรายการใหม่ ตัวนับจะวนไปในพจนานุกรมจนกว่าจะพบโหนดใบ (โหนดที่ไม่มีโหนดอื่นขึ้นอยู่ด้วย) โหนดนั้นจะถูกลบออกและนำพื้นที่นั้นกลับมาใช้สำหรับรายการใหม่ วิธีนี้ง่ายต่อการใช้งานมากกว่า LRU หรือ LFU และให้ประสิทธิภาพที่เทียบเท่ากัน

ดูเพิ่มเติม

  • โลโก้ Wikimedia Commonsสื่อที่เกี่ยวข้องกับอัลกอริทึม LZ77ใน Wikimedia Commons
  • โลโก้ Wikimedia Commonsสื่อที่เกี่ยวข้องกับอัลกอริทึม LZ78ใน Wikimedia Commons
  • "อัลกอริทึม LZ77"ศูนย์อ้างอิงการบีบอัดข้อมูล: กลุ่มงาน RASIPคณะวิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ มหาวิทยาลัยซาเกร็บ 1997 สืบค้นเมื่อ22 มิถุนายน 2012{{cite web}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )
  • "อัลกอริทึม LZ78"ศูนย์อ้างอิงการบีบอัดข้อมูล: กลุ่มงาน RASIPคณะวิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ มหาวิทยาลัยซาเกร็บ 1997 สืบค้นเมื่อ22 มิถุนายน 2012{{cite web}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )
  • "อัลกอริทึม LZW"ศูนย์อ้างอิงการบีบอัดข้อมูล: กลุ่มงาน RASIPคณะวิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ มหาวิทยาลัยซาเกร็บ 1997 สืบค้นเมื่อ22 มิถุนายน 2012{{cite web}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=LZ77_and_LZ78&oldid=1348045135#LZ78 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ LZ77 และ LZ78

LZ77 และ LZ78 เป็น อัลกอริธึมการ บีบอัดข้อมูลแบบไม่สูญเสีย สอง อัลกอริธึม ที่ตีพิมพ์ในเอกสารโดย Abraham Lempel และ Jacob Ziv ในปี 1977 [ 1 ] และ 1978 [ 2 ] อัลกอริธึมทั้งสองนี้...

ประสิทธิภาพเชิงทฤษฎี

ในเอกสารฉบับที่สองจากสองฉบับที่แนะนำอัลกอริธึมเหล่านี้ จะมีการวิเคราะห์อัลกอริธึมเหล่านี้ในฐานะตัวเข้ารหัสที่กำหนดโดยเครื่องจักรสถานะจำกัด มีการพัฒนามาตรวัดที่คล้ายคลึงกับ เอนโทรปีของข้อมูล สำหรับลำดับแต่ละรายการ (ตรงข้ามกับกลุ่มความน่าจะเป็น)...

แอลซี77

อัลกอริทึม LZ77 บีบอัดข้อมูลโดยการแทนที่ข้อมูลที่ซ้ำกันด้วยการอ้างอิงถึงสำเนาเดียวของข้อมูลนั้นที่มีอยู่ก่อนหน้าในสตรีมข้อมูลที่ยังไม่ได้บีบอัด การจับคู่จะถูกเข้ารหัสด้วยคู่ตัวเลขที่เรียกว่า คู่ความยาว-ระยะทาง ซึ่งเทียบเท่ากับข้อความที่ว่า "อักขระตัวถัดไปที่...

รหัสเทียม

รหัสเทียม ต่อไปนี้เป็นการจำลองการทำงานของอัลกอริทึมการบีบอัดข้อมูล LZ77 แบบหน้าต่างเลื่อน (sliding window)