การเข้ารหัสด่วนของเวกเตอร์ที่สมดุล


10

มันเป็นเรื่องง่ายที่จะเห็นว่าสำหรับการใด ๆมีอยู่ 1-1 ทำแผนที่จาก {0,1}เป็น {0,1}ดังกล่าวว่าสำหรับการใด ๆเวกเตอร์คือ "สมดุล" คือมีจำนวนเท่ากับ 1 และ 0 เป็นไปได้ไหมที่จะกำหนดเช่นนี้เพื่อให้เราสามารถคำนวณ อย่างมีประสิทธิภาพ?nnFnn+O(logn)xF(x)FxF(x)

ขอบคุณ


ฉันสมมติว่าด้วย 'ประสิทธิภาพ' คุณหมายถึง O (n) หรือราว ๆ นั้นพิจารณาข้อโต้แย้ง "การทดลองแบบสุ่มซ้ำ"
Suresh Venkat

@Suresh คุณจะสามารถร่างอาร์กิวเมนต์ "การทดลองแบบสุ่มซ้ำ" ได้หรือไม่?
Emil

วิธีหนึ่งในการพิสูจน์ว่าการทำแผนที่นั้นมีอยู่โดยวิธีการความน่าจะเป็น: เลือก F โดยการสุ่มและจากนั้นการทำแผนที่จะทำงานด้วยความน่าจะเป็นบางอย่าง นั่นคือสิ่งที่ฉันหมายถึง.
Suresh Venkat

1
คำถามมีคำจำกัดความอย่างสมบูรณ์ แต่ในความคิดของฉันชื่อเรื่องนั้นทำให้เข้าใจผิด ฉันจะไม่เรียกการแมป F ให้เป็นไปตามเงื่อนไขที่ระบุไว้ว่า“ การเข้ารหัสของเวกเตอร์ที่สมดุล” ยกเว้นว่า F เป็น bijective มันเหมือนการเข้ารหัสของสตริง n-bit โดยเวกเตอร์ที่มีความสมดุล
Tsuyoshi Ito

“ ชัดเจนสมบูรณ์แบบ” ถึงการตีความที่แตกต่างกันของ“ ประสิทธิภาพ” ฉันหมายถึง แต่นี่ไม่ใช่ประเด็นของความคิดเห็นก่อนหน้าของฉัน
Tsuyoshi Ito

คำตอบ:


12

ลองพิจารณาบิตสตริงx คำนิยาม:nx

  • = บิตสตริง xพร้อมบิตสุดท้ายของฉันf(x,i)xi
  • = "ไม่สมดุล" ของ x : จำนวน 1s ใน x -จำนวน 0s ในxb(x)xx x

ตอนนี้แก้ไขสตริงxพิจารณาฟังก์ชันกรัม( ฉัน) = B ( F ( x , ฉัน) ) ข้อสังเกต:xg(i)=b(f(x,i))

  • )g(0)=b(x)
  • )g(n)=g(0)
  • สำหรับฉัน เราลบหนึ่ง 0 และเพิ่มหนึ่งหรือในทางกลับกัน|g(i)g(i+1)|=2i

ตอนนี้มันตามที่มีอยู่เช่นนั้น- 1 กรัม( ฉัน) + 1i1g(i)+1

ดังนั้นเราสามารถสร้างสตริงบิตYดังนี้ concatenate F ( x , ฉัน)และการเข้ารหัสไบนารีของดัชนีฉัน ค่าสัมบูรณ์ของความไม่สมดุลของYคือO ( บันทึกn ) ยิ่งกว่านั้นเราสามารถกู้คืนx ที่ให้ได้y ; การทำแผนที่คือ bijection(n+O(logn))yf(x,i)iyO(logn)xy

สุดท้ายคุณก็สามารถเพิ่มหุ่นบิตที่ช่วยลดความไม่สมดุลของปีจากO ( บันทึกn )เพื่อ0O(logn)yO(logn)0


b (x) ในบรรทัดที่ 3 ควรเป็น b (y)
Emil

ฉันคิดว่าคุณอาจต้องเพิ่มอีกบิตในสตริง x เพื่อให้แน่ใจว่ามีความยาวเท่ากัน (เพื่อให้คุณมั่นใจได้ว่า g (i) เป็นศูนย์สำหรับบางคนฉัน)
Emil

@Emil: ผมไม่ได้เรียกร้องว่าคือเป็นศูนย์สำหรับบางฉัน ; มันจะเพียงพอที่ค่าสัมบูรณ์ของกรัม( ฉัน)คือ "ค่อนข้างเล็ก" สำหรับบางฉัน (ที่ลอการิทึมส่วนใหญ่จะเป็นพอ แต่มันง่ายที่จะแสดงให้เห็นว่ามันจะเป็นอย่างมากที่สุด1สำหรับบางฉัน ) g(i)ig(i)i1i
Jukka Suomela

@Jukka: อ่าใช่ฉันเห็นแล้ว
Emil

1
แต่ใช่คุณพูดถูกมีหลายสายพันธุ์ของวิธีการพื้นฐานเดียวกัน ยกตัวอย่างเช่นตามที่คุณแนะนำคุณสามารถใช้งานครั้งแรกบิต padding เพื่อให้แน่ใจว่าจะเป็นศูนย์ที่เท่าเทียมกันสำหรับบางฉัน ; จากนั้นคุณสามารถเข้ารหัสiโดยใช้บิตคู่01หรือ10นั่นคือ2 ล็อก( n )บิตพิเศษ จากนั้นผลลัพธ์ของการต่อข้อมูลจะมีความสมดุลอย่างเคร่งครัดและคุณไม่จำเป็นต้องเพิ่มอะไรอีก g(i)ii01102log(n)
Jukka Suomela

9

ใช้การแมปที่เก็บรักษาคำสั่งพจนานุกรม เพื่อหาสิ่งที่ -th length- nเวกเตอร์สมดุลกับn / 2 1 ทำมันซ้ำถ้าk ( n - 1knn/2จากนั้นตั้งค่าบิตแรก 0 จากนั้นค้นหาเวกเตอร์k-th-(n-1) ที่มีn/21 เพื่อให้บิตที่เหลือn-1สมบูรณ์ มิฉะนั้นให้ตั้งค่าบิตแรก 1 และค้นหาk-(n-1k(n1n/2)k(n1)n/2n1- ความยาว -(n-1)เวกเตอร์ที่มีn/2-11k(n1n/2)(n1)n/21


1
และถ้าคุณใช้ค่าของสัมประสิทธิ์ทวินามอีกครั้งเพื่อคำนวณค่าสัมประสิทธิ์ทวินามต่อไปขั้นตอนวิธีทั้งหมดจะทำงานในเวลา O (n)
Tsuyoshi Ito

ขอบคุณ! มันสมเหตุสมผลแล้ว ฉันเดาว่าเวลาทำงานจะขึ้นอยู่กับแบบจำลองการคำนวณ หากคุณสามารถดำเนินการกับตัวเลข n-bit ในหน่วยเวลาการใช้งานโดย Tsuyoshi Ito จะทำงานในเวลา O (n) ในทางกลับกันถ้าคุณนับการดำเนินการบิตเวลาจะเป็น O (n ^ 2) ฉันคิดว่า
Piotr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.