Disclaimer: Levenshtein การเข้ารหัสจะสมบูรณ์ไม่เกี่ยวข้องกับLevenshtein แก้ไขตัวชี้วัดระยะทาง
<แทรกเรื่องยาวเกี่ยวกับสาเหตุที่ต้องคำนวณรหัส Levenshtein ที่นี่>
รหัส
การเข้ารหัส Levenshteinเป็นระบบของการกำหนดรหัสไบนารีให้กับจำนวนเต็มที่ไม่ใช่ค่าลบซึ่งยังคงคุณสมบัติแปลกประหลาดบางอย่างในความน่าจะเป็นซึ่งไม่เกี่ยวข้องกับความท้าทายนี้ เราจะแสดงรหัสนี้เป็นL ( n ) Wikipedia อธิบายว่านี่เป็นกระบวนการห้าขั้นตอน:
- เริ่มต้นตัวแปรการนับขั้นตอนCถึง 1
- เขียนการเป็นตัวแทนไบนารีของตัวเลขโดยไม่นำ
1
ไปสู่จุดเริ่มต้นของรหัส - ให้Mเป็นจำนวนบิตที่เขียนในขั้นตอนที่ 2
- หากMไม่ใช่ 0 ให้เพิ่มCทำซ้ำจากขั้นตอนที่ 2 ด้วยMเป็นหมายเลขใหม่
- เขียนบิตC
1
และ a0
ไปยังจุดเริ่มต้นของรหัส
อย่างไรก็ตามรหัสสามารถอธิบายซ้ำ:
- ถ้าตัวเลขเป็น 0
0
แล้วรหัสของมันคือ - เขียนการเป็นตัวแทนไบนารีของตัวเลขโดยไม่นำ
1
ไปสู่จุดเริ่มต้นของรหัส - ให้Mเป็นจำนวนบิตที่เขียนในขั้นตอนที่ 2
- เขียนL ( M ) ไปยังจุดเริ่มต้นของรหัส
- เขียน
1
บิตไปยังจุดเริ่มต้นของรหัส
สำหรับผู้ที่ต้องการตัวอย่างนี่คือกระบวนการเรียกซ้ำสำหรับL (87654321) โดยมีdenoting concatenation:
ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่กำหนดตัวเลขnเอาท์พุทบิตL ( n ) ในรูปแบบที่เหมาะสม (รวมถึงการคืนค่าตัวเลขด้วยบิตที่กล่าว) ช่องโหว่มาตรฐานนั้นไม่อนุญาตเช่นเคย
ตัวอย่าง
การป้อนข้อมูล: 5
เอาท์พุท: 1110001
การป้อนข้อมูล: 30
เอาท์พุท: 111100001110
การป้อนข้อมูล: 87654321
เอาท์พุท: 111110000101001001110010111111110110001
การป้อนข้อมูล: 0
เอาท์พุท: 0
±
f