รหัส Huffman ดีแค่ไหนเมื่อไม่มีตัวอักษรน่าจะเป็นขนาดใหญ่


21

รหัส Huffman สำหรับการกระจายความน่าจะเป็นpเป็นรหัสคำนำหน้าด้วยขั้นต่ำถัวเฉลี่ยถ่วงน้ำหนักความยาว codeword piiที่iคือความยาวของi TH codword มันเป็นทฤษฎีบทที่รู้จักกันดีว่าความยาวเฉลี่ยต่อสัญลักษณ์ของรหัส Huffman อยู่ระหว่างH(p)และH(p)+1 , ที่H(p)=ipilog2piคือเอนโทรปีของ Shannon ของการแจกแจงความน่าจะเป็น

ตัวอย่างที่ไม่ดีของบัญญัติซึ่งความยาวเฉลี่ยเกินกว่าเอนโทรปีของแชนนอนเกือบ 1 คือการแจกแจงความน่าจะเป็นเช่น{.999,.001}โดยที่เอนโทรปีมีค่าเกือบ 0 และความยาว codeword เฉลี่ยคือ 1 ระหว่างเอนโทรปีและความยาว codeword เกือบ11

แต่จะเกิดอะไรขึ้นเมื่อมีการจำกัดความน่าจะเป็นที่ใหญ่ที่สุดในการแจกแจงความน่าจะเป็น ตัวอย่างเช่นสมมติว่าความน่าจะเป็นทั้งหมดน้อยกว่า12 . ช่องว่างที่ใหญ่ที่สุดที่ฉันสามารถหาได้ในกรณีนี้คือการแจกแจงความน่าจะเป็นเช่น{.499,.499,.002}ซึ่งเอนโทรปีมีค่ามากกว่า 1 เล็กน้อยและความยาว codeword เฉลี่ยน้อยกว่า 1.5 เล็กน้อยทำให้ช่องว่างใกล้เข้ามา0.5. นี่เป็นสิ่งที่ดีที่สุดที่คุณสามารถทำได้หรือไม่? คุณสามารถให้ขอบเขตบนของช่องว่างที่น้อยกว่า 1 สำหรับกรณีนี้ได้หรือไม่?

ทีนี้ลองพิจารณากรณีที่ความน่าจะเป็นทั้งหมดเล็กมาก สมมติว่าคุณเลือกกระจายความน่าจะมากกว่าMตัวอักษรแต่ละคนมีความน่าจะเป็น1/M M ในกรณีนี้ช่องว่างที่ใหญ่ที่สุดเกิดขึ้นหากคุณเลือกM2kln2 2 ที่นี่คุณจะได้ช่องว่างประมาณ

1+lnln2ln2ln20.08607.
นี่เป็นสิ่งที่ดีที่สุดที่คุณสามารถทำได้ในสถานการณ์ที่ความน่าจะเป็นทั้งหมดเล็กหรือไม่?

คำถามนี้ได้รับแรงบันดาลใจจากนี้คำถาม TCS Stackexchange

คำตอบ:


19

มีเอกสารมากมายที่ศึกษาปัญหาที่คุณพูดถึงอย่างแน่นอน คนแรกในซีรีส์นี้เป็นบทความจาก Gallager "Variations on a Theme by Huffman", IEEE-IT, vol. 24, 1978, pp. 668-674 เขาพิสูจน์ให้เห็นว่าความแตกต่างระหว่างความยาว codeword เฉลี่ยของรหัส Huffman และเอนโทรปี (ที่เขาเรียกว่าปริมาณ "ซ้ำซ้อน") อยู่เสมออย่างเคร่งครัดน้อยกว่า (= ความน่าจะเป็นที่ใหญ่ที่สุดในการกระจายความน่าจะเป็น) ในกรณีที่ พี1 / 2และมันก็เป็นน้อยกว่าP + 0.086ถ้าP < 1 / 2 เป็นที่รู้จักกันดีกว่าขอบเขตคุณสามารถค้นหาได้ในเอกสารมากมายที่อ้างถึงงานของ Gallagerpp1/2p+0.086p<1/2


2
ที่ดีที่สุดผูกพันได้รับการค้นพบโดย Manstetten, ขอบเขตแน่นในความซ้ำซ้อนของรหัส Huffman
Yuval Filmus

2

ตัดสินโดยถูกผูกไว้ฉันเชื่อว่าคุณตั้งใจจะถามคำถามอื่น ... หรือคุณไม่ได้ระบุว่าคุณจะใช้ "ค่าเฉลี่ย" ได้อย่างไร ดังนั้นฉันจะตอบทั้งคู่ คำตอบคือไม่มีคำถามทั้งสองH(p)H(p)+1

ขั้นแรกถ้าคุณกำหนดความยาวรหัสเฉลี่ยโดยใช้การแจกแจงแบบสม่ำเสมอเหนือคำของโค้ดและรับเป็นขอบเขตบนความน่าจะเป็นขององค์ประกอบใด ๆ ให้พิจารณารหัสที่มีความยาวq + kโดยที่2 q - 1คำรหัสมีความยาวqและที่เหลืออีก2 Q + k - 1มีความยาวQ + k สำหรับการแจกแจงที่ถูกเข้ารหัสอย่างสมบูรณ์แบบด้วยรหัสนี้ความยาวเฉลี่ยจะเข้าใกล้q + kยกเว้นว่าคุณมีขอบเขตความน่าจะเป็นขององค์ประกอบหนึ่งที่ต่ำกว่าในขณะที่เอนโทรปีคือ2qq+k2q1q2q+k1q+kq+k .q+k2

ตอนนี้ให้เราพิจารณา "ความยาวเฉลี่ย" หมายถึงความยาวเฉลี่ย codeword เมื่อรหัส Huffman จะใช้ในการสำหรับพีที่นี่เป็นที่ถูกผูกไว้แน่นและมีการกระจายตัวอย่างบรรลุในขีด จำกัด ซึ่งเป็นหนึ่งในแต่ละองค์ประกอบเกิดขึ้นกับความน่าจะเป็น2 Q ± 1 / 2สำหรับQ Z (องค์ประกอบสุดท้ายได้รับมอบหมายความน่าจะเป็นที่เหลือใด ๆ แต่จะไม่ทำให้เกิดความแตกต่าง asymptotically)p2q±1/2qZ.

ตัวอย่างเช่นพิจารณาจากนั้นq=7.

A=52,B=76522 - 6.5 762 - 7.5A+B=128,A2+B/2128,maxAZAA=52,B=765226.57627.5

จากนั้นในขณะที่รหัส Huffman ประสบความสำเร็จการสูญเสียพลังงานแบบเอนโทรปี (โดยบังเอิญการสูญเสียของเอนโทรปีมีชื่อไม่ว่าคุณจะทำการเข้ารหัส Huffman หรือการเข้ารหัสโดยพลการสำหรับ : Kullback-Liebler divergenceเมื่อใช้มันฉันค้นพบเมื่อไม่กี่วันที่ผ่านมานำไปสู่ขอบเขตเชอร์คอฟสองด้านที่เข้มงวดมากขึ้นอย่างที่คุณเห็นใน Wikipedia for ChernoffH(X)=(526.5+767.5)/128=7.09375(520.5760.5)/1280.99436QD(PQ)=pilogpiqi+(1pi)log1pi1qi


1
ฉันค่อนข้างงุนงงกับตัวอย่างที่สองนี้ หากคุณมี codewords 128 ตัวจะมีรหัสที่มีความยาวคำโดยเฉลี่ย 7 (อันที่จริงความยาวของคำทั้งหมดมี 7) ซึ่งขัดแย้งกับคำสั่งของคุณว่าเอนโทรปีคือ 7.09375 เอนโทรปีของการแจกแจงนี้ (ซึ่งคุณได้โดยการหาค่าเฉลี่ยถ่วงน้ำหนักของและไม่ใช่ค่าเฉลี่ย) คือ 6.88 ในขณะที่ความยาวเฉลี่ยของรหัส Huffman คือ 7 นี่จะทำให้เกิดช่องว่าง (หรือ Kullback-Liebler divergence) ประมาณ 0.12 ซึ่งดูเหมือนจะดีกว่าตัวอย่างเล็กน้อย แต่ไม่ใกล้กับ 1log2pi
Peter Shor

และแน่นอนว่าคุณพูดถูก ผมตั้งใจจะถามเกี่ยวกับความยาว codeword คาดว่าภายใต้การกระจายความน่าพีp
Peter Shor

อ๊ะผมคาดคะเนเกี่ยวกับVS Bเรายังต้องการน้อยกว่าเล็กน้อย แต่บางอย่างเช่นเพื่อบังคับให้รายการน้อยลงในแถวล่าง สิ่งนี้จะให้B A AB 2kA+2B=2kA= 2 - 1 / A2+B/22kA+2B=2kA=21/221B.
คาร์ล

ที่จริงแล้วจะเป็น ... แต่ระบบสมการนี้ไม่มีวิธีแก้ปัญหาเชิงบวก - ดูเหมือนว่าเราไม่สามารถบังคับให้ทุกสิ่งเป็นพลังครึ่งจำนวนเต็มได้ ดังนั้นแทนที่จะและเราสามารถพิจารณาเช่นสำหรับครึ่งหนึ่งของรหัส Huffman และส่วนที่เหลือให้รายการ ...2 2A+B2 1/2 (1+x)/2k(1-x)/2 k + 1 32k1/2(1+x)/2k(1x)/2k+132k
Carl

ดังนั้นให้ลอง (ไม่เหมาะสม - ฉันคิดว่าขึ้นอยู่กับว่าคุณตัดสินใจที่จะปัดเศษขึ้นหรือลง) รายการที่มีความน่าจะเป็นและรายการที่มีความน่าจะเป็นมีเอนโทรปี7.5แทนที่จะเปลี่ยนที่รายการที่มีความน่าจะเป็นและรายการที่มีความน่าจะเป็น{2}) เอนโทรปีของการแจกแจงนี้คือซึ่งให้ 6.4023 ในขณะที่เอนโทรปีของรหัส Huffman คือ 7.5 ภายใต้เครื่องแบบและดังนั้นหากฉันคำนวณผิด (และฉันทำบ่อย) สิ่งนี้จะให้ช่องว่างประมาณ1 / 128 128 1 / 256 7.5 64 1 / 128 641/1281281/2567.564 1281/256(2-1/1/12821281/(21/256(21/2)(1-2 - 1.5 )7+2 - 1.58=7.3535 0.951/(22)7.5+(11/(2(2)))5.802(121.5)7+21.58=7.3535.0.950.95
คาร์ล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.