क्या आधे-बिट का उपयोग करने का कोई तरीका है?


19

जैसा कि यहां के अधिकांश लोग जानते हैं, 4 बिट्स का उपयोग करके, हम 0 से 15 (हेक्साडेसिमल में 0123456789ABCDEF) की गणना करने में सक्षम हैं। लेकिन अगर हम केवल 9 तक गिनती करते हैं, तो हम अभी भी 4 बिट्स का उपयोग कर रहे हैं, और ए से एफ के माध्यम से अंक बर्बाद हो जाएंगे।

हालाँकि, विकिपीडिया का QR- कोड पृष्ठ बताता है कि 0 से 9 तक केवल संख्यात्मक अंकों का उपयोग करके प्रति वर्ण 3⅓ बिट्स का उपयोग किया जाता है, जो एक सांख्यिकीय दृष्टिकोण से सही है। और फिर भी एक बिट का एक तिहाई भौतिक वस्तु नहीं है, और 0 से 9 तक एक संख्या भेजना मेरे ज्ञान में कम से कम 4 बिट्स का उपयोग करता है।

क्या व्यर्थ के अंशों को प्रभावी ढंग से भेजने के लिए व्यर्थ संयोजनों का उपयोग करने का कोई तरीका है?

ठीक है, मुझे एक उदाहरण देना चाहिए: दो अंक "27" भेजना होगा। सामान्य कोडिंग तकनीकों के साथ, भेजे गए बिट्स 00100111 होंगे। फिर हम एक ऐसी प्रणाली की कल्पना कर सकते हैं जो अंक '2' को 'ई' या 'एफ' द्वारा प्रतिस्थापित करेगा, जो अगले बिट पर निर्भर करता है; इस स्थिति में अगला बिट 0 है, इसलिए '2' को 'E' से बदल दिया जाता है। परिणामी बिट-स्ट्रिंग तब 1101 0 111 होगी। दूसरी ओर यदि अंक "28" को भेजा जाना चाहिए, तो '2' के बाद पहला बिट 1 है, इसलिए इसे इसके बजाय अंक 'F' से बदल दिया जाता है, पैदावार स्ट्रिंग 1111 1 000।

दोनों मामलों में, 1 बिट की अर्थव्यवस्था को प्रभावित किया गया है, क्योंकि दो अलग-अलग पात्रों के लिए एक नीबूं का उपयोग किया गया था। दूसरे शब्द में, प्रत्येक वर्ण पर साढ़े तीन बिट्स का उपयोग किया जाता है।


2
एक छोटे अंक-स्थान में पैकिंग मूल्यों पर एक अलग परिप्रेक्ष्य के लिए, टर्नरी कंप्यूटर ( en.wikipedia.org/wiki/Ternary_computer ) की जाँच करें यदि यह नथ के लिए पर्याप्त है, तो यह मेरे लिए काफी अच्छा है!
RLH

3
अभी भी यह पहचानने के लिए बेहतर है कि आप (10 * first_digit) + second_digit7 बिट्स में गणना और एनकोड कर सकते हैं , 0 ... 99 का प्रतिनिधित्व करते हुए, कोड 100-127 अन्य चीजों के साथ छोड़ दिया गया है। और 3 बिट्स के साथ और भी अधिक बचत 10 बिट्स में संपीड़ित है।
हॉट लिक्स

सभी 100 अलग-अलग मूल्यों को अलग-अलग भेजने के लिए, आपको जो सबसे अच्छा मिल सकता है, वह 7 बिट्स में पैकिंग है। यदि आपके पास अधिक अंक हैं, तो पैकिंग अधिक कुशल होगी। यदि आपके पास भेजने के लिए 64 से कम मूल्य हैं, तो आप इसे केवल 6 बिट्स का उपयोग करके भेज सकते हैं
phuclv

जवाबों:


22

आप आधा बिट नहीं भेज सकते, लेकिन आप ट्रांसमिशन या स्टोरेज से पहले दो आधे बिट्स को एक बिट में प्रभावी रूप से पैक कर सकते हैं।

आप स्वयं एक उदाहरण देते हैं, इसलिए आपने अपने प्रश्न का उत्तर हाँ में दिया है।

शायद कुछ आसान तरीका 7 बिट्स में दो दशमलव अंकों के मूल्य को सरल करना है। (द्विआधारी कोडित दोहरे दशमलव की तरह)।


1
सात बिट्स में अंकों के जोड़े को पैक करने के लिए एक अच्छा उपयोग मामला तब होता है जब एएससीआईआई फाइलों को प्रेषित किया जाता है जिसमें ज्यादातर-संख्यात्मक डेटा होते हैं। 128 से नीचे का कोई भी बाइट मान एकल ASCII वर्ण का प्रतिनिधित्व करता है, जबकि 128-227 दो ASCII अंकों का प्रतिनिधित्व करता है। सांकेतिक शब्दों में बदलना या डिकोड करना आसान है, और इसके लिए जरूरी नहीं है कि डेटा में ज्यादातर अंक (या यहां तक ​​कि कोई अंक) हों, लेकिन अंकों के तार को 50% बहुत आसानी से संपीड़ित कर सकते हैं।
सुपरकैट

या कि PDP11 प्रारूप है कि एक बिट के साथ 16 बिट्स में 3 अल्फ़ान्यूमेरिक अक्षर पैक ...
ब्रायन Drummond

@BrianDrummond: एक व्यक्ति 40 के सेट से तीन वर्णों को स्टोर करने के लिए 16 बिट्स का उपयोग कर सकता है, या 39 के सेट से तीन तक, लेकिन कोई अतिरिक्त बिट नहीं होगा। आम तौर पर "अल्फ़ान्यूमेरिक" कम से कम 36 का एक सेट होता है, लेकिन एक ही तरीका है कि एक अतिरिक्त बिट होगा यदि सेट 32 तक सीमित था।
सुपरकैट

मैंने सोचा कि यह 5 बिट्स / चार था। अल्फ़ान्यूमेरिक को दो कोडसेट में विभाजित किया गया था, जिसमें एक प्रतीक "स्विच कोड सेट" के लिए आरक्षित था। मैं गलत था: en.wikipedia.org/wiki/DEC_Radix-50 फ्रीकी पर्याप्त, हालांकि, इसे केवल एक रात देखा जब मुझे एक रिपोर्ट को डीकोड करना था, किसी ने मुझे 8 "फ्लॉपी, एक सीपी / एम सिस्टम पर, केवल एक मंद के साथ दिया था। Z80 asm का स्मरण।
ब्रायन ड्रममंड

19

आप हफ़मैन कोडिंग का उपयोग कर सकते हैं, इसलिए संख्या अलग-अलग लंबाई के साथ होती है। यदि आप एक अंक के बारे में जानते हैं जो दूसरों की तुलना में अधिक बार घटित होगा तो यह मदद करेगा।

उदाहरण (समान घटना के साथ):

0 - 1111

1 - 1110

2 - 110

3 - 101

4 - 100

५ - ०११

6 - 010

7 - 001

- ०००

नंबर 1 प्राप्त करने के लिए प्राप्त करने वाला उदाहरण:

पहला बिट अंदर आता है और विकल्प के रूप में केवल 0 से 4 छोड़ता है।

दूसरा बिट आता है और विकल्प के रूप में केवल 0 से 2 छोड़ता है।

तीसरा बिट आता है और विकल्प के रूप में 0 से 1 छोड़ देता है।

अगला बिट आता है और आने वाली संख्या 1 है


12

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

उद्धरण विकिपीडिया :

अंकगणित कोडिंग एन्ट्रापी एन्कोडिंग के अन्य रूपों से भिन्न होती है जैसे कि हफ़मैन कोडिंग जिसमें घटक प्रतीकों में इनपुट को अलग करने और प्रत्येक को एक कोड के साथ प्रतिस्थापित करने के लिए, अंकगणित कोडिंग पूरे संदेश को एक एकल संख्या में विभाजित करता है, एक अंश n जहां (0.0 ≤ n < 1.0)।


10

अस्थायी बिंदु अंकगणित के लिए नया IEEE P754 अब द्विआधारी के अलावा दशमलव स्वरूपों को परिभाषित करता है। एन्कोडिंग में से एक 3 से 10 बिट में समूह डिजिटल अंकों का प्रस्ताव करता है।

10bit = 1024 संभव कोड का उपयोग करके 0 से 999 एन्कोडिंग काफी कुशल है, और दशमलव अंकों को अक्सर तीनों द्वारा वर्गीकृत किया जाता है।

घनीभूत पैक्ड दशमलव : http://en.wikipedia.org/wiki/Densely_packed_decimal


यहां तक ​​कि अगर दशमलव अंकों को तीन से वर्गीकृत किया जाता है, तो सही दशमलव-फ़्लोटिंग-पॉइंट शब्दार्थों की आवश्यकता हो सकती है कि या तो (1) दस या गैर-एकाधिक-तीन शक्ति की एक मंटिसा को स्केल करना सभी घटकों को 10 या 100 से गुणा करना या विभाजित करना है; (2) कुछ बिट्स का उपयोग संख्या के ऊपरी या निचले हिस्से के लिए किया जा सकता है, यह निर्भर करता है (घातांक मॉड 3); (३) यदि प्रतिपादक को आधार -१००० जमा किया जाता है, तो तीन अंकों के नीचे के समूह को कभी-कभी निकटतम इकाई के बजाय १० या निकटतम १०० के करीब होना पड़ सकता है।
सुपरकैट

मेरा व्यक्तिगत रूप से मानना ​​है कि BigDecimalयदि प्रत्येक शब्द 32 बिट्स के बजाय 9 दशमलव अंकों का होता है, लेकिन कई उद्देश्यों के लिए टाइप करना अधिक कुशल होगा, लेकिन राउंडिंग व्यवहार अंक समूह द्वारा प्रभावित नहीं होना चाहिए।
सुपरकैट

4

बाइनरी (या हेक्साडेसिमल) का एक 1: 1 पत्राचार है, लेकिन बिट्स के लिए एक प्रतीक एन्कोडिंग है। तो हाँ, जैसा कि आपने दिखाया कि यह संभव है। इसका उपयोग एक अन्य स्थान पर किया जाता है (लेकिन थोड़ा अलग तरीके से) संचार प्रणालियों में ट्रेकिस एन्कोडिंग / डिकोडिंग में होता है जिसमें डिकोडिंग को कम करने के लिए बिट संक्रमण को दूर रखा जाता है। और निश्चित रूप से 8 बी / 10 बी और 64 बी / 66 बी आदि आदि एन्कोडिंग एक समान विचार है, जिसमें उप-बैंड में डीसी बैलेंस, प्रतीक पृथक्करण और नियंत्रण कोड प्राप्त करने के लिए एक छोटा सा प्रतीक स्थान थोड़ा अनावश्यक बड़े स्थान में एन्कोड किया गया है।


4

डेटा प्रतिनिधित्व उस व्याख्या पर निर्भर करता है जो आप या आपका प्रोग्राम उसे देता है।

हम '27' को ASCII वर्णों के रूप में भी भेज सकते हैं, उदाहरण के लिए, उपज 0x3237 = 0b0011001000110111

एक्सn(एक्स)लॉग2n(एक्स)

अब मान लें कि आपके पास n के साथ दो चर एक्स1,एक्स2n(एक्स1),n(एक्स2)लॉग2n(एक्स1)+लॉग2n(एक्स2)लॉग2(n(एक्स1)n(एक्स2))

2लॉग2(10)=24=8लॉग2(1010)=7

यह हमेशा आवेदन पर निर्भर करता है, लेकिन आम तौर पर जब आप सुझाव देते हैं कि जैसे आप 'वैरिएबल' में शामिल होते हैं, तो यह अधिक कम्प्यूटेशनल शक्ति खर्च करने वाला है यदि आप इन चरों पर संचालन करना चाहते हैं। 'ज्वाइन' वेरिएबल पर परिचालन जोड़ना और घटाना सामान्य से अधिक जटिल है, और हार्डवेयर में अधिक स्थान की आवश्यकता हो सकती है, या लंबे समय तक देरी का कारण हो सकता है।


...


2

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

यदि आपके पास 0 से 2 की सीमा में 5 मान हैं, तो आप प्रतिनिधित्व कर सकते हैं कि 8 बिट्स (आपको मूल्यों का प्रतिनिधित्व करने के लिए कम से कम 7.92 बिट्स की आवश्यकता है) प्रत्येक मूल्य के लिए 2 बिट्स का उपयोग करने के भोले तरीके से उपयोग किए जाने वाले 10 बिट्स के बजाय, करके (((n 1 * 3 + n 2 ) * 3 + n 3 ) * 3 + n 4 ) * 3 + n 5


एन्कोडिंग की इस पद्धति का कोई नाम है?
कीगन जय

1

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

हाई-जेड से सिग्नल (जहां सिग्नल आमतौर पर सिलिकॉन में ग्राउंड होता है) के लिए एक सिग्नल ट्रांस्फ़ॉर्म के लिए मेरा सामान्य शब्द एक आधा-बिट सिग्नल है।


1

आप एक दशमलव अंक भेजना चाहते हैं, 3, बिट्स की जरूरत है। लेकिन आपको 4 बिट्स का उपयोग करना होगा, क्योंकि आप एक बिट का एक तिहाई नहीं भेज सकते हैं।

तो, यह पता लगाने के लिए कि वास्तव में 3⅓ बिट्स का क्या मतलब है, आपको प्रत्येक 3⅓ बिट्स के दो (या तीन) अंक चाहिए। यदि आप 0 और 9 के बीच 2 (3) दशमलव अंक भेजना चाहते हैं, तो प्रत्येक को 3⅓ बिट्स से थोड़ा कम की जरूरत है, आप ऐसा 7 (10) बिट्स का उपयोग करके कर सकते हैं। रचनात्मक प्रमाण आसान है:

7 (10) बिट्स आपको 0 और 128 (1023) के बीच एक संख्या को एनकोड करने की अनुमति देते हैं - लेकिन आपको केवल 00 (000) से 99 (999) की आवश्यकता होगी, जो दो (तीन) दशमलव अंकों के सभी संभव एन्कोडिंग हैं। QED


1

मुझे लगता है कि आप गलत समझ रहे हैं कि लिंक किए गए विकी लेख में क्या है। क्या अर्थ होता है कि वर्णों की स्ट्रिंग है कि पूरी तरह से संख्यात्मक है (बिना रिक्त स्थान, अल्पविराम या रिक्तियों) के लिए, आदर्श संपीड़न का उपयोग कर, आप 3 का उपयोग हर किरदार का प्रतिनिधित्व कर सकते है 1 / 3 बिट्स औसतन । दरअसल, यह इससे थोड़ा बेहतर है, क्योंकि गणित कहता है कि आप लंबे समय में लॉग 2 (10) = 3.3219 बिट्स / चरित्र प्राप्त कर सकते हैं।

इसी तरह, अल्फ़ान्यूमेरिक प्लस (केवल प्रतीक, और 9 प्रतीक), या 45 वर्णों के सेट के लिए, आपको लॉग 2 (45) = 5.4918 बिट्स / वर्ण की आवश्यकता है, जो कि लेख में 5.5 तक है।

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

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