พื้นที่จัดเก็บคงที่ 1073 ไบต์สำหรับ 1,000 หมายเลข:
รูปแบบพื้นฐานของวิธีการจัดเก็บนี้คือการจัดเก็บตัวเลข 5 หลักแรกจำนวนสำหรับแต่ละกลุ่มและค่าชดเชยสำหรับแต่ละหมายเลขในแต่ละกลุ่ม
คำนำหน้า: คำนำหน้า
5 หลักของเราใช้17 บิตแรก
การจัดกลุ่ม:
ต่อไปเราต้องหาการจัดกลุ่มขนาดที่เหมาะสมสำหรับตัวเลข ลองมีประมาณ 1 หมายเลขต่อกลุ่ม เนื่องจากเราทราบว่ามีหมายเลขจัดเก็บประมาณ 1,000 หมายเลขเราจึงแบ่ง 99,999 ออกเป็นประมาณ 1,000 ส่วน หากเราเลือกขนาดกลุ่มเป็น 100 ก็จะมีบิตที่สูญเปล่าดังนั้นลองใช้ขนาดกลุ่ม 128 ซึ่งแทนได้ด้วย 7 บิต สิ่งนี้ทำให้เรามี 782 กลุ่มในการทำงาน
จำนวน:
ถัดไปสำหรับแต่ละกลุ่ม 782 เราจำเป็นต้องจัดเก็บจำนวนรายการในแต่ละกลุ่ม การนับ 7 บิตสำหรับแต่ละกลุ่มจะให้ผล7*782=5,474 bits
ซึ่งไม่มีประสิทธิภาพมากเนื่องจากจำนวนเฉลี่ยที่แสดงเป็นค่าประมาณ 1 เนื่องจากเราเลือกกลุ่มของเราอย่างไร
ดังนั้นเราจึงมีการนับขนาดตัวแปรโดยมี 1 นำหน้าสำหรับแต่ละหมายเลขในกลุ่มตามด้วย 0 ดังนั้นหากเรามีx
ตัวเลขอยู่ในกลุ่มเราจะต้องx 1's
ตามด้วย a 0
เพื่อแทนจำนวน ตัวอย่างเช่นถ้าเรามี 5 111110
หมายเลขในกลุ่มการนับจะได้รับการแสดงโดย ด้วยวิธีนี้ถ้ามี 1,000 หมายเลขเราจบลงด้วย 1000 1 และ 782 0 รวมเป็น1,000 + 782 = 1,782 บิตสำหรับการนับ
ออฟเซ็ต:
สุดท้ายรูปแบบของแต่ละหมายเลขจะเป็นเพียง 7 บิตออฟเซ็ตสำหรับแต่ละกลุ่ม ตัวอย่างเช่นถ้า 00000 และ 00001 เป็นตัวเลขเท่านั้นในกลุ่ม 0-127, 110 0000000 0000001
บิตสำหรับกลุ่มที่จะเป็น สมมติว่า 1,000 ตัวเลขจะมี7,000 บิตสำหรับการชดเชย
ดังนั้นการนับครั้งสุดท้ายของเราโดยสมมติว่า 1,000 หมายเลขเป็นดังนี้:
17 (prefix) + 1,782 (counts) + 7,000 (offsets) = 8,799 bits = 1100 bytes
ตอนนี้ให้ตรวจสอบว่าการเลือกขนาดกลุ่มของเราโดยการปัดเศษสูงสุด 128 บิตเป็นตัวเลือกที่ดีที่สุดสำหรับขนาดกลุ่มหรือไม่ การเลือกx
เป็นจำนวนบิตเพื่อแสดงแต่ละกลุ่มสูตรสำหรับขนาดคือ:
Size in bits = 17 (prefix) + 1,000 + 99,999/2^x + x * 1,000
สมการนี้ลดค่าจำนวนเต็มของx
ให้x=6
ซึ่งผลตอบแทนถัวเฉลี่ย 8,580 บิต = 1,073 ไบต์ ดังนั้นพื้นที่จัดเก็บในอุดมคติของเรามีดังนี้:
- ขนาดกลุ่ม: 2 ^ 6 = 64
- จำนวนกลุ่ม: 1,562
พื้นที่เก็บข้อมูลทั้งหมด:
1017 (prefix plus 1's) + 1563 (0's in count) + 6*1000 (offsets) = 8,580 bits = 1,073 bytes