संतुलित वैक्टर की त्वरित एन्कोडिंग


10

यह देखना आसान है कि किसी भी लिए n1-1 मैपिंग मौजूद है F{0,1} n से {0,1} n + O ( लॉग एन ) जैसे कि किसी भी x के लिए वेक्टर F ( x ) है " संतुलित ", अर्थात, इसकी संख्या 1s और 0s के बराबर है। क्या ऐसे F को परिभाषित करना संभव है ताकि दिए गए x को हम F ( x ) की कुशलता से गणना कर सकें ?nn+O(logn)xF(x)FxF(x)

धन्यवाद।


मेरा मानना ​​है कि 'कुशल' से आपका तात्पर्य हे (n) या थैरेआउट है, जो "बार-बार होने वाले यादृच्छिक परीक्षणों" का तर्क देता है?
सुरेश वेंकट

@ सुरेश, क्या आप "बार-बार यादृच्छिक परीक्षण" तर्क को स्केच कर पाएंगे?
एमिल

यह साबित करने का एक तरीका कि मैपिंग मौजूद है, संभाव्य विधि द्वारा है: F को यादृच्छिक रूप से चुनें, और फिर मैपिंग किसी भी संभाव्यता के साथ काम करती है। मेरा मतलब यही था।
सुरेश वेंकट

1
प्रश्न पूरी तरह से परिभाषित है, लेकिन मेरी राय में, शीर्षक भ्रामक है। जब तक एफ बायजेक्टिव नहीं होगा, मैं बताई गई शर्त को एक संतुलित स्थिति में "संतुलित वैक्टर की एन्कोडिंग" कहकर मैपिंग एफ नहीं कहूंगा। यह संतुलित वेक्टर द्वारा एन-बिट स्ट्रिंग के एन्कोडिंग की तरह है ।
त्सुयोशी इतो

"कुशलता से" की अलग-अलग व्याख्याओं के लिए "बिल्कुल अच्छी तरह से परिभाषित", मेरा मतलब है। लेकिन यह मेरी पिछली टिप्पणी की बात नहीं है।
त्सुयोशी इतो

जवाबों:


12

चलो स्ट्रेटिंग एक्स पर विचार करें । परिभाषाएं:nx

  • =अंतिम i बिट्स केसाथबिट स्ट्रिंग x पूरक है।f(x,i)xi
  • = के "असंतुलन" एक्स : में 1s की संख्या एक्स - में 0 की संख्या एक्सb(x)xx x

अब एक स्ट्रिंग ठीक करें । फ़ंक्शन पर विचार करें g ( i ) = b ( f ( x , i ) ) । टिप्पणियों:xg(i)=b(f(x,i))

  • g(0)=b(x)
  • g(n)=g(0)
  • सभी के लिए मैं । हम या तो एक 0 को हटाते हैं और एक 1 या इसके विपरीत जोड़ते हैं।|g(i)g(i+1)|=2i

अब यह इस प्रकार वहां मौजूद है कि एक ऐसा है कि - 1 जी ( मैं ) + 1i1g(i)+1

इसलिए हम एक -bit string y का निर्माण इस प्रकार कर सकते हैं: concatenate f ( x , i ) और बाइनरी एन्कोडिंग i । के असंतुलन का निरपेक्ष मान y है हे ( लॉग एन ) । इसके अलावा, हम x दिए गए y को पुनर्प्राप्त कर सकते हैं ; मानचित्रण आक्षेप है।(n+O(logn))yf(x,i)iyO(logn)xy

अंत में, आप जोड़ सकते हैं बिट्स कि के असंतुलन को कम डमी y से हे ( लॉग एन ) के लिए 0O(logn)yO(logn)0


b (x) तीसरी पंक्ति में b (y) होना चाहिए।
एमिल

मुझे लगता है कि आपको स्ट्रिंग एक्स में एक और बिट जोड़ने की आवश्यकता है ताकि यह सुनिश्चित हो सके कि इसकी लंबाई भी है (ताकि आप सुनिश्चित कर सकें कि जी (i) कुछ i के लिए शून्य है)।
एमिल

@ ईमिल: मेरा दावा नहीं है कि कुछ i के लिए शून्य है ; यह पर्याप्त है कि का निरपेक्ष मान जी ( मैं ) कुछ के लिए "काफी छोटे" है मैं (सबसे लघुगणक पर पर्याप्त होगा, लेकिन यह पता चलता है कि यह अधिक से अधिक हो जाएगा आसान है 1 कुछ के लिए मैं )। g(i)ig(i)i1i
जुका सूमेला

@ जुक्का: आह हां मैं देख रहा हूं।
एमिल

1
लेकिन हां, आप सही हैं, एक ही मूल दृष्टिकोण के कई रूप हैं। उदाहरण के लिए, जैसा कि आपने सुझाव दिया था, आप पहले यह सुनिश्चित करने के लिए पैडिंग बिट का उपयोग कर सकते हैं कि कुछ i के लिए समान शून्य होगा ; फिर आप बिट जोड़े 01 या 10 का उपयोग करके मुझे सांकेतिक शब्दों में बदलना कर सकते हैं , यह 2 लॉग ( एन ) अतिरिक्त बिट्स है; तब नतीजे का परिणाम सख्ती से संतुलित है और आपको कुछ और जोड़ने की आवश्यकता नहीं है। g(i)ii01102log(n)
१६:०६ पर जुक्का सुकोला

9

मैपिंग का उपयोग करें जो लेक्सोग्राफिक ऑर्डर को संरक्षित करता है। ढूंढने के लिए वें length- एन साथ संतुलित वेक्टर n / 2 1 की, यह पुनरावर्ती कार्य करें: यदि कश्मीर ( n - 1knn/2, फिर पहले बिट 0 सेट करें और फिरk-th की लंबाई ज्ञात करें-(n-1)वेक्टर के साथn/21 की शेषn-1बिट्सको पूरा करें। अन्यथा पहले बिट 1 सेट करें औरk-(n-1)ढूंढेंk(n1n/2)k(n1)n/2n1-थ लंबाई-(n-1)वेक्टर विथn/2-11's।k(n1n/2)(n1)n/21


1
और यदि आप अगले आवश्यक द्विपद गुणांक की गणना करने के लिए एक द्विपद गुणांक के मूल्य का पुन: उपयोग करते हैं, तो संपूर्ण एल्गोरिथ्म O (n) समय में चलता है।
त्सुयोशी इतो

धन्यवाद! यह समझ में आता है। मुझे लगता है कि चलने का समय कम्प्यूटेशनल मॉडल पर निर्भर करेगा। यदि आप इकाई समय में n-बिट संख्या पर संचालन कर सकते हैं, तो Tsuyoshi Ito द्वारा कार्यान्वयन O (n) समय में चलेगा। दूसरी ओर, यदि आप बिट संचालन की गणना करते हैं, तो समय O (n ^ 2) होगा, मुझे लगता है।
पियोट्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.