ในทฤษฎีข้อมูล "รหัสคำนำหน้า" เป็นพจนานุกรมที่ไม่มีคีย์ใดเป็นคำนำหน้าของอีก กล่าวอีกนัยหนึ่งนี่หมายความว่าไม่มีสตริงใดเริ่มต้นด้วยสตริงอื่นใด
ตัวอย่างเช่น{"9", "55"}
เป็นรหัสคำนำหน้า แต่{"5", "9", "55"}
ไม่ใช่
ข้อได้เปรียบที่ใหญ่ที่สุดของเรื่องนี้คือข้อความที่เข้ารหัสสามารถเขียนลงโดยไม่มีตัวคั่นระหว่างพวกเขาและมันจะยังสามารถถอดรหัสได้โดยไม่ซ้ำกัน สิ่งนี้แสดงให้เห็นในอัลกอริธึมการบีบอัดเช่นการเข้ารหัส Huffmanซึ่งจะสร้างรหัสคำนำหน้าที่ดีที่สุดเสมอ
งานของคุณง่าย: ได้รับรายการของสตริงตรวจสอบว่ามันเป็นรหัสคำนำหน้าที่ถูกต้องหรือไม่
ข้อมูลของคุณ:
ผลลัพธ์ของคุณจะเป็นค่าจริง / เท็จ : ความจริงถ้ามันเป็นรหัสคำนำหน้าที่ถูกต้องและเป็นเท็จถ้ามันไม่
ต่อไปนี้เป็นกรณีทดสอบจริง:
["Hello", "World"]
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]
["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011",
"0110", "11001", "00110", "10011", "11000", "00111", "10010"]
ต่อไปนี้เป็นกรณีทดสอบปลอม:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
นี่คือโค้ดกอล์ฟดังนั้นจึงมีช่องโหว่มาตรฐานและคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
001
จะแปลได้ไม่เหมือนใคร? มันอาจจะเป็นอย่างใดอย่างหนึ่งหรือ00, 1
0, 11
0, 00, 1, 11
ทั้งหมดเป็นกุญแจนี่ไม่ใช่รหัสนำหน้าเพราะ 0 เป็นคำนำหน้าของ 00 และ 1 เป็นคำนำหน้าของ 11 รหัสคำนำหน้าคือที่ไม่มีคีย์เริ่มต้นด้วยคีย์อื่น ตัวอย่างเช่นหากคีย์ของคุณ0, 10, 11
เป็นรหัสนำหน้าและถอดรหัสได้อย่างมีเอกลักษณ์ 001
ไม่ใช่ข้อความที่ถูกต้อง แต่สามารถถอดรหัสได้0011
หรือ0010
ไม่ซ้ำกัน