क्या PRNG का उपयोग सामान्‍य रूप से संपीड़ित करने के लिए किया जा सकता है?


38

यह विचार मेरे लिए एक बच्चे के रूप में आया जो प्रोग्राम को सीख रहा था और पहले PRNG का सामना कर रहा था। मैं अभी भी नहीं जानता कि यह कितना यथार्थवादी है, लेकिन अब स्टैक एक्सचेंज है।

यहाँ एक 14 साल की योजना एक अद्भुत संपीड़न एल्गोरिथ्म के लिए है:

एक sछद्म यादृच्छिक बाइट्स का एक लंबा अनुक्रम प्राप्त करने के लिए एक PRNG लें और इसे बीज के साथ बीज दें। उस अनुक्रम को किसी अन्य पार्टी में संचारित करने के लिए, आपको केवल PRNG, उपयुक्त बीज और संदेश की लंबाई का वर्णन करने की आवश्यकता है। एक लंबे पर्याप्त अनुक्रम के लिए, यह विवरण बहुत छोटा होगा और फिर अनुक्रम ही होगा।

अब मुझे लगता है कि मैं इस प्रक्रिया को उल्टा कर सकता हूं। पर्याप्त समय और कम्प्यूटेशनल संसाधनों को देखते हुए, मैं एक ब्रूट-फोर्स खोज कर सकता हूं और एक बीज (और PRNG, या दूसरे शब्दों में: एक प्रोग्राम) खोज सकता हूं जो मेरा वांछित अनुक्रम पैदा करता है (आइए बताते हैं बिल्लियों के शरारती होने का एक मनोरंजक फोटो)।

बड़ी संख्या में बिट्स उत्पन्न होने के बाद PRNGs दोहराते हैं, लेकिन "विशिष्ट" चक्रों की तुलना में मेरा संदेश काफी छोटा है इसलिए यह समस्या की तरह प्रतीत नहीं होता है।

Voila, एक प्रभावी (यदि रब-गोल्डबेरिज़न) डेटा को संपीड़ित करने का तरीका है।

तो, यह मानते हुए:

  • मैं जिस अनुक्रम को संक्षिप्त करना चाहता हूं वह परिमित है और पहले से जाना जाता है।
  • मैं नकदी या समय से कम नहीं हूं (जब तक दोनों की एक परिमित राशि आवश्यक है)

मैं जानना चाहता हूं:

  • क्या योजना के पीछे तर्क में कोई मूलभूत दोष है?
  • इस तरह के विचार प्रयोगों का विश्लेषण करने का मानक तरीका क्या है?

सारांश

यह अक्सर ऐसा होता है कि अच्छे उत्तर न केवल उत्तर स्पष्ट करते हैं, लेकिन यह क्या है कि मैं वास्तव में पूछ रहा था। सभी के धैर्य और विस्तृत जवाब के लिए धन्यवाद।

यहाँ उत्तर के सारांश पर मेरा प्रयास है:

  • PRNG / बीज कोण कुछ भी योगदान नहीं करता है, यह एक प्रोग्राम से अधिक नहीं है जो आउटपुट के रूप में वांछित अनुक्रम का उत्पादन करता है।
  • कबूतर का सिद्धांत: लंबाई के कई और संदेश हैं> कश्मीर की तुलना में (संदेश उत्पन्न करने वाले) लंबाई के प्रोग्राम <= k हैं। इसलिए कुछ अनुक्रम केवल संदेश से कम प्रोग्राम का आउटपुट नहीं हो सकते।
  • यह ध्यान देने योग्य है कि कार्यक्रम (संदेश) की व्याख्या आवश्यक रूप से पहले से तय है। और यह डिज़ाइन संदेश का एक छोटा (छोटा) सबसेट निर्धारित करता है जो लंबाई k का संदेश प्राप्त होने पर उत्पन्न किया जा सकता है।

इस बिंदु पर मूल PRNG विचार पहले से ही मर चुका है, लेकिन बसने के लिए कम से कम एक आखिरी सवाल है:

  • प्रश्न: क्या मैं भाग्यशाली हो सकता हूं और पा सकता हूं कि मेरा लंबा (लेकिन परिमित) संदेश सिर्फ लंबाई के कार्यक्रम के उत्पादन के लिए होता है <k बिट्स?

सख्ती से बोलना, यह मौका की बात नहीं है क्योंकि हर संभव संदेश (कार्यक्रम) के अर्थ को पहले से जाना जाना चाहिए। या तो यह है <कश्मीर बिट्स के कुछ संदेश के अर्थ या यह नहीं है

यदि मैं यादृच्छिक रूप से> = k बिट्स का एक यादृच्छिक संदेश चुनता हूं (मैं क्यों?), तो मैं किसी भी मामले में k बिट्स से कम का उपयोग करके इसे भेजने में सक्षम होने की एक संभावित संभावना होगी, और भेजने में सक्षम नहीं होने की लगभग निश्चितता कम से कम k बिट्स का उपयोग करना।

OTOH, अगर मैं उन लोगों से> k = बिट्स का एक विशिष्ट संदेश चुनता हूँ, जो k बिट्स से कम के प्रोग्राम का आउटपुट हैं (यह मानते हुए कि ऐसा कोई संदेश है), तो वास्तव में मैं पहले से प्रसारित बिट्स का लाभ उठा रहा हूँ रिसीवर (दुभाषिया का डिज़ाइन), जो स्थानांतरित किए गए संदेश के भाग के रूप में गिना जाता है।

आखिरकार:

अंततः, दोनों हमें एक ही बात बताते हैं कि (सरल) कबूतर सिद्धांत हमें इस बारे में बताता है कि हम कितना संपीड़ित कर सकते हैं: शायद बिल्कुल नहीं, शायद कुछ, लेकिन निश्चित रूप से उतना नहीं जितना हम कल्पना करते हैं (जब तक कि हम धोखा नहीं देते)।


6
अपने प्रश्न को थोड़ा घुमाएँ और आप अभी भी हर स्ट्रिंग को संकुचित नहीं कर सकते हैं (जैसा कि नीचे दिए गए उत्तरों में वर्णित है), लेकिन आपको Algorithmic Information Theory ( en.wikipedia.org/wiki/Kolmogorov_complexity ) मिलती है । "यूनिवर्सल ट्यूरिंग मशीन" और "सीड" के साथ "PRNG" को "इनपुट टेप से युक्त करें जिसमें एक प्रोग्राम हो जो आउटपुट को वांछित बनाता है।" अधिकांश इनपुट टेप उनके द्वारा उत्पन्न आउटपुट से अधिक होते हैं, लेकिन हर आउटपुट के लिए कम से कम एक इनपुट मौजूद होता है जो उस आउटपुट को उत्पन्न करता है।
भटकना तर्क

नहीं, लेकिन संकुचित आकार स्रोत का एन्ट्रापी है ^ _ ^
नवीन

5
यदि आप वास्तव में इसे लागू करते हैं, तो आपको एक दिलचस्प बात मिलेगी: मनमाने इनपुट को फिर से संगठित करने के लिए, आपको एक बीज + आरंग की आवश्यकता होगी, जो कि मूल डेटा के रूप में औसतन हर बिट जितना बड़ा हो। उफ़।
मार्क

यह समझने का एक और तरीका कि यह क्यों काम नहीं करेगा: भले ही एक PRNG मनमाने ढंग से लंबा आउटपुट उत्पन्न कर सकता है, लेकिन यह मनमाना आउटपुट उत्पन्न नहीं कर सकता है । (एक PRNG का आउटपुट हमेशा कुछ निश्चित चक्र या पैटर्न होगा, जो उसके राज्य के आकार से विवश है।)
Pi Delport

@PietDelport, किसी भी n के लिए एक PRNG है जिसका चक्र बहुत बड़ा है, और जो प्रश्न सामने आया है, वह पहले से ज्ञात है। तो मुझे यकीन नहीं है कि तथ्य यह है कि PRNG चक्रीय हैं सीधे सवाल सुलझाता है।

जवाबों:


43

आपको एक शानदार नई संपीड़न योजना मिली है, एह? ठीक है फिर...

♫ चलो सभी खेलते हैं, एन्ट्रापी खेल,

बस सरल होने के लिए, मैं मानूंगा कि आप कुछ निश्चित लिए, बिल्कुल बिट्स के संदेशों को संपीड़ित करना चाहते हैं । हालाँकि, आप इसे लंबे संदेशों के लिए उपयोग करने में सक्षम होना चाहते हैं, इसलिए आपको अपने पहले संदेश को दूसरे से अलग करने के कुछ तरीके की आवश्यकता है (यह अस्पष्ट नहीं हो सकता है कि आपके पास क्या संपीड़ित है)।nn

तो, आपकी योजना PRNG / बीज के कुछ परिवार को निर्धारित करने के लिए है, जैसे कि यदि आप संपीड़ित करना चाहते हैं, कहते हैं, , तो आप बस कुछ नंबर लिखते हैं , जो कि कुछ पूर्वसंबंधित (और साझा किए गए) बीज / पहचानता है जो उन बिट्स को उत्पन्न करता है प्रश्न। ठीक है। लंबाई कितने भिन्न बिट-स्ट्रिंग्स हैं? (आपके पास दो मदों के बीच n विकल्प हैं; और )। इसका मतलब है कि आपको इन कॉम्बो की गणना करनी होगी । कोई बात नहीं। हालाँकि, आपको इसे पढ़ने के लिए मुझे बाइनरी में लिखना होगा। कितना बड़ा कर सकते हैं मिल सकता है? खैर, यह जितना बड़ा हो सकता है01000111001knn2n012nkk2n। लिखने के लिए मुझे कितने बिट्स की आवश्यकता होगी ? ।2nlog2n=n

ऊप्स! आपके कंप्रेशन स्कीम को संदेशों की आवश्यकता होती है जब तक आप कंप्रेस कर रहे हों!

"हाहा!", आप कहते हैं, "लेकिन यह सबसे खराब स्थिति में है! मेरे संदेशों में से एक को मैप किया जाएगा , जिसका प्रतिनिधित्व करने के लिए केवल बिट की आवश्यकता है ! जीत!"01

हां, लेकिन आपके संदेशों को असंदिग्ध होना चाहिए! मैं से बाद कैसे बता सकता हूं ? चूँकि आपकी कुछ कुंजियाँ लंबाई , उन सभी को होना चाहिए, वरना मैं नहीं बता सकती कि आपने कहाँ से शुरुआत की है और रोक दिया है।1010n

"हाहा!", आप कहते हैं, "लेकिन मैं सिर्फ स्ट्रिंग की लंबाई को पहले बाइनरी में रख सकता हूं! यह केवल गणना करने की आवश्यकता है , जिसे बिट्स द्वारा दर्शाया जा सकता है ! इसलिए मेरा अब पहले से उपसर्ग आता है ! केवल बिट्स, मैं अभी भी जीत!nlogn0logn

हां, लेकिन अब वे वास्तव में बड़ी संख्या बिट्स के साथ उपसर्ग कर रहे हैं । आपकी संपीड़न योजना ने आपके कुछ संदेशों को और भी लंबा कर दिया है! और आधा अपने नंबरों के सभी के साथ शुरू करते हैं , तो आधा अपने संदेशों के कि बहुत लंबे समय तक कर रहे हैं!logn1

फिर आप एक समाप्ति वर्ण की तरह अधिक विचारों को फेंकने के लिए आगे बढ़ते हैं, संख्या को कम करते हैं, और खुद को लंबाई संपीड़ित करते हैं, लेकिन उन सभी मामलों में भाग लेते हैं जहां परिणामी संदेश बस लंबा होता है। वास्तव में, हर बिट के लिए आप किसी संदेश को सहेजते हैं, जवाब में एक और संदेश लंबे समय तक मिलेगा। सामान्य तौर पर, आप बस अपने संदेशों की "लागत" के आसपास जा रहे होंगे। कुछ को छोटा बनाने से बस दूसरों को लंबा होगा। आप वास्तव में फिट नहीं कर सकते बाहर लिखने की तुलना में कम जगह में अलग संदेश द्विआधारी लंबाई के तार ।2n2nn

"हाहा!", आप कहते हैं, "लेकिन मैं कुछ संदेशों को 'बेवकूफ' के रूप में चुन सकता हूं और उन्हें अवैध बना सकता हूं! फिर मुझे तक सभी तरह से गिनने की आवश्यकता नहीं है , क्योंकि मैं उस कई संदेशों का समर्थन नहीं करता हूं! "2n

आप सही हैं, लेकिन आप वास्तव में नहीं जीते हैं। आपने सिर्फ उन संदेशों के सेट को सिकोड़ दिया है जिनका आप समर्थन करते हैं। यदि आपने केवल भेजे गए संदेशों के रूप में और किया है, तो निश्चित रूप से आपके पास कोड , , जो मेरे द्वारा कहे गए से बिल्कुल मेल खाता है। यहाँ, । संदेशों की वास्तविक लंबाई महत्वपूर्ण नहीं है, यह कितने हैं।a=0000000011010b=111111110101000a0b1n=1

"हाहा!", आप कहते हैं, "लेकिन मैं बस यह निर्धारित कर सकता हूं कि वे बेवकूफ संदेश दुर्लभ हैं! मैं दुर्लभ लोगों को बड़ा बनाऊंगा, और आम लोगों को छोटा! फिर मैं औसत रूप से जीतता हूं!"

हां! बधाई हो, आपने अभी एन्ट्रापी की खोज की है ! यदि आपके पास संदेश हैं, जहाँ th संदेश के भेजे जाने की प्रायिकता है, तो आप अपने अपेक्षित संदेश की लंबाई को नीचे दिए गए एन्ट्रापी से प्राप्त कर सकते हैं। संदेशों का सेट। यह एक प्रकार की अजीब अभिव्यक्ति है, लेकिन आप सभी को वास्तव में जानने की जरूरत है कि यह सबसे बड़ा है जब सभी संदेश समान रूप से होने की संभावना है, और छोटे जब कुछ दूसरों की तुलना में अधिक सामान्य होते हैं। चरम में, यदि आप मूल रूप से जानते हैं कि हर संदेश । फिर आप इस सुपर कुशल कोड का उपयोग कर सकते हैं: ,i p i H = n i = 1 p i log ( 1 / p i ) a = 000111010101 a 0 x 1 x 1 H HnipiH=i=1npilog(1/pi)a=000111010101a0x1xअन्यथा। तब आपकी अपेक्षित संदेश लंबाई मूल रूप से , जो कि बहुत बढ़िया है, और यह वास्तव में एन्ट्रापी करीब होने वाला है । हालाँकि, एक निचली सीमा है, और आप वास्तव में इसे हरा नहीं सकते, चाहे आप कितनी भी कोशिश कर लें।1HH

जो कुछ भी एन्ट्रापी को पीटने का दावा करता है, वह सम्भवत: संपीड़ित संदेश को अस्वीकार करने के लिए पर्याप्त जानकारी नहीं दे रहा है, या सिर्फ गलत है। एन्ट्रॉपी एक ऐसी शक्तिशाली अवधारणा है जिसे हम इसके साथ कुछ एल्गोरिदम के चलने का समय कम (और कभी-कभी ऊपरी भी ) कर सकते हैं, क्योंकि यदि वे वास्तव में तेज़ (या वास्तव में धीमी गति से) चलाते हैं, तो उन्हें कुछ ऐसा करना चाहिए जो एन्ट्रापी का उल्लंघन करता हो ।


13
लड़का, क्या मैं मूर्खतापूर्ण ध्वनि करता हूं जब तुम मेरे होने का दिखावा करते हो। भगवान का शुक्र है कि मैं एंट्रोपी की खोज में गर्व कर सकता हूं। एक तरफ चुटकुले, यह एक अच्छा जवाब है - अगर केवल स्वर इतने नकली के साथ नहीं था।

6
मैं मजाक करने का इरादा नहीं कर रहा था, बस "एक अद्भुत संपीड़न एल्गोरिथ्म के लिए एक 14 वर्षीय की योजना" के विचार के साथ खेल रहा था। :)
एलेक्सिस बीग्नेसर

3
मेरे लिए या तो मज़ाक करने जैसी आवाज़ नहीं आई :) यह लोकप्रिय विज्ञान (और कुछ अन्य क्षेत्रों) में समस्याओं को समझाने की एक सामान्य योजना है, हालांकि यह सच है कि "पूछने वाला" आमतौर पर "वास्तविक" के बजाय ऐलिस या बॉब है। व्यक्ति: डी देखें कि आप कितनी आसानी से समझ सकते हैं कि वास्तव में यह मुद्दा कितना जटिल है! (यह उल्लेख नहीं करने के लिए कि जब मैं अपने सिर में एक जटिल मुद्दे पर सोच रहा हूं, तो मैं उसी प्रक्रिया का उपयोग करता हूं - एक आंतरिक संवाद "अधिक सिर पता है" का अनुकरण करने में आश्चर्यजनक रूप से अच्छा है)
लुअन

2
@SteveJessop, यह एक गलत द्वैध है और चलो वहाँ नहीं जाते हैं। यह एक अच्छा जवाब है और मैं शायद ओवरसेंसिटिव हूं, बस।

3
@chipmonkey, मुझे लगता है कि अभी भी एलेक्सिस के "एन्ट्रॉपी गेम" के जवाब से कवर है। संभवतः, ऐसा करने के लिए आवश्यक एल्गोरिदम की संख्या इतनी बड़ी होगी, कि बिट्स की संख्या को निर्दिष्ट करने की आवश्यकता होती है, जिसका उपयोग किया गया था, लाभ को रद्द कर देगा।

21

कर रहे हैं की तुलना में कम लंबाई की बाइनरी तार , और लंबाई की बाइनरी तार बिल्कुल । इसका मतलब यह है कि आपका कम्प्रेशन एल्गोरिथ्म जो भी है , उसमें कुछ स्ट्रिंग होनी चाहिए, जो इसे बिल्कुल भी कंप्रेस नहीं कर सकता है, सिर्फ इसलिए कि ऑरिजनल स्ट्रिंग से कंप्रेस्ड स्ट्रिंग तक मैपिंग इंजेक्शन (वन-टू-वन) होनी चाहिए। यह कोलमोगोरोव जटिलता के कई अनुप्रयोगों के पीछे प्रेरक शक्ति है।एन 2 एन एन2N1N2NN

वास्तविक जीवन में, हम अक्सर उस अनुक्रम के बारे में कुछ जानते हैं जो हम संपीड़ित कर रहे हैं, कहते हैं कि यह आवाज़ या एक तस्वीर है। दोषरहित संपीड़न के मामले में, शैनन के स्रोत कोडिंग प्रमेय से पता चलता है कि इष्टतम संपीड़न दर स्रोत की एन्ट्रॉपी के बराबर है। हानिपूर्ण एन्कोडिंग के लिए सूचना सिद्धांत (दर-विकृति सिद्धांत) में अन्य प्रमेय हैं। तो इस मामले में भी आप डेटा को कितना संपीड़ित कर सकते हैं इसकी एक सीमा है।


मैंने इसे इस तरह कभी नहीं देखा है, लेकिन यह सिर्फ मेरे पास आया है: मूल रूप से, शैनन का कहना है कि यहां तक ​​कि सबसे अच्छा मामला मनमाने ढंग से संपीड़ित नहीं किया जा सकता है और पिजनहोल सिद्धांत गारंटी देता है कि सबसे खराब मामला होना चाहिए जो संकुचित नहीं हो सकता है बिलकुल। क्या यह एक समझदार लक्षण वर्णन है?
जोर्ग डब्ल्यू मित्तग

1
सबसे अच्छा मामला हमेशा संकुचित हो सकता है, क्योंकि आप अपने संपीड़न एल्गोरिथ्म के विशेष मामले के रूप में कुछ स्ट्रिंग को शामिल कर सकते हैं। यह तर्क न केवल सबसे खराब स्थिति के लिए बल्कि औसत मामले के लिए भी काम करता है, यह दर्शाता है कि औसत संपीड़न अधिकतम 2 बिट्स पर है।
युवल फिल्मस

आह, बिल्कुल। if input.empty? then output_very_long_stringसबसे अच्छा मामले के रूप में एक अनंत संपीड़न अनुपात देना होगा। असल में, यहां तक ​​कि एक संपीड़न एल्गोरिथ्म भी है जो इसका उपयोग करता है। (मैं नाम दुर्भाग्य से भूल गया,।) यह बहुत ही कम तार के लिए है, और यह की तरह हार्ड-कोडेड सबस्ट्रिंग के लिए विशेष एनकोडिंग है http://, www., .comऔर इतने पर।
जोर्ग डब्ल्यू मित्तग

क्या मैं इस तर्क को हरा सकता हूं अगर मेरे पास PRNG परिवार को डिजाइन करने का एक तरीका है कि वे जो अनुक्रम व्यक्त नहीं कर सकते हैं क्या वे पहले से बाहर हैं? (शोर को आकार देने वाले स्प्रिंग्स)।

3
@ foo1899, यदि आप निर्धारित कर सकते हैं कि कुछ तार अधिक होने की संभावना है तो अन्य, तो आप औसतन बेहतर कर सकते हैं, हाँ। सामान्य तौर पर, निचली सीमा यह है कि आपका अपेक्षित संपीड़ित संदेश आकार को हरा नहीं सकता है । जहां ith संभव संदेश भेजे जाने की संभावना है। अधिकतम है जब सभी संदेश समान रूप से होने की संभावना है, और अन्यथा छोटे। चरम पर, आप उत्कृष्ट औसत प्रदर्शन प्राप्त कर सकते हैं यदि लगभग हर संदेश "हैलो" है, और हर दूसरा संदेश दुर्लभ है। बस "हैलो" सेट करें -> 0, और x-> 1x अन्यथा। पी मैं एचH=ipilog1/pipiH
एलेक्सिस बीग्सेनर

7

कल्पना कीजिए कि आपके बीज कि लंबाई है । आपका PRNG बीज का एक नियतात्मक कार्य है, इसलिए यह लंबाई अधिकांश विभिन्न अनुक्रमों में आउटपुट करता है । इनमें से हैं, इसलिए आपकी योजना तब तक काम नहीं कर रही है जब तक कि यह कोई संगत न होने पर पूरी -bit स्ट्रिंग भेजने पर वापस नहीं आती है ।k 2 k n 2 n n ssk2kn2nns

(जैसा कि एक अन्य जवाब में कहा गया है, यह आपके द्वारा चुने गए किसी भी संपीड़न फ़ंक्शन के लिए होगा।)


अपने आप में यह साबित नहीं होता है कि मैं एक PRNG का निर्माण नहीं कर सकता, जो कि मेरे चुने हुए अनुक्रम को उत्पन्न करने के लिए होता है, जबकि ऐसा करने के लिए बहुत कम बिट्स की आवश्यकता होती है। जैसा कि मैं अन्य उत्तरों से समझता हूं, एन्ट्रापी आवश्यक रूप से आवश्यक बिट्स की संख्या पर एक कम बाध्य लागू करता है। यही है, मैं बस अपने चुने हुए अनुक्रम के लिए मनमाने ढंग से अच्छा नहीं कर सकता।

यह सब कहता है कि यदि आप अपना पसंदीदा PRNG बनाते हैं, तो मैं आपके लिए एक ऐसा अनुक्रम लेकर आ सकता हूं, जो उत्पादन नहीं करता है, जो पहले से ही आपके विचार को तोड़ देता है। एक मजबूत कथन यह है कि ऐसे क्रम हैं जो किसी भी छोटे कार्यक्रम द्वारा बिल्कुल भी उत्सर्जित नहीं होते हैं। (दूसरे शब्दों में, यदि आप मेरे अनुक्रम को देखने के बाद भी आपको अपना काम बदलने देते हैं, तब भी आप हार जाते हैं। यही कि युवल "कोलमोगोरोव जटिलता" के साथ जुड़ता है।)
लुई

4

अन्य पहले से ही उत्तरित बिंदुओं के अलावा, मैं सिर्फ इस लिंक को जोड़ना चाहता हूं: https://www.schneier.com:443/blog/archives/2009/09/the_doghouse_cr.html

अब, हमारे सूर्य का वार्षिक ऊर्जा उत्पादन लगभग 1.21 × 10 ^ 41 है। यह हमारे आदर्श कंप्यूटर पर 2.7 × 10 ^ 56 एकल बिट परिवर्तन के लिए पर्याप्त है; अपने सभी मूल्यों के माध्यम से 187-बिट काउंटर लगाने के लिए पर्याप्त राज्य परिवर्तन। यदि हमने सूर्य के चारों ओर डायसन क्षेत्र का निर्माण किया और बिना किसी नुकसान के 32 वर्षों तक अपनी सारी ऊर्जा पर कब्जा कर लिया, तो हम एक कंप्यूटर को 2 ^ 192 तक गिन सकते हैं। बेशक, इस काउंटर के साथ कोई उपयोगी गणना करने के लिए ऊर्जा नहीं बची होगी।

इसलिए केवल वांछित (कोई तुलना नहीं ...) अपने वांछित डेटा के एक मान्य 187bit नक्षत्र को खोजने के लिए (प्राप्त करने योग्य नहीं) आदर्श परिस्थितियों में सूर्य की तुलना में अधिक ऊर्जा एक वर्ष में निकल जाएगी।


1

एक बहुत ही त्वरित प्रमाण कि एक सार्वभौमिक कंप्रेसर मौजूद नहीं हो सकता है। मान लें कि आप एक बनाते हैं, और आप एक इनपुट सेक करते हैं। अब, iteratively आपके प्रोग्राम के आउटपुट को संपीड़ित करता है। यदि आप हमेशा आकार को कम कर सकते हैं, तो यह प्रत्येक चरण पर छोटा और छोटा हो जाएगा, जब तक आप 1 बिट से नीचे नहीं होते।

आप यह तर्क दे सकते हैं कि, शायद, आपके एल्गोरिथ्म के आउटपुट में ऐसी संरचना है कि इसे और अधिक संपीड़ित नहीं किया जा सकता है, लेकिन फिर आप पुनर्संक्रमण से पहले केवल एक नियतांक फेरबदल * लागू कर सकते हैं।

फुटनोट: कुछ नियतात्मक फेरबदल वास्तव में कुछ संपीड़न योजनाओं में मदद करता है: http://pytables.github.io/usersguide/optimization.html?highlight=shuffling#shufflingoptim


मुझे लगता है कि आप याद कर रहे हैं कि प्रत्येक संपीड़ित संदेश में एक बीज sजुड़ा हुआ है। 2348 के ´s 0 के साथ 01001011 संदेश 3924 के as´ के साथ एक ही संदेश से अलग होगा। जब तक मैं foo1899 के एल्गोरिथ्म को किसी भी तरह से गलत नहीं समझता।
अज़ीइरह

1

"संपीड़न" के लिए एक PRNG का उपयोग मूल रूप से एक स्थिति में उपयोगी होता है: जब डेटा के "यादृच्छिक" गुच्छा का उपयोग करना आवश्यक होता है और डेटा को किस प्रकार उपयोग किया जाता है, यह रिकॉर्ड करना आवश्यक है। अधिकांश छद्म-यादृच्छिक जनरेटर केवल संभावित अनुक्रमों का एक छोटा सा अंश उत्पन्न कर सकते हैं, लेकिन अगर किसी को केवल "यादृच्छिक" अनुक्रमों की एक छोटी-से-मध्यम संख्या की आवश्यकता होती है, तो संभव अनुक्रमों का अंश जो एक PRNG उत्पन्न कर सकता है, अक्सर पर्याप्त से अधिक होगा।

अगर डेटा को संग्रहीत करने की इच्छा होती है, तो संयोगवश मेल खाता है कि एक निश्चित PRNG सही बीज देगा, बीज को संग्रहीत करना डेटा को संग्रहीत करने के लिए एक कॉम्पैक्ट विकल्प हो सकता है। जब तक डेटा का स्रोत ऐसा नहीं होता है, ऐसे मैच होने की संभावना होती है, हालांकि, वे इतने असंगत होंगे कि उनके लिए खोज करना सार्थक नहीं होगा।


PRNG को इस तरह से प्रयोग करने के लिए (छद्म) यादृच्छिक डेटा का प्रतिनिधित्व करते हैं , उदाहरण के लिए प्रयोगों की पुनरावृत्ति के लिए।
युवल फिल्मस

1
@YuvalFilmus: बिल्कुल सही। उनका उपयोग वीडियो गेम लेवल जनरेशन जैसी कुछ स्थितियों में भी किया जा सकता है जहाँ उत्पन्न स्तरों का एक छोटा सा हिस्सा स्वीकार्य माना जाएगा, लेकिन जहाँ एक वीडियो गेम डिज़ाइनर बेतरतीब ढंग से तब तक उत्पन्न हो सकता है जब तक कि वह अपनी पसंद के अनुसार कुछ न पा ले, और बीज रिकॉर्ड कर ले जो उन उत्पन्न किया। ऐतिहासिक रूप से एक बहुत ही उपयोगी अवधारणा है, जब 128 बाइट रैम के साथ वीडियो गेम मशीन के लिए कोडिंग, प्रोग्राम को एक कार्ट में रॉम के 4096 बाइट्स के साथ फिट करने की कोशिश कर रहा है।
सुपरकैट

यह एक बहुत अच्छा उदाहरण है, यह उस योजना से मेल खाता है जिसे मैंने "अच्छे" बीज की खोज करने के लिए वर्णित किया है, लेकिन इस तथ्य का लाभ उठाता है कि उस स्थिति में कई संभावित संदेश अच्छे हैं।

@ foo1899: संयोग से, खेल "पिटफॉल" en.wikipedia.org/wiki/Pitfall ! 128 बाइट रैम वाली मशीन पर 4K गेम कार्ट्रिज पर 256-स्क्रीन मैप जेनरेट करने के लिए aforementioned तकनीक का उपयोग किया जाता है।
सुपरकैट

1

कुछ उत्तरों के कैकोफ़ोनी में जोड़ने पर विचार करने के लिए कि क्यों कुछ तार हैं जो परिभाषा के कारण संकुचित नहीं हो सकते हैं, विघटन की इंजेक्शन प्रकृति, और संकुचित तारों का सीमित ब्रह्मांड जिसमें से संदेशों का प्रतिनिधित्व करने के लिए चयन करना है: अधिकांश स्ट्रिंग्स को संकुचित नहीं किया जा सकता है क्योंकि वहाँ बहुत अधिक उच्च एन्ट्रापी हैं, वहाँ कम एंट्रोपी और संरचित लोगों की तुलना में अव्यवस्थित स्ट्रिंग्स हैं, इसलिए उस स्थिति को जन्म दे रहा है जिसे हम व्यवहार में देखते हैं कि: सम्पीडन अधिकांश समय उपयोगी है, क्योंकि संदेशों के बाद से हम सबसे अधिक बार संपीड़ित करना चाहते हैं जो सबसे अधिक बार आदेश और संरचना के कुछ विभाज्य के अधिकारी होते हैं, और इस अवधि तक, कम एंट्रोपी वस्तुओं के बहुत छोटे ब्रह्मांड का हिस्सा होते हैं। इसका मतलब है कि यह संभव है कि, एक उपयुक्त उत्पादन लंबाई चुनकर, हम छोटे, संरचित ब्रह्मांड में सब कुछ संकुचित कर सकते हैं। शब्द को संरचित, एन्ट्रापी और यहाँ पर दिया गया शब्द जानबूझकर अभेद्य हैं, शब्दार्थ और संदेशों की उपयोगिता की व्यक्तिपरक परिभाषाओं को प्रतिबिंबित करने के लिए जिन्हें हम संक्षिप्त करना चाहते हैं।

और प्रश्नकर्ता के अनुरोध के सीधे उत्तर में: * हां, आप निश्चित रूप से भाग्यशाली हो सकते हैं और अपने PRNG का आउटपुट ढूंढ सकते हैं, सटीक संदेश है जिसे आप संक्षिप्त करना चाहते हैं, यह सिर्फ इतना है कि आप अक्सर ऐसा नहीं पाएंगे क्योंकि यह मामला है क्योंकि बहुत संपत्ति जो एक PRNG की विशेषता है, अर्थात्, विभिन्न स्ट्रिंग्स के एक (लगभग) उत्पाद को अलग करने की क्षमता, इसे आप का उत्पादन करने के लिए अनौपचारिक रूप से अनौपचारिक बनाते हैं।

निश्चित रूप से आप इस अनौपचारिकता को शब्द संक्रमण के लिए शब्द के "डोमेन ग्राफ" पर चलने के लिए PRNG का उपयोग करके कम कर सकते हैं, और आप अपने संदेश की संभावना की संभावना को बहुत बढ़ाते हैं, और यह भी पाते हैं कि अब आपको डोमेन ग्राफ को संपीड़ित संदेश में जोड़ना होगा। लंबाई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.