จำนวนตัวแปรบิตคืออาร์เรย์ 0 หรือมากกว่าบิต ดังนั้น[0, 1]
เป็นจำนวนตัวแปรของบิต []
แต่เพื่อให้เป็น
เขียนฟังก์ชั่นหรือโปรแกรมที่ได้รับจำนวนเต็ม nonnegative ส่งกลับจำนวนตัวแปรของบิตเช่นว่าทุกจำนวนเต็มมีการทำแผนที่แบบหนึ่งต่อหนึ่ง (bijective) กับอาร์เรย์
มีการแมปดังกล่าวไม่ จำกัด จำนวนคุณมีอิสระที่จะสร้างได้ตามที่คุณต้องการ แต่ต้องเป็นแบบหนึ่งต่อหนึ่ง การทำแผนที่ของคุณต้องเป็นแนวคิดแบบหนึ่งต่อหนึ่งสำหรับจำนวนเต็มที่มีขนาดโดยพลการ แต่การดำเนินการของคุณจะล้มเหลวสำหรับจำนวนเต็มขนาดใหญ่เนื่องจากข้อ จำกัด ของประเภทตัวเลขในภาษาที่คุณต้องการ (เช่นของ C int
)
ตัวอย่างของสิ่งที่ไม่ใช่การแม็พแบบหนึ่งต่อหนึ่งคือการแสดงรายการเลขฐานสองของจำนวนเต็ม ในระบบ 5 ดังกล่าวจะกลายเป็น[1, 0, 1]
(หรือ0b101
) แต่ไม่ใช่แบบหนึ่งต่อหนึ่งเพราะ0b0101
หรือ[0, 1, 0, 1]
ยังหมายถึง 5
ควรชัดเจนว่าการแมปไม่ใช่แบบหนึ่งต่อหนึ่งหากข้ามจำนวนเต็ม (เช่นไม่ทำงาน 5) แต่ฉันต้องการทำให้ชัดเจนว่าการข้ามอาเรย์บิตตัวแปรไม่ใช่หนึ่งเดียว -to- หนึ่ง []
คุณต้องแผนที่ไปยังอาร์เรย์ตัวแปรทุกบิตเป็นไปได้รวมถึง
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ