5.4.1 Entropy and Ambiguity
By this point in the book, you have already seen many examples of probability
distributions. Compression techniques are based on probabilities, too. The fundamental idea behind compression is to represent common data elements with
short codes while representing uncommon data elements with longer codes. The
inverted lists that we have discussed are essentially lists of numbers, and without compression, each number takes up the same amount of space. Since some of
those numbers are more frequent than others, if we encode the frequent numbers
with short codes and the infrequent numbers with longer codes, we can end up
with space savings.
For example, consider the numbers 0, 1, 2, and 3. We can encode these numbers using two binary bits. A sequence of numbers, like:
0, 1, 0, 3, 0, 2, 0
can be encoded in a sequence of binary digits:
00 01 00 10 00 11 00
Note that the spaces in the binary sequence are there to make it clear where each
number starts and stops, and are not actually part of the encoding.
In our example sequence, the number 0 occurs four times, whereas each of the
other numbers occurs just once. We may decide to save space by encoding 0 using
just a single 0 bit. Our first attempt at an encoding might be:
0 01 0 10 0 11 0
This looks very successful because this encoding uses just 10 bits instead of the 14
bits used previously. This encoding is, however, ambiguous, meaning that it is not
clear how to decode it. Remember that the spaces in the code are only there for
our convenience and are not actually stored. If we add some different spaces, we
arrive at a perfectly valid interpretation of this encoding:
0 01 01 0 0 11 0
which, when decoded, becomes:
0, 1, 1, 0, 0, 3, 0
Unfortunately, this isn’t the data we encoded. The trouble is that when we see 010
in the encoded data, we can’t be sure whether (0, 2) or (1, 0) was encoded.
The uncompressed encoding was not ambiguous. We knew exactly where to
put the spaces because we knew that each number took exactly 2 bits. In our compressed code, encoded numbers consume either 1 or 2 bits, so it is not clear where
to put the spaces. To solve this problem, we need to restrict ourselves to unambiguous codes, which are confusingly called both prefix codes and prefix-free codes.
An unambiguous code is one where there is only one valid way to place spaces in
encoded data.
Let’s fix our code so that it is unambiguous:
5.4.1 entropy และคลุมเครือโดยในจุดนี้ คุณได้เห็นแล้วหลายตัวอย่างของความน่าเป็นการกระจาย เทคนิคการบีบอัดจะขึ้นอยู่น่าจะ เกินไป คิดพื้นฐานหลังการบีบอัดจะแสดงถึงองค์ประกอบทั่วไปของข้อมูลด้วยรหัสสั้นในขณะที่องค์ประกอบเรื่องข้อมูล ด้วยรหัสที่ยาวขึ้นแทน การกลับรายการที่เราได้กล่าวถึงจะเป็นหลักใช้รายการหมายเลข และไม่ มีการบีบ อัด แต่ละหมายเลขกันพื้นที่ ตั้งแต่บางหมายเลขดังกล่าวจะบ่อยขึ้นกว่าคนอื่น ๆ ถ้าเราเข้ารหัสหมายเลขบ่อยรหัสสั้นและตัวเลขที่ไม่บ่อยนัก ด้วยรหัสที่ยาวขึ้น เราสามารถจบลงประหยัดพื้นที่ตัวอย่างเช่น พิจารณาตัวเลข 0, 1, 2 และ 3 เราสามารถเข้ารหัสตัวเลขเหล่านี้ใช้บิตไบนารีที่สอง ลำดับของตัวเลข เช่น:0, 1, 0, 3, 0, 2, 0สามารถถูกเข้ารหัสไว้ในลำดับของตัวเลขไบนารี:00 01 00 10 00 11 00ทราบว่า ช่องว่างในลำดับแบบไบนารีจะมีการ ทำให้ชัดเจนว่าแต่ละหมายเลขเริ่มต้น และหยุด และไม่จริงเป็นส่วนหนึ่งของการเข้ารหัสของเราตัวอย่างลำดับ เลข 0 เกิดขึ้นสี่ครั้ง ในขณะที่แต่ละหมายเลขอื่น ๆ เกิดขึ้นเพียงครั้งเดียว เราอาจตัดสินใจที่จะประหยัดพื้นที่ โดยการเข้ารหัสโดยใช้ 0เพียง 0 บิตเดียว ความพยายามครั้งแรกของเราที่การเข้ารหัสอาจเป็น:0 01 0 10 0 11 0นี้ดูประสบความสำเร็จมากเนื่องจากการเข้ารหัสนี้เพียง 10 บิตแทนการบิตที่ใช้ก่อนหน้านี้ การเข้ารหัสนี้ไม่ อย่างไรก็ตาม ชัดเจน หมายความ ว่า ไม่ล้างวิธีการถอดรหัส จำได้ว่า ช่องว่างในรหัสมีเฉพาะสำหรับสะดวกและมีของเราไม่ได้เก็บ ถ้าเราเพิ่มบางพื้นที่แตกต่างกัน เรามาถึงการตีความถูกต้องสมบูรณ์ของการเข้ารหัสนี้:0 01 01 0 0 11 0ซึ่ง เมื่อถอด :0, 1, 1, 0, 0, 3, 0แต่ นี้ไม่ใช่ข้อมูลที่เราเข้ารหัส ปัญหาคือเมื่อเราเห็น 010ในการเข้ารหัสข้อมูล เราไม่สามารถแน่ใจว่า (0, 2) หรือ (1, 0) ถูกเข้ารหัสไว้ได้การเข้ารหัสบีบอัดไม่ชัดเจน เรารู้ว่าที่ไหนใส่ช่องว่าง เพราะเรารู้ว่า แต่ละหมายเลขเอาตรง 2 บิต ในรหัสของเราบีบอัด เลขรหัสใช้ 1 หรือ 2 บิต ดังนั้นจึงไม่ชัดเจนว่าการใส่ช่องว่าง การแก้ปัญหานี้ เราต้องจำกัดตัวเองให้รหัสชัดเจน ซึ่งจะเรียกว่าคลึงทั้งรหัสนำหน้าและรหัสนำหน้าฟรีรหัสชัดเจนเป็นหนึ่งมีทางเดียวเท่านั้นถูกต้องที่ช่องว่างในการเข้ารหัสข้อมูลขอแก้ไขรหัสของเราเพื่อให้มีความชัดเจน:
การแปล กรุณารอสักครู่..
5.4.1 เอนโทรปีและความคลุมเครือ
จากจุดนี้ในหนังสือเล่มนี้คุณได้เห็นแล้วหลายตัวอย่างของความน่าจะ
กระจาย เทคนิคการบีบอัดอยู่บนพื้นฐานของความน่าจะเป็นมากเกินไป ความคิดพื้นฐานที่อยู่เบื้องหลังการบีบอัดคือการแสดงองค์ประกอบข้อมูลร่วมกันกับ
รหัสสั้น ๆ ในขณะที่ตัวแทนขององค์ประกอบข้อมูลเรื่องแปลกอีกต่อไปด้วยรหัส
รายการคว่ำที่เราได้พูดคุยเป็นหลักรายการของตัวเลขและไม่มีการบีบอัดแต่ละหมายเลขจะขึ้นจำนวนเดียวกันของพื้นที่ เนื่องจากบางส่วนของ
ตัวเลขเหล่านั้นบ่อยกว่าคนอื่น ๆ ถ้าเราเข้ารหัสหมายเลขบ่อย
ด้วยรหัสสั้นและตัวเลขที่ไม่บ่อยนักที่มีรหัสอีกต่อไปเราสามารถจบลง
ด้วยการประหยัดพื้นที่.
ตัวอย่างเช่นพิจารณาตัวเลข 0, 1, 2 และ 3 . เราสามารถเข้ารหัสตัวเลขเหล่านี้โดยใช้สองบิตไบนารี ลำดับของตัวเลขที่ชอบ:
0, 1, 0, 3, 0, 2, 0
สามารถเข้ารหัสในลำดับของตัวเลขไบนารี:
00 01 00 10 00 11 00
หมายเหตุว่าช่องว่างในลำดับไบนารีจะมีที่จะให้มัน ชัดเจนที่แต่ละ
จำนวนเริ่มต้นและหยุดและไม่ได้เป็นส่วนหนึ่งของการเข้ารหัส.
ในลำดับตัวอย่างของเรา 0 จำนวนครั้งที่สี่เกิดขึ้นในขณะที่แต่ละ
หมายเลขอื่น ๆ ที่เกิดขึ้นเพียงครั้งเดียว เราอาจตัดสินใจที่จะประหยัดพื้นที่โดยการเข้ารหัส 0 ใช้
เพียงครั้งเดียวบิต 0 ความพยายามครั้งแรกของเราที่เข้ารหัสอาจจะ:
0 01 0 10 0 11 0
นี้มีลักษณะที่ประสบความสำเร็จมากเพราะการเข้ารหัสนี้ใช้เวลาเพียง 10 บิตแทน 14
บิตที่ใช้ก่อนหน้านี้ การเข้ารหัสนี้เป็นอย่างไรคลุมเครือหมายความว่ามันไม่ได้
ชัดเจนถึงวิธีการถอดรหัสได้ โปรดจำไว้ว่าช่องว่างในรหัสมีเพียงสำหรับ
ความสะดวกสบายของเราและจะไม่เก็บไว้จริง ถ้าเราเพิ่มช่องว่างที่แตกต่างกันบางอย่างที่เรา
ประสบความสำเร็จในการตีความที่ถูกต้องสมบูรณ์ของการเข้ารหัสนี้:
0 01 01 0 0 11 0
ซึ่งเมื่อถอดรหัสจะกลายเป็น
0, 1, 1, 0, 0, 3, 0
แต่น่าเสียดายที่นี้ ISN ' t ข้อมูลที่เราเข้ารหัส ปัญหาคือว่าเมื่อเราเห็น 010
ในการเข้ารหัสข้อมูลที่เราไม่สามารถมั่นใจได้ว่า (0, 2) หรือ (1, 0) เข้ารหัส.
การเข้ารหัสบีบอัดก็ไม่คลุมเครือ เรารู้ว่าที่ที่จะ
ใส่ช่องว่างเพราะเรารู้ว่าแต่ละหมายเลขเอาตรง 2 บิต ในรหัสการบีบอัดของเราหมายเลขเข้ารหัสกิน 1 หรือ 2 บิตดังนั้นมันจะไม่ชัดเจนที่
จะนำช่องว่าง เพื่อแก้ปัญหานี้เราจำเป็นต้อง จำกัด ตัวเองให้รหัสที่ชัดเจนซึ่งเรียกว่าพลุกพล่านรหัสคำนำหน้าทั้งสองและรหัสคำนำหน้าฟรี.
รหัสโปร่งใสเป็นหนึ่งในสถานที่ที่มีเพียงหนึ่งวิธีที่ถูกต้องในการวางช่องว่างใน
เข้ารหัสข้อมูล.
ขอแก้ไขรหัสของเรา ดังนั้นมันจึงเป็นที่ชัดเจน:
การแปล กรุณารอสักครู่..
5.4.1 เอนโทรปีและความคลุมเครือโดยจุดนี้ในหนังสือ คุณจะเห็นตัวอย่างมากมายของความน่าจะเป็นการแจกแจง . เทคนิคการบีบอัดจะขึ้นอยู่กับความน่าจะเป็นด้วย ความคิดพื้นฐานหลังการบีบอัดคือการเป็นตัวแทนขององค์ประกอบข้อมูลทั่วไปกับรหัสสั้นในขณะที่แสดงพิสดารข้อมูลองค์ประกอบด้วยรหัสอีกต่อไป ที่กลับรายการที่เราได้กล่าวถึงเป็นหลักรายการของตัวเลข และไม่มีการบีบอัดแต่ละเบอร์จะขึ้นในจำนวนเดียวกันของพื้นที่ ตั้งแต่บางส่วนของตัวเลขเหล่านั้นจะบ่อยกว่าคนอื่น ถ้าเราเข้ารหัสตัวเลขบ่อย ๆด้วยรหัสสั้นและไม่บ่อยนักกับตัวเลขรหัสอีกต่อไป เราสามารถ ท้ายประหยัดพื้นที่ตัวอย่างเช่นพิจารณาตัวเลข 0 , 1 , 2 , และ 3 เราสามารถเข้ารหัสตัวเลขเหล่านี้ใช้สองไบนารีบิต ลำดับของตัวเลข เช่น :0 , 1 , 0 , 1 , 0 , 2 , 0สามารถสร้างลำดับของตัวเลขไบนารี :00 00 00 00 01 10 11ทราบว่าเป็นในลำดับเลขฐานสองมีที่จะให้มันชัดเจนที่แต่ละหมายเลขเริ่มต้นและหยุด และไม่ได้เป็นส่วนหนึ่งของการเข้ารหัสในลำดับตัวอย่างของเรา หมายเลข 0 เกิดขึ้น 4 ครั้ง ส่วนแต่ละส่วนของหมายเลขอื่น ๆเกิดขึ้นได้เพียงครั้งเดียว เราอาจตัดสินใจที่จะประหยัดพื้นที่โดยการเข้ารหัส 0 โดยใช้เพียงเดียว 0 นะ ความพยายามครั้งแรกของเราที่เข้ารหัสอาจจะ :0 1 0 10 0 11 0ลักษณะนี้ประสบความสำเร็จมาก เพราะใช้แค่ 10 บิตการเข้ารหัสแทน 14บิตที่ใช้ก่อนหน้านี้ นี้เข้ารหัสคือ , อย่างไรก็ตาม , คลุมเครือ , ความหมายนั้นมันไม่ล้างวิธีการถอดรหัสมัน จำได้ว่าเป็นในรหัสมีเท่านั้นสำหรับความสะดวกสบายของเราและไม่ได้ถูกเก็บไว้ ถ้าเราเติมช่องว่างบางอย่างเราต่างกันมาถึงการตีความที่ถูกต้องสมบูรณ์ของการเข้ารหัส :01 01 0 0 11 0 0ซึ่งเมื่อถอดรหัสจะ :0 , 1 , 1 , 0 , 0 , 1 , 0แต่นี่ไม่ใช่ ข้อมูลที่เข้ารหัส ปัญหาคือว่า เมื่อเราเห็น 010ในข้อมูลถูกเข้ารหัส เราไม่สามารถแน่ใจได้ว่า ( 0 , 2 ) หรือ ( 1 , 0 ) ถูกเข้ารหัสที่ไม่มีการบีบอัดการเข้ารหัสที่ไม่คลุมเครือ เรารู้ว่าที่ไหนใส่เป็นเพราะเรารู้ว่าแต่ละหมายเลขได้ถูกต้อง 2 บิต ในการบีบอัดรหัสเข้ารหัสตัวเลขกิน 1 หรือ 2 บิต ดังนั้นมันไม่ได้ชัดเจนว่าใส่ช่องว่าง เพื่อแก้ปัญหานี้เราต้อง จำกัด ตัวเองให้รหัสที่ชัดเจน ซึ่งจะวุ่นวาย เรียกว่าทั้งคำนำหน้ารหัสนำหน้าและรหัสฟรีรหัสที่ชัดเจนเป็นหนึ่งซึ่งมีเพียงหนึ่งวิธีที่ถูกต้องในสถานที่เป็นในเข้ารหัสข้อมูลมาแก้ไขรหัสของเราเพื่อให้มันชัดเจน :
การแปล กรุณารอสักครู่..