असममित अंक प्रणाली: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Enthropy coding methods}}
{{Short description|Enthropy coding methods}}
{{Numeral systems}}
{{Numeral systems}}
असममित अंक प्रणाली (एएनएस)<ref name=PCS2015>J. Duda, K. Tahboub, N. J. Gadil, E. J. Delp, [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=7170048 ''The use of asymmetric numeral systems as an accurate replacement for Huffman coding''], Picture Coding Symposium, 2015.</ref><ref name="Duda2013">J. Duda, [https://arxiv.org/abs/1311.2540 ''Asymmetric numeral systems: entropy coding combining speed of Huffman coding with compression rate of arithmetic coding''], arXiv:1311.2540, 2013.</ref> जारोस्लाव डूडा (कंप्यूटर वैज्ञानिक) द्वारा शुरू की गई [[एन्ट्रापी एन्कोडिंग]] विधियों का परिवार है | जारोस्लाव (जेरेक) डूडा<ref>{{cite web |url=http://th.if.uj.edu.pl/~dudaj/ |title=Dr Jarosław Duda (Jarek Duda) |website=Institute of Theoretical Physics |publisher=Jagiellonian University in Krakow |access-date=2021-08-02}}</ref> [[जगियेलोनियन विश्वविद्यालय]] से, 2014 से डेटा संपीड़न में उपयोग किया जाता है<ref name=list>{{cite web
असममित अंक प्रणाली (एएनएस)<ref name=PCS2015>J. Duda, K. Tahboub, N. J. Gadil, E. J. Delp, [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=7170048 ''The use of asymmetric numeral systems as an accurate replacement for Huffman coding''], Picture Coding Symposium, 2015.</ref><ref name="Duda2013">J. Duda, [https://arxiv.org/abs/1311.2540 ''Asymmetric numeral systems: entropy coding combining speed of Huffman coding with compression rate of arithmetic coding''], arXiv:1311.2540, 2013.</ref> [[जगियेलोनियन विश्वविद्यालय]] के जारोस्लाव डूडा द्वारा प्रारम्भ की गई [[एन्ट्रापी एन्कोडिंग]] विधियों का समूह होता है, <ref>{{cite web |url=http://th.if.uj.edu.pl/~dudaj/ |title=Dr Jarosław Duda (Jarek Duda) |website=Institute of Theoretical Physics |publisher=Jagiellonian University in Krakow |access-date=2021-08-02}}</ref>जिसका उपयोग पिछले विधियों की तुलना में श्रेष्ट प्रदर्शन के कारण 2014 से डेटा संपीड़न में उपयोग किया जाता है।<ref name=list>{{cite web
  |url=https://encode.su/threads/2078-List-of-Asymmetric-Numeral-Systems-implementations
  |url=https://encode.su/threads/2078-List-of-Asymmetric-Numeral-Systems-implementations
  |title=List of compressors using ANS, implementations and other materials
  |title=List of compressors using ANS, implementations and other materials
  |last=Duda |first=Jarek |date=October 6, 2019  |access-date=October 6, 2019}}</ref> पिछले तरीकों की तुलना में बेहतर प्रदर्शन के कारण।<ref name="blANS">{{cite web |url=https://www.bleepingcomputer.com/news/google/google-accused-of-trying-to-patent-public-domain-technology/ |title=Google पर सार्वजनिक डोमेन प्रौद्योगिकी का पेटेंट कराने का प्रयास करने का आरोप|work=[[Bleeping Computer]] |date=September 11, 2017}}</ref> एएनएस [[हफ़मैन कोडिंग]] के समान प्रसंस्करण लागत के साथ अंकगणित कोडिंग (जो लगभग सटीक संभाव्यता वितरण का उपयोग करता है) के संपीड़न अनुपात को जोड़ता है। सारणीबद्ध ANS (tANS) संस्करण में, इसे गुणन का उपयोग किए बिना बड़े वर्णमाला पर काम करने के लिए परिमित-अवस्था मशीन का निर्माण करके प्राप्त किया जाता है।
  |last=Duda |first=Jarek |date=October 6, 2019  |access-date=October 6, 2019}}</ref><ref name="blANS">{{cite web |url=https://www.bleepingcomputer.com/news/google/google-accused-of-trying-to-patent-public-domain-technology/ |title=Google पर सार्वजनिक डोमेन प्रौद्योगिकी का पेटेंट कराने का प्रयास करने का आरोप|work=[[Bleeping Computer]] |date=September 11, 2017}}</ref> एएनएस [[हफ़मैन कोडिंग]] के समान प्रसंस्करण लागत के साथ अंकगणित कोडिंग (जो लगभग स्पष्ट संभाव्यता वितरण का उपयोग करता है) के संपीड़न अनुपात को जोड़ता है। सारणीबद्ध ANS (tANS) संस्करण में, इसे गुणन का उपयोग किए बिना बड़े वर्णमाला पर काम करने के लिए परिमित-अवस्था मशीन का निर्माण करके प्राप्त किया जाता है।
 
अन्य बातों के अतिरिक्त, ANS का उपयोग [[Facebook|फेसबुक]] [[Zstandard|फेसबुक ज़ेडस्टैंडर्ड]] कंप्रेसर <ref name=ZSTD>[https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/ ''Smaller and faster data compression with Zstandard''], Facebook, August 2016.</ref><ref name=ZSTD1>[https://code.fb.com/core-data/zstandard/ ''5 ways Facebook improved compression at scale with Zstandard''], Facebook, December 2018.</ref> (उदाहरण के लिए [[लिनक्स]] कर्नेल, [[एंड्रॉइड (ऑपरेटिंग सिस्टम)|एंड्रॉइड ऑपरेटिंग सिस्टम]] में भी उपयोग किया जाता है जिसे<ref name=Linux>[https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.14-Zstd-Pull ''Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook''], Phoronix, September 2017.</ref> <ref>{{cite web |url=https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14-p-release/fs/btrfs/zstd.c |title=Android P रिलीज़ में Zstd|access-date=2019-05-29 |archive-date=2020-08-26 |archive-url=https://web.archive.org/web/20200826023340/https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14-p-release/fs/btrfs/zstd.c |url-status=dead }}</ref> [[MIME|एमआईएमई]] और [[HTTP|एचटीटीपी]] के ​​लिए RFC 8478 के रूप में प्रकाशित किया गया था<ref name=MIME>[https://datatracker.ietf.org/doc/draft-kucherawy-dispatch-zstd/ ''Zstandard Compression and The application/zstd Media Type (email standard)''].</ref> <ref name="HTTP">[https://www.iana.org/assignments/http-parameters/http-parameters.xhtml ''Hypertext Transfer Protocol (HTTP) Parameters''], [[IANA]].</ref>), एप्पल इंक [[एलजेडएफएसई]] कंप्रेसर,<ref name="LZFSE">[https://www.infoq.com/news/2016/07/apple-lzfse-lossless-opensource ''Apple Open-Sources its New Compression Algorithm LZFSE''], InfoQ, July 2016.</ref> [[गूगल]] ड्रेको 3डी कंप्रेसर<ref name="Draco">[https://github.com/google/draco ''Google Draco 3D compression library''].</ref> (उदाहरण के लिए [[पिक्सर]] [[ सार्वभौमिक दृश्य विवरण |सार्वभौमिक दृश्य विवरण]] फॉर्मेट में उपयोग किया जाता है<ref name="Pixar">[https://opensource.googleblog.com/2019/11/google-and-pixar-add-draco-compression.html ''Google and Pixar add Draco Compression to Universal Scene Description (USD) Format ''].</ref>) और पीआईके छवि कंप्रेसर,<ref name="PIK">[https://github.com/google/pik ''Google PIK: new lossy image format for the internet''].</ref> [[CRAM (फ़ाइल स्वरूप)|सीआरएएम]] डीएनए कंप्रेसर<ref name="CRAM">[https://samtools.github.io/hts-specs/CRAMv3.pdf ''CRAM format specification (version 3.0)''].</ref> [[SAMtools|सैमटूल्स]] उपयोगिताओं से,<ref name="pmid34590992">{{cite journal| author=Chen W, Elliott LT| title=परिमित-अवस्था एन्ट्रापी के माध्यम से जनसंख्या आनुवंशिक डेटा के लिए संपीड़न।| journal=J Bioinform Comput Biol | year= 2021 | volume=  19| issue=  5| pages= 2150026 | pmid=34590992 | doi=10.1142/S0219720021500268 | pmc= | doi-access=free }}</ref> [[ड्रॉपबॉक्स (सेवा)|ड्रॉपबॉक्]] DivANS कंप्रेसर,<ref name="DivANS">[https://blogs.dropbox.com/tech/2018/06/building-better-compression-together-with-divans/ ''Building better compression together with DivANS''].</ref> [[माइक्रोसॉफ्ट]] [[डायरेक्टस्टोरेज]] बीसीपैक टेक्सचर कंप्रेसर,<ref name="BCPack">[https://docs.microsoft.com/en-us/gaming/gdk/_content/gc/system/overviews/directstorage/directstorage-overview ''Microsoft DirectStorage overview''].</ref> और [[जेपीईजी एक्सएल]]<ref name=jpegxl_committeedraft>{{cite arXiv |title=JPEG XL इमेज कोडिंग सिस्टम का समिति ड्राफ्ट|eprint = 1908.03565 |last1 = Rhatushnyak |first1 = Alexander |last2 = Wassenberg |first2 = Jan |last3 = Sneyers |first3 = Jon |last4 = Alakuijala |first4 = Jyrki |last5 = Vandevenne |first5 = Lode |last6 = Versari |first6 = Luca |last7 = Obryk |first7 = Robert |last8 = Szabadka |first8 = Zoltan |last9 = Kliuchnikov |first9 = Evgenii |last10 = Comsa |first10 = Iulia-Maria |last11 = Potempa |first11 = Krzysztof |last12 = Bruse |first12 = Martin |last13 = Firsching |first13 = Moritz |last14 = Khasanova |first14 = Renata |author15 = Ruud van Asseldonk |last16 = Boukortt |first16 = Sami |last17 = Gomez |first17 = Sebastian |last18 = Fischbacher |first18 = Thomas |class = eess.IV |year = 2019}}</ref> छवि कंप्रेसर इत्यादि में किया जाता है। 
 
 


अन्य बातों के अलावा, ANS का उपयोग [[Facebook]] [[Zstandard]] कंप्रेसर में किया जाता है<ref name=ZSTD>[https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/ ''Smaller and faster data compression with Zstandard''], Facebook, August 2016.</ref><ref name=ZSTD1>[https://code.fb.com/core-data/zstandard/ ''5 ways Facebook improved compression at scale with Zstandard''], Facebook, December 2018.</ref> (उदाहरण के लिए [[लिनक्स]] कर्नेल में भी उपयोग किया जाता है,<ref name=Linux>[https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.14-Zstd-Pull ''Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook''], Phoronix, September 2017.</ref> [[एंड्रॉइड (ऑपरेटिंग सिस्टम)]]<ref>{{cite web |url=https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14-p-release/fs/btrfs/zstd.c |title=Android P रिलीज़ में Zstd|access-date=2019-05-29 |archive-date=2020-08-26 |archive-url=https://web.archive.org/web/20200826023340/https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14-p-release/fs/btrfs/zstd.c |url-status=dead }}</ref> ऑपरेटिंग सिस्टम, [[MIME]] के ​​लिए RFC 8478 के रूप में प्रकाशित किया गया था<ref name=MIME>[https://datatracker.ietf.org/doc/draft-kucherawy-dispatch-zstd/ ''Zstandard Compression and The application/zstd Media Type (email standard)''].</ref> और [[HTTP]]<ref name=HTTP>[https://www.iana.org/assignments/http-parameters/http-parameters.xhtml ''Hypertext Transfer Protocol (HTTP) Parameters''], [[IANA]].</ref>), एप्पल इंक. [[एलजेडएफएसई]] कंप्रेसर,<ref name=LZFSE>[https://www.infoq.com/news/2016/07/apple-lzfse-lossless-opensource ''Apple Open-Sources its New Compression Algorithm LZFSE''], InfoQ, July 2016.</ref> [[गूगल]] ड्रेको 3डी कंप्रेसर<ref name=Draco>[https://github.com/google/draco ''Google Draco 3D compression library''].</ref> (उदाहरण के लिए [[पिक्सर]]  [[ सार्वभौमिक दृश्य विवरण |सार्वभौमिक दृश्य विवरण]]  फॉर्मेट में उपयोग किया जाता है<ref name=Pixar>[https://opensource.googleblog.com/2019/11/google-and-pixar-add-draco-compression.html ''Google and Pixar add Draco Compression to Universal Scene Description (USD) Format ''].</ref>) और PIK छवि कंप्रेसर,<ref name=PIK>[https://github.com/google/pik ''Google PIK: new lossy image format for the internet''].</ref> [[CRAM (फ़ाइल स्वरूप)]] डीएनए कंप्रेसर<ref name=CRAM>[https://samtools.github.io/hts-specs/CRAMv3.pdf ''CRAM format specification (version 3.0)''].</ref> [[SAMtools]] उपयोगिताओं से,<ref name="pmid34590992">{{cite journal| author=Chen W, Elliott LT| title=परिमित-अवस्था एन्ट्रापी के माध्यम से जनसंख्या आनुवंशिक डेटा के लिए संपीड़न।| journal=J Bioinform Comput Biol | year= 2021 | volume=  19| issue=  5| pages= 2150026 | pmid=34590992 | doi=10.1142/S0219720021500268 | pmc= | doi-access=free }}</ref> [[ड्रॉपबॉक्स (सेवा)]] DivANS कंप्रेसर,<ref name=DivANS>[https://blogs.dropbox.com/tech/2018/06/building-better-compression-together-with-divans/ ''Building better compression together with DivANS''].</ref> [[माइक्रोसॉफ्ट]] [[डायरेक्टस्टोरेज]] बीसीपैक टेक्सचर कंप्रेसर,<ref name=BCPack>[https://docs.microsoft.com/en-us/gaming/gdk/_content/gc/system/overviews/directstorage/directstorage-overview ''Microsoft DirectStorage overview''].</ref> और [[जेपीईजी एक्सएल|जेपीईजी  ्सएल]]<ref name=jpegxl_committeedraft>{{cite arXiv |title=JPEG XL इमेज कोडिंग सिस्टम का समिति ड्राफ्ट|eprint = 1908.03565 |last1 = Rhatushnyak |first1 = Alexander |last2 = Wassenberg |first2 = Jan |last3 = Sneyers |first3 = Jon |last4 = Alakuijala |first4 = Jyrki |last5 = Vandevenne |first5 = Lode |last6 = Versari |first6 = Luca |last7 = Obryk |first7 = Robert |last8 = Szabadka |first8 = Zoltan |last9 = Kliuchnikov |first9 = Evgenii |last10 = Comsa |first10 = Iulia-Maria |last11 = Potempa |first11 = Krzysztof |last12 = Bruse |first12 = Martin |last13 = Firsching |first13 = Moritz |last14 = Khasanova |first14 = Renata |author15 = Ruud van Asseldonk |last16 = Boukortt |first16 = Sami |last17 = Gomez |first17 = Sebastian |last18 = Fischbacher |first18 = Thomas |class = eess.IV |year = 2019}}</ref> छवि कंप्रेसर.


मूल विचार जानकारी को प्राकृतिक संख्या में एन्कोड करना है <math>x</math>. मानक बाइनरी संख्या प्रणाली में, हम थोड़ा सा जोड़ सकते हैं <math>s \in \{0, 1\}</math> को जानकारी का <math>x</math> जोड़कर <math>s</math> के अंत में <math>x</math>, जो हमें देता है <math>x' = 2x + s</math>. एन्ट्रॉपी कोडर के लिए, यह इष्टतम है यदि <math>\Pr(0) = \Pr(1) = 1/2</math>. ANS इस प्रक्रिया को प्रतीकों के मनमाने सेट के लिए सामान्यीकृत करता है <math>s \in S</math> संभाव्यता वितरण के साथ <math>(p_s)_{s \in S}</math>. ANS में, यदि से जानकारी <math>s</math> से जोड़ा गया है <math>x</math> इसके परिणाम में <math>x'</math>, तब <math>x' \approx x \cdot p_s^{-1}</math>. समान रूप से, <math>\log_2(x') \approx \log_2(x) + \log_2(1/p_s)</math>, कहाँ <math>\log_2(x)</math> संख्या में संग्रहीत जानकारी के बिट्स की संख्या है <math>x</math>, और <math>\log_2(1/p_s)</math> प्रतीक में निहित बिट्स की संख्या है <math>s</math>.
मूल विचार जानकारी को प्राकृतिक संख्या में एन्कोड करना है <math>x</math>. मानक बाइनरी संख्या प्रणाली में, हम थोड़ा सा जोड़ सकते हैं <math>s \in \{0, 1\}</math> को जानकारी का <math>x</math> जोड़कर <math>s</math> के अंत में <math>x</math>, जो हमें देता है <math>x' = 2x + s</math>. एन्ट्रॉपी कोडर के लिए, यह इष्टतम है यदि <math>\Pr(0) = \Pr(1) = 1/2</math>. ANS इस प्रक्रिया को प्रतीकों के मनमाने सेट के लिए सामान्यीकृत करता है <math>s \in S</math> संभाव्यता वितरण के साथ <math>(p_s)_{s \in S}</math>. ANS में, यदि से जानकारी <math>s</math> से जोड़ा गया है <math>x</math> इसके परिणाम में <math>x'</math>, तब <math>x' \approx x \cdot p_s^{-1}</math>. समान रूप से, <math>\log_2(x') \approx \log_2(x) + \log_2(1/p_s)</math>, कहाँ <math>\log_2(x)</math> संख्या में संग्रहीत जानकारी के बिट्स की संख्या है <math>x</math>, और <math>\log_2(1/p_s)</math> प्रतीक में निहित बिट्स की संख्या है <math>s</math>.
Line 12: Line 15:
एन्कोडिंग नियम के लिए, प्राकृतिक संख्याओं के सेट को विभिन्न प्रतीकों के अनुरूप असंयुक्त उपसमूहों में विभाजित किया गया है{{snd}} सम और विषम संख्याओं की तरह, लेकिन एन्कोड करने के लिए प्रतीकों की संभाव्यता वितरण के अनुरूप घनत्व के साथ। फिर सिंबल से जानकारी जोड़ना है <math>s</math> वर्तमान संख्या में पहले से ही संग्रहीत जानकारी में <math>x</math>, हम नंबर पर जाते हैं <math>x' = C(x, s) \approx x/p</math> की स्थिति होने के नाते <math>x</math>-वें से उपस्थिति <math>s</math>-वां उपसमुच्चय.
एन्कोडिंग नियम के लिए, प्राकृतिक संख्याओं के सेट को विभिन्न प्रतीकों के अनुरूप असंयुक्त उपसमूहों में विभाजित किया गया है{{snd}} सम और विषम संख्याओं की तरह, लेकिन एन्कोड करने के लिए प्रतीकों की संभाव्यता वितरण के अनुरूप घनत्व के साथ। फिर सिंबल से जानकारी जोड़ना है <math>s</math> वर्तमान संख्या में पहले से ही संग्रहीत जानकारी में <math>x</math>, हम नंबर पर जाते हैं <math>x' = C(x, s) \approx x/p</math> की स्थिति होने के नाते <math>x</math>-वें से उपस्थिति <math>s</math>-वां उपसमुच्चय.


इसे व्यवहार में लागू करने के वैकल्पिक तरीके हैं{{snd}} एन्कोडिंग और डिकोडिंग चरणों (यूएबीएस और आरएएनएस वेरिएंट) के लिए प्रत्यक्ष गणितीय सूत्र, या कोई संपूर्ण व्यवहार को   तालिका (टीएएनएस वेरिएंट) में डाल सकता है। रोकने के लिए पुनर्सामान्यीकरण का उपयोग किया जाता है <math>x</math> अनंत तक जा रहा हूँ{{snd}} संचित बिट्स को बिटस्ट्रीम में या उससे स्थानांतरित करना।
इसे व्यवहार में लागू करने के वैकल्पिक तरीके हैं{{snd}} एन्कोडिंग और डिकोडिंग चरणों (यूएबीएस और आरएएनएस वेरिएंट) के लिए प्रत्यक्ष गणितीय सूत्र, या कोई संपूर्ण व्यवहार को तालिका (टीएएनएस वेरिएंट) में डाल सकता है। रोकने के लिए पुनर्सामान्यीकरण का उपयोग किया जाता है <math>x</math> अनंत तक जा रहा हूँ{{snd}} संचित बिट्स को बिटस्ट्रीम में या उससे स्थानांतरित करना।


==एंट्रॉपी कोडिंग==
==एंट्रॉपी कोडिंग==
मान लीजिए कि 1,000 शून्य और   का अनुक्रम एन्कोड किया जाएगा, जिसे सीधे स्टोर करने में 1000 बिट्स लगेंगे। हालाँकि, अगर यह किसी तरह ज्ञात हो कि इसमें केवल 1 शून्य और 999 हैं, तो यह शून्य की स्थिति को एनकोड करने के लिए पर्याप्त होगा, जिसके लिए केवल <math>\lceil \log_2(1000)\rceil \approx 10</math> मूल 1000 बिट्स के बजाय यहां बिट्स।
मान लीजिए कि 1,000 शून्य और का अनुक्रम एन्कोड किया जाएगा, जिसे सीधे स्टोर करने में 1000 बिट्स लगेंगे। हालाँकि, अगर यह किसी तरह ज्ञात हो कि इसमें केवल 1 शून्य और 999 हैं, तो यह शून्य की स्थिति को एनकोड करने के लिए पर्याप्त होगा, जिसके लिए केवल <math>\lceil \log_2(1000)\rceil \approx 10</math> मूल 1000 बिट्स के बजाय यहां बिट्स।


आम तौर पर, ऐसी लंबाई <math>n</math> अनुक्रम युक्त <math>pn</math> शून्य और <math>(1-p)n</math> वाले, कुछ संभावना के लिए <math>p\in(0,1)</math>, संयोजन कहलाते हैं। स्टर्लिंग सन्निकटन का उपयोग करके हमें उनकी स्पर्शोन्मुख संख्या प्राप्त होती है
आम तौर पर, ऐसी लंबाई <math>n</math> अनुक्रम युक्त <math>pn</math> शून्य और <math>(1-p)n</math> वाले, कुछ संभावना के लिए <math>p\in(0,1)</math>, संयोजन कहलाते हैं। स्टर्लिंग सन्निकटन का उपयोग करके हमें उनकी स्पर्शोन्मुख संख्या प्राप्त होती है
Line 22: Line 25:
[[एन्ट्रॉपी (सूचना सिद्धांत)]] कहा जाता है।
[[एन्ट्रॉपी (सूचना सिद्धांत)]] कहा जाता है।


इसलिए, ऐसे किसी   क्रम को चुनने के लिए हमें लगभग की आवश्यकता होती है <math>n h(p)</math> बिट्स यह अब भी है <math>n</math> बिट्स अगर <math>p=1/2</math>हालाँकि, यह बहुत छोटा भी हो सकता है। उदाहरण के लिए, हमें केवल इसकी आवश्यकता है <math>\approx n/2</math> के लिए बिट्स <math>p = 0.11</math>.
इसलिए, ऐसे किसी क्रम को चुनने के लिए हमें लगभग की आवश्यकता होती है <math>n h(p)</math> बिट्स यह अब भी है <math>n</math> बिट्स अगर <math>p=1/2</math>हालाँकि, यह बहुत छोटा भी हो सकता है। उदाहरण के लिए, हमें केवल इसकी आवश्यकता है <math>\approx n/2</math> के लिए बिट्स <math>p = 0.11</math>.


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


एन्कोडिंग संयोजनों के विपरीत, यह संभाव्यता वितरण आमतौर पर डेटा कंप्रेसर में भिन्न होता है। इस प्रयोजन के लिए, शैनन एन्ट्रॉपी को भारित औसत के रूप में देखा जा सकता है: संभाव्यता का प्रतीक <math>p</math> रोकना <math>\log_2(1/p)</math> जानकारी के टुकड़े. तथा जानकारी को   प्राकृतिक संख्या में एन्कोड करें <math>x</math>, युक्त के रूप में व्याख्या की गई <math>\log_2(x)</math> जानकारी के टुकड़े. संभाव्यता के प्रतीक से जानकारी जोड़ना <math>p</math> इस सूचनात्मक सामग्री को बढ़ाता है <math>\log_2(x)+\log_2(1/p)=\log_2(x/p)</math>. इसलिए, नए नंबर में दोनों जानकारी होनी चाहिए <math>x'\approx x/p </math>.
एन्कोडिंग संयोजनों के विपरीत, यह संभाव्यता वितरण आमतौर पर डेटा कंप्रेसर में भिन्न होता है। इस प्रयोजन के लिए, शैनन एन्ट्रॉपी को भारित औसत के रूप में देखा जा सकता है: संभाव्यता का प्रतीक <math>p</math> रोकना <math>\log_2(1/p)</math> जानकारी के टुकड़े. तथा जानकारी को प्राकृतिक संख्या में एन्कोड करें <math>x</math>, युक्त के रूप में व्याख्या की गई <math>\log_2(x)</math> जानकारी के टुकड़े. संभाव्यता के प्रतीक से जानकारी जोड़ना <math>p</math> इस सूचनात्मक सामग्री को बढ़ाता है <math>\log_2(x)+\log_2(1/p)=\log_2(x/p)</math>. इसलिए, नए नंबर में दोनों जानकारी होनी चाहिए <math>x'\approx x/p </math>.


=== प्रेरक उदाहरण ===
=== प्रेरक उदाहरण ===
1/2, 1/4, 1/4 प्रायिकता के साथ 3 अक्षरों ए, बी, सी वाले स्रोत पर विचार करें। बाइनरी में इष्टतम उपसर्ग कोड बनाना सरल है: ए = 0, बी = 10, सी = 11। फिर,   संदेश को एबीसी -> 01011 के रूप में एन्कोड किया गया है।
1/2, 1/4, 1/4 प्रायिकता के साथ 3 अक्षरों ए, बी, सी वाले स्रोत पर विचार करें। बाइनरी में इष्टतम उपसर्ग कोड बनाना सरल है: ए = 0, बी = 10, सी = 11। फिर, संदेश को एबीसी -> 01011 के रूप में एन्कोड किया गया है।


हम देखते हैं कि एन्कोडिंग करने के लिए   समकक्ष विधि इस प्रकार है:
हम देखते हैं कि एन्कोडिंग करने के लिए समकक्ष विधि इस प्रकार है:


* संख्या 1 से प्रारंभ करें, और प्रत्येक इनपुट अक्षर के लिए संख्या पर   ऑपरेशन करें।
* संख्या 1 से प्रारंभ करें, और प्रत्येक इनपुट अक्षर के लिए संख्या पर ऑपरेशन करें।
* ए = 2 से गुणा करें; बी = 4 से गुणा करें, 2 जोड़ें; C = 4 से गुणा करें, 3 जोड़ें।
* ए = 2 से गुणा करें; बी = 4 से गुणा करें, 2 जोड़ें; C = 4 से गुणा करें, 3 जोड़ें।
* संख्या को बाइनरी में व्यक्त करें, फिर पहला अंक 1 हटा दें।
* संख्या को बाइनरी में व्यक्त करें, फिर पहला अंक 1 हटा दें।


तर्कसंगत संभावनाओं के साथ k अक्षरों वाले   अधिक सामान्य स्रोत पर विचार करें <math>n_1/N, ..., n_k/N</math>. फिर स्रोत पर अंकगणितीय कोडिंग करने के लिए केवल पूर्णांकों के साथ सटीक अंकगणित की आवश्यकता होती है।
तर्कसंगत संभावनाओं के साथ k अक्षरों वाले अधिक सामान्य स्रोत पर विचार करें <math>n_1/N, ..., n_k/N</math>. फिर स्रोत पर अंकगणितीय कोडिंग करने के लिए केवल पूर्णांकों के साथ स्पष्ट अंकगणित की आवश्यकता होती है।


सामान्य तौर पर, ANS अंकगणितीय कोडिंग का   अनुमान है जो वास्तविक संभावनाओं का अनुमान लगाता है <math>r_1, ..., r_k</math> तर्कसंगत संख्याओं द्वारा <math>n_1/N, ..., n_k/N</math>   छोटे हर के साथ <math>N</math>.
सामान्य तौर पर, ANS अंकगणितीय कोडिंग का अनुमान है जो वास्तविक संभावनाओं का अनुमान लगाता है <math>r_1, ..., r_k</math> तर्कसंगत संख्याओं द्वारा <math>n_1/N, ..., n_k/N</math> छोटे हर के साथ <math>N</math>.


== ANS की मूल अवधारणाएँ ==
== ANS की मूल अवधारणाएँ ==
[[Image:ANS_general_picture.png|thumb|640px|right|अंकगणितीय कोडिंग (बाएं) और एएनएस (दाएं) की अवधारणा की तुलना। दोनों को मानक अंक प्रणालियों के सामान्यीकरण के रूप में देखा जा सकता है, जो अंकों के समान संभाव्यता वितरण के लिए इष्टतम है, कुछ चुने हुए संभाव्यता वितरण के लिए अनुकूलित है। अंकगणित या रेंज कोडिंग सबसे महत्वपूर्ण स्थिति में नई जानकारी जोड़ने से मेल खाती है, जबकि एएनएस कम से कम महत्वपूर्ण स्थिति में जानकारी जोड़ने का सामान्यीकरण करता है। इसका कोडिंग नियम यह है कि x वर्तमान में एन्कोड किए गए प्रतीक के अनुरूप प्राकृतिक संख्याओं के सबसेट की x-वें उपस्थिति पर जाता है। प्रस्तुत उदाहरण में, अनुक्रम (01111) को   प्राकृतिक संख्या 18 में एन्कोड किया गया है, जो एनकोड करने के लिए अनुक्रम की आवृत्तियों के साथ बेहतर समझौते के कारण मानक बाइनरी सिस्टम का उपयोग करके प्राप्त 47 से छोटा है। ANS का लाभ   सीमा को परिभाषित करने वाले दो के विपरीत,   ही प्राकृतिक संख्या में जानकारी संग्रहीत करना है।]]कल्पना कीजिए कि कुछ जानकारी   प्राकृतिक संख्या में संग्रहीत है <math>x</math>, उदाहरण के लिए इसके बाइनरी विस्तार के बिट अनुक्रम के रूप में। बाइनरी वेरिएबल से जानकारी जोड़ने के लिए <math>s</math>, हम कोडिंग फ़ंक्शन का उपयोग कर सकते हैं <math>x'=C(x,s) = 2x + s </math>, जो सभी बिट्स को   स्थान ऊपर स्थानांतरित करता है, और नए बिट को कम से कम महत्वपूर्ण स्थान पर रखता है। अब डिकोडिंग फ़ंक्शन <math>D(x')=(\lfloor x'/2 \rfloor, \mathrm{mod}(x',2))</math> किसी को पिछले को पुनः प्राप्त करने की अनुमति देता है <math>x</math> और इसमें थोड़ा सा जोड़ा गया: <math>D(C(x,s))=(x,s),\ C(D(x'))=x'</math>. हम शुरुआत कर सकते हैं <math>x=1</math> प्रारंभिक अवस्था, फिर उपयोग करें <math>C</math> अंतिम प्राप्त करने के लिए   परिमित बिट अनुक्रम के क्रमिक बिट्स पर कार्य करें <math>x</math> इस पूरे अनुक्रम को संग्रहीत करने वाली संख्या। फिर उपयोग करना <math>D</math> तक कई बार कार्य करें <math>x=1</math> किसी को बिट अनुक्रम को उल्टे क्रम में पुनः प्राप्त करने की अनुमति देता है।
[[Image:ANS_general_picture.png|thumb|640px|right|अंकगणितीय कोडिंग (बाएं) और एएनएस (दाएं) की अवधारणा की तुलना। दोनों को मानक अंक प्रणालियों के सामान्यीकरण के रूप में देखा जा सकता है, जो अंकों के समान संभाव्यता वितरण के लिए इष्टतम है, कुछ चुने हुए संभाव्यता वितरण के लिए अनुकूलित है। अंकगणित या रेंज कोडिंग सबसे महत्वपूर्ण स्थिति में नई जानकारी जोड़ने से मेल खाती है, जबकि एएनएस कम से कम महत्वपूर्ण स्थिति में जानकारी जोड़ने का सामान्यीकरण करता है। इसका कोडिंग नियम यह है कि x वर्तमान में एन्कोड किए गए प्रतीक के अनुरूप प्राकृतिक संख्याओं के सबसेट की x-वें उपस्थिति पर जाता है। प्रस्तुत उदाहरण में, अनुक्रम (01111) को प्राकृतिक संख्या 18 में एन्कोड किया गया है, जो एनकोड करने के लिए अनुक्रम की आवृत्तियों के साथ बेहतर समझौते के कारण मानक बाइनरी सिस्टम का उपयोग करके प्राप्त 47 से छोटा है। ANS का लाभ सीमा को परिभाषित करने वाले दो के विपरीत, ही प्राकृतिक संख्या में जानकारी संग्रहीत करना है।]]कल्पना कीजिए कि कुछ जानकारी प्राकृतिक संख्या में संग्रहीत है <math>x</math>, उदाहरण के लिए इसके बाइनरी विस्तार के बिट अनुक्रम के रूप में। बाइनरी वेरिएबल से जानकारी जोड़ने के लिए <math>s</math>, हम कोडिंग फ़ंक्शन का उपयोग कर सकते हैं <math>x'=C(x,s) = 2x + s </math>, जो सभी बिट्स को स्थान ऊपर स्थानांतरित करता है, और नए बिट को कम से कम महत्वपूर्ण स्थान पर रखता है। अब डिकोडिंग फ़ंक्शन <math>D(x')=(\lfloor x'/2 \rfloor, \mathrm{mod}(x',2))</math> किसी को पिछले को पुनः प्राप्त करने की अनुमति देता है <math>x</math> और इसमें थोड़ा सा जोड़ा गया: <math>D(C(x,s))=(x,s),\ C(D(x'))=x'</math>. हम शुरुआत कर सकते हैं <math>x=1</math> प्रारंभिक अवस्था, फिर उपयोग करें <math>C</math> अंतिम प्राप्त करने के लिए परिमित बिट अनुक्रम के क्रमिक बिट्स पर कार्य करें <math>x</math> इस पूरे अनुक्रम को संग्रहीत करने वाली संख्या। फिर उपयोग करना <math>D</math> तक कई बार कार्य करें <math>x=1</math> किसी को बिट अनुक्रम को उल्टे क्रम में पुनः प्राप्त करने की अनुमति देता है।


उपरोक्त प्रक्रिया प्रतीकों के   समान (सममित) संभाव्यता वितरण के लिए इष्टतम है <math>\Pr(0)=\Pr(1)=1/2</math>. ANS इसे प्रतीकों के किसी भी चुने हुए (असममित) संभाव्यता वितरण के लिए इष्टतम बनाने के लिए सामान्यीकृत करता है: <math>\Pr(s)=p_s</math>. जबकि <math>s</math> उपरोक्त उदाहरण में सम और विषम के बीच चयन करना था <math>C(x,s)</math>, ANS में प्राकृतिक संख्याओं के इस सम/विषम विभाजन को कल्पित संभाव्यता वितरण के अनुरूप घनत्व वाले उपसमूहों में विभाजन के साथ प्रतिस्थापित किया जाता है। <math>\{p_s\}_s</math>: पद तक <math>x</math>, लगभग हैं <math>x p_s</math> प्रतीक की घटनाएँ <math>s</math>.
उपरोक्त प्रक्रिया प्रतीकों के समान (सममित) संभाव्यता वितरण के लिए इष्टतम है <math>\Pr(0)=\Pr(1)=1/2</math>. ANS इसे प्रतीकों के किसी भी चुने हुए (असममित) संभाव्यता वितरण के लिए इष्टतम बनाने के लिए सामान्यीकृत करता है: <math>\Pr(s)=p_s</math>. जबकि <math>s</math> उपरोक्त उदाहरण में सम और विषम के बीच चयन करना था <math>C(x,s)</math>, ANS में प्राकृतिक संख्याओं के इस सम/विषम विभाजन को कल्पित संभाव्यता वितरण के अनुरूप घनत्व वाले उपसमूहों में विभाजन के साथ प्रतिस्थापित किया जाता है। <math>\{p_s\}_s</math>: पद तक <math>x</math>, लगभग हैं <math>x p_s</math> प्रतीक की घटनाएँ <math>s</math>.


कोडिंग फ़ंक्शन <math> C(x,s)</math> को लौटाता है <math>x</math>प्रतीक के अनुरूप ऐसे उपसमुच्चय से -वाँ स्वरूप <math> s</math>. घनत्व धारणा स्थिति के बराबर है <math> x'=C(x,s) \approx x / p_s </math>. यह मानते हुए कि यह   प्राकृतिक संख्या है <math> x </math> रोकना <math> \log_2(x) </math> जानकारी के टुकड़े, <math> \log_2(C(x,s)) \approx \log_2(x) + \log_2(1/ p_s) </math>. अतः संभाव्यता का प्रतीक है <math> p_s </math> युक्त के रूप में एन्कोड किया गया है <math> \approx\log_2(1/ p_s) </math> एन्ट्रॉपी एन्कोडिंग से आवश्यक जानकारी के टुकड़े।
कोडिंग फ़ंक्शन <math> C(x,s)</math> को लौटाता है <math>x</math>प्रतीक के अनुरूप ऐसे उपसमुच्चय से -वाँ स्वरूप <math> s</math>. घनत्व धारणा स्थिति के बराबर है <math> x'=C(x,s) \approx x / p_s </math>. यह मानते हुए कि यह प्राकृतिक संख्या है <math> x </math> रोकना <math> \log_2(x) </math> जानकारी के टुकड़े, <math> \log_2(C(x,s)) \approx \log_2(x) + \log_2(1/ p_s) </math>. अतः संभाव्यता का प्रतीक है <math> p_s </math> युक्त के रूप में एन्कोड किया गया है <math> \approx\log_2(1/ p_s) </math> एन्ट्रॉपी एन्कोडिंग से आवश्यक जानकारी के टुकड़े।


== यूनिफ़ॉर्म बाइनरी वेरिएंट (यूएबीएस) ==
== यूनिफ़ॉर्म बाइनरी वेरिएंट (यूएबीएस) ==
Line 59: Line 62:
if s = 0 then new_x = ceil((x+1)/(1-p)) - 1 // C(x,0) = new_x
if s = 0 then new_x = ceil((x+1)/(1-p)) - 1 // C(x,0) = new_x
if s = 1 then new_x = floor(x/p)  // C(x,1) = new_x </syntaxhighlight>
if s = 1 then new_x = floor(x/p)  // C(x,1) = new_x </syntaxhighlight>
के लिए <math>p=1/2</math> यह   अलग के लिए मानक बाइनरी सिस्टम (0 और 1 उलटा के साथ) के बराबर है <math>p</math> यह इस दिए गए संभाव्यता वितरण के लिए इष्टतम बन जाता है। उदाहरण के लिए, के लिए <math>p=0.3</math> ये सूत्र छोटे मानों के लिए   तालिका की ओर ले जाते हैं <math>x</math>:
के लिए <math>p=1/2</math> यह अलग के लिए मानक बाइनरी सिस्टम (0 और 1 उलटा के साथ) के बराबर है <math>p</math> यह इस दिए गए संभाव्यता वितरण के लिए इष्टतम बन जाता है। उदाहरण के लिए, के लिए <math>p=0.3</math> ये सूत्र छोटे मानों के लिए तालिका की ओर ले जाते हैं <math>x</math>:


{| class="wikitable" align="center"
{| class="wikitable" align="center"
Line 136: Line 139:
कोडिंग <math>C(x,s)</math> किसी दिए गए प्रतीक के अनुरूप पंक्ति लेकर पाया जा सकता है <math>s</math>, और दिए गए को चुनना <math>x</math> इस पंक्ति में. फिर शीर्ष पंक्ति प्रदान करती है <math>C(x,s)</math>. उदाहरण के लिए, <math>C(7,0)=11 </math> मध्य से शीर्ष पंक्ति तक.
कोडिंग <math>C(x,s)</math> किसी दिए गए प्रतीक के अनुरूप पंक्ति लेकर पाया जा सकता है <math>s</math>, और दिए गए को चुनना <math>x</math> इस पंक्ति में. फिर शीर्ष पंक्ति प्रदान करती है <math>C(x,s)</math>. उदाहरण के लिए, <math>C(7,0)=11 </math> मध्य से शीर्ष पंक्ति तक.


कल्पना कीजिए कि हम '0100' से शुरू होने वाले अनुक्रम को एन्कोड करना चाहेंगे <math>x=1</math>. पहला <math>s=0</math> हमें ले जाता है <math>x=2</math>, तब <math>s=1</math> को <math>x=6</math>, तब <math>s=0</math> को <math>x=9</math>, तब <math>s=0</math> को <math>x=14</math>. डिकोडिंग फ़ंक्शन का उपयोग करके <math>D(x')</math> इस फाइनल पर <math>x</math>, हम प्रतीक अनुक्रम पुनः प्राप्त कर सकते हैं। इस प्रयोजन के लिए तालिका का उपयोग करते हुए, <math>x</math> पहली पंक्ति में कॉलम निर्धारित होता है, फिर गैर-रिक्त पंक्ति और लिखित मान संबंधित निर्धारित करते हैं <math>s</math> और <math>x</math>.
कल्पना कीजिए कि हम '0100' से प्रारम्भ  होने वाले अनुक्रम को एन्कोड करना चाहेंगे <math>x=1</math>. पहला <math>s=0</math> हमें ले जाता है <math>x=2</math>, तब <math>s=1</math> को <math>x=6</math>, तब <math>s=0</math> को <math>x=9</math>, तब <math>s=0</math> को <math>x=14</math>. डिकोडिंग फ़ंक्शन का उपयोग करके <math>D(x')</math> इस फाइनल पर <math>x</math>, हम प्रतीक अनुक्रम पुनः प्राप्त कर सकते हैं। इस प्रयोजन के लिए तालिका का उपयोग करते हुए, <math>x</math> पहली पंक्ति में कॉलम निर्धारित होता है, फिर गैर-रिक्त पंक्ति और लिखित मान संबंधित निर्धारित करते हैं <math>s</math> और <math>x</math>.


== रेंज वेरिएंट (आरएएनएस) और स्ट्रीमिंग ==
== रेंज वेरिएंट (आरएएनएस) और स्ट्रीमिंग ==
Line 143: Line 146:
हम संभाव्यता वितरण के परिमाणीकरण से शुरुआत करते हैं <math>2^n</math> हर, कहाँ {{mvar|n}} चुना गया है (आमतौर पर 8-12 बिट्स): <math>p_s \approx f[s]/2^n</math> कुछ प्राकृतिक के लिए <math>f[s]</math> संख्याएँ (उपश्रेणियों के आकार)।
हम संभाव्यता वितरण के परिमाणीकरण से शुरुआत करते हैं <math>2^n</math> हर, कहाँ {{mvar|n}} चुना गया है (आमतौर पर 8-12 बिट्स): <math>p_s \approx f[s]/2^n</math> कुछ प्राकृतिक के लिए <math>f[s]</math> संख्याएँ (उपश्रेणियों के आकार)।


निरूपित <math>\text{mask} = 2^n-1</math>, और   संचयी वितरण फ़ंक्शन:
निरूपित <math>\text{mask} = 2^n-1</math>, और संचयी वितरण फ़ंक्शन:


: <math>\operatorname{CDF}[s] = \sum_{i<s} f[i] =f[0]+ \cdots +f[s-1].</math>
: <math>\operatorname{CDF}[s] = \sum_{i<s} f[i] =f[0]+ \cdots +f[s-1].</math>
यहां ध्यान दें कि
यहां ध्यान दें कि
  <syntaxhighlight lang="c" inline>CDF[s]</syntaxhighlight> फ़ंक्शन   सच्चा संचयी वितरण फ़ंक्शन नहीं है#परिभाषा यह है कि वर्तमान प्रतीक की संभावना अभिव्यक्ति के मूल्य में शामिल नहीं है। इसके बजाय, <syntaxhighlight lang="c" inline>CDF[s]</syntaxhighlight> पिछले सभी प्रतीकों की कुल संभावना का प्रतिनिधित्व करता है। उदाहरण: की सामान्य परिभाषा के बजाय <syntaxhighlight lang="c" inline>CDF[0] = f[0]</syntaxhighlight>, इसका मूल्यांकन इस प्रकार किया जाता है <syntaxhighlight lang="c" inline>CDF[0] = 0</syntaxhighlight>, क्योंकि कोई पिछला प्रतीक नहीं है।
  <syntaxhighlight lang="c" inline>CDF[s]</syntaxhighlight> फ़ंक्शन सच्चा संचयी वितरण फ़ंक्शन नहीं है#परिभाषा यह है कि वर्तमान प्रतीक की संभावना अभिव्यक्ति के मूल्य में शामिल नहीं है। इसके बजाय, <syntaxhighlight lang="c" inline>CDF[s]</syntaxhighlight> पिछले सभी प्रतीकों की कुल संभावना का प्रतिनिधित्व करता है। उदाहरण: की सामान्य परिभाषा के बजाय <syntaxhighlight lang="c" inline>CDF[0] = f[0]</syntaxhighlight>, इसका मूल्यांकन इस प्रकार किया जाता है <syntaxhighlight lang="c" inline>CDF[0] = 0</syntaxhighlight>, क्योंकि कोई पिछला प्रतीक नहीं है।


के लिए <math>y\in[0,2^n-1]</math> फ़ंक्शन को निरूपित करें (आमतौर पर तालिकाबद्ध)
के लिए <math>y\in[0,2^n-1]</math> फ़ंक्शन को निरूपित करें (आमतौर पर तालिकाबद्ध)
Line 158: Line 161:


<syntaxhighlight lang="c">D(x) = (f[s] * (x >> n) + (x & mask ) - CDF[s], s) </syntaxhighlight>
<syntaxhighlight lang="c">D(x) = (f[s] * (x >> n) + (x & mask ) - CDF[s], s) </syntaxhighlight>
इस तरह हम प्रतीकों के अनुक्रम को   बड़ी प्राकृतिक संख्या में कूटबद्ध कर सकते हैं {{mvar|x}}. बड़ी संख्या के अंकगणित के उपयोग से बचने के लिए, व्यवहार में स्ट्रीम वेरिएंट का उपयोग किया जाता है: जो लागू करता है <math> x\in [L, b \cdot L-1] </math> पुनर्सामान्यीकरण द्वारा: कम से कम महत्वपूर्ण बिट्स भेजना {{mvar|x}} बिटस्ट्रीम से या उससे (आमतौर पर {{mvar|L}} और {{mvar|b}} 2) की शक्तियां हैं।
इस तरह हम प्रतीकों के अनुक्रम को बड़ी प्राकृतिक संख्या में कूटबद्ध कर सकते हैं {{mvar|x}}. बड़ी संख्या के अंकगणित के उपयोग से बचने के लिए, व्यवहार में स्ट्रीम वेरिएंट का उपयोग किया जाता है: जो लागू करता है <math> x\in [L, b \cdot L-1] </math> पुनर्सामान्यीकरण द्वारा: कम से कम महत्वपूर्ण बिट्स भेजना {{mvar|x}} बिटस्ट्रीम से या उससे (आमतौर पर {{mvar|L}} और {{mvar|b}} 2) की शक्तियां हैं।


rANS संस्करण में {{mvar|x}} उदाहरण के लिए 32 बिट है। 16 बिट पुनर्सामान्यीकरण के लिए, <math> x\in [2^{16},2^{32}-1]</math>, डिकोडर जरूरत पड़ने पर बिटस्ट्रीम से कम से कम महत्वपूर्ण बिट्स को फिर से भरता है:
rANS संस्करण में {{mvar|x}} उदाहरण के लिए 32 बिट है। 16 बिट पुनर्सामान्यीकरण के लिए, <math> x\in [2^{16},2^{32}-1]</math>, डिकोडर जरूरत पड़ने पर बिटस्ट्रीम से कम से कम महत्वपूर्ण बिट्स को फिर से भरता है:
Line 166: Line 169:


== सारणीबद्ध संस्करण (tANS) ==
== सारणीबद्ध संस्करण (tANS) ==
[[Image:Simple example of ANS automaton.png |thumb|480px|right|पीआर(ए)=3/4, पीआर(बी)=1/4 संभाव्यता वितरण के लिए 4 राज्य एएनएस ऑटोमेटन का सरल उदाहरण। प्रतीक b में −lg(1/4)=2 बिट जानकारी होती है और इसलिए यह हमेशा दो बिट उत्पन्न करता है। इसके विपरीत, प्रतीक a में −lg(3/4) ~ 0.415 बिट जानकारी होती है, इसलिए कभी-कभी यह   बिट (स्थिति 6 और 7 से), कभी-कभी 0 बिट (स्थिति 4 और 5 से) उत्पन्न करता है, केवल स्थिति को बढ़ाता है, जो बिट्स की भिन्नात्मक संख्या वाले बफर के रूप में कार्य करता है: lg(x)। व्यवहार में राज्यों की संख्या उदाहरण के लिए 2048 है, 256 आकार की वर्णमाला के लिए (बाइट्स को सीधे एनकोड करने के लिए)।]]टीएएनएस संस्करण संपूर्ण व्यवहार (पुनर्सामान्यीकरण सहित) को रखता है <math>x\in[L,2L-1]</math>   तालिका में जो गुणन की आवश्यकता से बचते हुए   परिमित-राज्य मशीन उत्पन्न करती है।
[[Image:Simple example of ANS automaton.png |thumb|480px|right|पीआर(ए)=3/4, पीआर(बी)=1/4 संभाव्यता वितरण के लिए 4 राज्य एएनएस ऑटोमेटन का सरल उदाहरण। प्रतीक b में −lg(1/4)=2 बिट जानकारी होती है और इसलिए यह हमेशा दो बिट उत्पन्न करता है। इसके विपरीत, प्रतीक a में −lg(3/4) ~ 0.415 बिट जानकारी होती है, इसलिए कभी-कभी यह बिट (स्थिति 6 और 7 से), कभी-कभी 0 बिट (स्थिति 4 और 5 से) उत्पन्न करता है, केवल स्थिति को बढ़ाता है, जो बिट्स की भिन्नात्मक संख्या वाले बफर के रूप में कार्य करता है: lg(x)। व्यवहार में राज्यों की संख्या उदाहरण के लिए 2048 है, 256 आकार की वर्णमाला के लिए (बाइट्स को सीधे एनकोड करने के लिए)।]]टीएएनएस संस्करण संपूर्ण व्यवहार (पुनर्सामान्यीकरण सहित) को रखता है <math>x\in[L,2L-1]</math> तालिका में जो गुणन की आवश्यकता से बचते हुए परिमित-राज्य मशीन उत्पन्न करती है।


अंत में, डिकोडिंग लूप के चरण को इस प्रकार लिखा जा सकता है:
अंत में, डिकोडिंग लूप के चरण को इस प्रकार लिखा जा सकता है:
Line 177: Line 180:
writeBits(x, nbBits);  // send the least significant bits to bitstream
writeBits(x, nbBits);  // send the least significant bits to bitstream
x = encodingTable[start[s] + (x >> nbBits)]; </syntaxhighlight>
x = encodingTable[start[s] + (x >> nbBits)]; </syntaxhighlight>
प्रत्येक को   प्रतीक निर्दिष्ट करके   विशिष्ट टीएएनएस कोडिंग निर्धारित की जाती है <math>[L,2L-1]</math> स्थिति, उनकी उपस्थिति की संख्या कल्पित संभावनाओं के समानुपाती होनी चाहिए। उदाहरण के लिए, कोई Pr(a)=3/8, Pr(b)=1/8, Pr(c)=2/8, Pr(d)=2/8 संभाव्यता वितरण के लिए abdacdac असाइनमेंट चुन सकता है। यदि प्रतीकों को 2 की घात वाली लंबाई की श्रेणियों में निर्दिष्ट किया गया है, तो हमें हफ़मैन कोडिंग मिलेगी। उदाहरण के लिए, aaabcdd प्रतीक असाइनमेंट के साथ tANS के लिए a->0, b->100, c->101, d->11 उपसर्ग कोड प्राप्त किया जाएगा।
प्रत्येक को प्रतीक निर्दिष्ट करके विशिष्ट टीएएनएस कोडिंग निर्धारित की जाती है <math>[L,2L-1]</math> स्थिति, उनकी उपस्थिति की संख्या कल्पित संभावनाओं के समानुपाती होनी चाहिए। उदाहरण के लिए, कोई Pr(a)=3/8, Pr(b)=1/8, Pr(c)=2/8, Pr(d)=2/8 संभाव्यता वितरण के लिए abdacdac असाइनमेंट चुन सकता है। यदि प्रतीकों को 2 की घात वाली लंबाई की श्रेणियों में निर्दिष्ट किया गया है, तो हमें हफ़मैन कोडिंग मिलेगी। उदाहरण के लिए, aaabcdd प्रतीक असाइनमेंट के साथ tANS के लिए a->0, b->100, c->101, d->11 उपसर्ग कोड प्राप्त किया जाएगा।


[[Image:TANSex.png|thumb|640px|center|एम = 3 आकार वर्णमाला और एल = 16 राज्यों के लिए टीएएनएस तालिकाओं के निर्माण का उदाहरण, फिर उन्हें स्ट्रीम डिकोडिंग के लिए लागू करना। सबसे पहले हम भिन्न का उपयोग करके संभावनाओं का अनुमान लगाते हैं जिसमें हर राज्यों की संख्या है। फिर हम इन प्रतीकों को लगभग समान तरीके से फैलाते हैं, वैकल्पिक रूप से विवरण   साथ एन्क्रिप्शन के लिए क्रिप्टोग्राफ़िक कुंजी पर निर्भर हो सकते हैं। फिर हम किसी दिए गए प्रतीक के लिए उनकी राशि के मूल्य से शुरू होने वाली उपस्थिति की गणना करते हैं। फिर हम x (पुनर्सामान्यीकरण) के लिए अनुमानित सीमा पर लौटने के लिए स्ट्रीम से सबसे कम उम्र के बिट्स को फिर से भरते हैं।]]
[[Image:TANSex.png|thumb|640px|center|एम = 3 आकार वर्णमाला और एल = 16 राज्यों के लिए टीएएनएस तालिकाओं के निर्माण का उदाहरण, फिर उन्हें स्ट्रीम डिकोडिंग के लिए लागू करना। सबसे पहले हम भिन्न का उपयोग करके संभावनाओं का अनुमान लगाते हैं जिसमें हर राज्यों की संख्या है। फिर हम इन प्रतीकों को लगभग समान तरीके से फैलाते हैं, वैकल्पिक रूप से विवरण साथ एन्क्रिप्शन के लिए क्रिप्टोग्राफ़िक कुंजी पर निर्भर हो सकते हैं। फिर हम किसी दिए गए प्रतीक के लिए उनकी राशि के मूल्य से प्रारम्भ  होने वाली उपस्थिति की गणना करते हैं। फिर हम x (पुनर्सामान्यीकरण) के लिए अनुमानित सीमा पर लौटने के लिए स्ट्रीम से सबसे कम उम्र के बिट्स को फिर से भरते हैं।]]


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 186: Line 189:
इसके विपरीत, rANS का उपयोग आमतौर पर [[रेंज एन्कोडिंग]] के लिए तेज़ प्रतिस्थापन के रूप में किया जाता है (उदाहरण के लिए CRAM (फ़ाइल प्रारूप), LZNA, ड्रेको,<ref name=Draco />). इसमें गुणन की आवश्यकता होती है, लेकिन यह अधिक मेमोरी कुशल है और संभाव्यता वितरण को गतिशील रूप से अनुकूलित करने के लिए उपयुक्त है।
इसके विपरीत, rANS का उपयोग आमतौर पर [[रेंज एन्कोडिंग]] के लिए तेज़ प्रतिस्थापन के रूप में किया जाता है (उदाहरण के लिए CRAM (फ़ाइल प्रारूप), LZNA, ड्रेको,<ref name=Draco />). इसमें गुणन की आवश्यकता होती है, लेकिन यह अधिक मेमोरी कुशल है और संभाव्यता वितरण को गतिशील रूप से अनुकूलित करने के लिए उपयुक्त है।


ANS की एन्कोडिंग और डिकोडिंग विपरीत दिशाओं में की जाती है, जिससे यह प्रतीकों के लिए   [[स्टैक (सार डेटा प्रकार)]] बन जाता है। इस असुविधा को आमतौर पर पीछे की दिशा में एन्कोडिंग द्वारा हल किया जाता है, जिसके बाद डिकोडिंग को आगे की ओर किया जा सकता है। संदर्भ-निर्भरता के लिए, [[मार्कोव मॉडल]] की तरह, एनकोडर को बाद के डिकोडिंग के परिप्रेक्ष्य से संदर्भ का उपयोग करने की आवश्यकता होती है। अनुकूलता के लिए, एनकोडर को पहले उन संभावनाओं को खोजने के लिए आगे बढ़ना चाहिए जिनका डिकोडर द्वारा उपयोग (अनुमानित) किया जाएगा और उन्हें   बफर में संग्रहीत किया जाएगा, फिर बफर की गई संभावनाओं का उपयोग करके पीछे की दिशा में एनकोड किया जाएगा।
ANS की एन्कोडिंग और डिकोडिंग विपरीत दिशाओं में की जाती है, जिससे यह प्रतीकों के लिए [[स्टैक (सार डेटा प्रकार)]] बन जाता है। इस असुविधा को आमतौर पर पीछे की दिशा में एन्कोडिंग द्वारा हल किया जाता है, जिसके बाद डिकोडिंग को आगे की ओर किया जा सकता है। संदर्भ-निर्भरता के लिए, [[मार्कोव मॉडल]] की तरह, एनकोडर को बाद के डिकोडिंग के परिप्रेक्ष्य से संदर्भ का उपयोग करने की आवश्यकता होती है। अनुकूलता के लिए, एनकोडर को पहले उन संभावनाओं को खोजने के लिए आगे बढ़ना चाहिए जिनका डिकोडर द्वारा उपयोग (अनुमानित) किया जाएगा और उन्हें बफर में संग्रहीत किया जाएगा, फिर बफर की गई संभावनाओं का उपयोग करके पीछे की दिशा में एनकोड किया जाएगा।


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


== पेटेंट विवाद ==
== पेटेंट विवाद ==
उपन्यास ANS एल्गोरिदम और इसके वेरिएंट tANS और rANS के लेखक ने विशेष रूप से परोपकारी कारणों से अपने काम को सार्वजनिक डोमेन में स्वतंत्र रूप से उपलब्ध कराने का इरादा किया था। उन्होंने उनसे लाभ कमाने की कोशिश नहीं की है और यह सुनिश्चित करने के लिए कदम उठाए हैं कि वे कानूनी खदान न बनें, या दूसरों द्वारा प्रतिबंधित न हों, या उनसे लाभ न कमाएं। 2015 में, Google ने मिश्रित बूलियन-टोकन और गुणांक कोडिंग के लिए   यूएस और फिर विश्वव्यापी पेटेंट प्रकाशित किया।<ref>{{cite web |title=मिश्रित बूलियन-टोकन और गुणांक कोडिंग|url=https://patents.google.com/patent/US20170164007 |access-date=14 June 2021}}</ref> उस समय, प्रोफेसर डूडा को Google द्वारा वीडियो संपीड़न में मदद करने के लिए कहा गया था, इसलिए वे इस डोमेन के बारे में गहराई से जानते थे, मूल लेखक उनकी सहायता कर रहे थे।
उपन्यास ANS एल्गोरिदम और इसके वेरिएंट tANS और rANS के लेखक ने विशेष रूप से परोपकारी कारणों से अपने काम को सार्वजनिक डोमेन में स्वतंत्र रूप से उपलब्ध कराने का इरादा किया था। उन्होंने उनसे लाभ कमाने की कोशिश नहीं की है और यह सुनिश्चित करने के लिए कदम उठाए हैं कि वे कानूनी खदान न बनें, या दूसरों द्वारा प्रतिबंधित न हों, या उनसे लाभ न कमाएं। 2015 में, Google ने मिश्रित बूलियन-टोकन और गुणांक कोडिंग के लिए यूएस और फिर विश्वव्यापी पेटेंट प्रकाशित किया।<ref>{{cite web |title=मिश्रित बूलियन-टोकन और गुणांक कोडिंग|url=https://patents.google.com/patent/US20170164007 |access-date=14 June 2021}}</ref> उस समय, प्रोफेसर डूडा को Google द्वारा वीडियो संपीड़न में मदद करने के लिए कहा गया था, इसलिए वे इस डोमेन के बारे में गहराई से जानते थे, मूल लेखक उनकी सहायता कर रहे थे।


डूडा (संयोग से) Google के पेटेंट इरादों की खोज से खुश नहीं था, क्योंकि वह स्पष्ट था कि वह इसे सार्वजनिक डोमेन के रूप में चाहता था, और उसने विशेष रूप से उस आधार पर Google की सहायता की थी। डूडा ने बाद में   तृतीय-पक्ष आवेदन दायर किया<ref>{{cite web |title=गूगल का विरोध|url=http://th.if.uj.edu.pl/~dudaj/protestGoogle.pdf |website=Institute of Theoretical Physics. Jagiellonian University in Krakow Poland |publisher=Professor Jarosław Duda}}</ref> अमेरिकी पेटेंट कार्यालय में अस्वीकृति की मांग करते हुए। यूएसपीटीओ ने 2018 में इसके आवेदन को खारिज कर दिया और बाद में Google ने पेटेंट को छोड़ दिया।<ref>{{cite web |title=पेटेंट कार्यालय की अस्वीकृति के बाद, Google के लिए सार्वजनिक डोमेन एल्गोरिदम के पेटेंट उपयोग के अपने प्रयास को छोड़ने का समय आ गया है|url=https://www.eff.org/deeplinks/2018/08/after-patent-office-rejection-it-time-google-abandon-its-attempt-patent-use-public |publisher=EFF}}</ref>
डूडा (संयोग से) Google के पेटेंट इरादों की खोज से खुश नहीं था, क्योंकि वह स्पष्ट था कि वह इसे सार्वजनिक डोमेन के रूप में चाहता था, और उसने विशेष रूप से उस आधार पर Google की सहायता की थी। डूडा ने बाद में तृतीय-पक्ष आवेदन दायर किया<ref>{{cite web |title=गूगल का विरोध|url=http://th.if.uj.edu.pl/~dudaj/protestGoogle.pdf |website=Institute of Theoretical Physics. Jagiellonian University in Krakow Poland |publisher=Professor Jarosław Duda}}</ref> अमेरिकी पेटेंट कार्यालय में अस्वीकृति की मांग करते हुए। यूएसपीटीओ ने 2018 में इसके आवेदन को खारिज कर दिया और बाद में Google ने पेटेंट को छोड़ दिया।<ref>{{cite web |title=पेटेंट कार्यालय की अस्वीकृति के बाद, Google के लिए सार्वजनिक डोमेन एल्गोरिदम के पेटेंट उपयोग के अपने प्रयास को छोड़ने का समय आ गया है|url=https://www.eff.org/deeplinks/2018/08/after-patent-office-rejection-it-time-google-abandon-its-attempt-patent-use-public |publisher=EFF}}</ref>
जून 2019 में Microsoft ने रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं नामक   पेटेंट आवेदन दर्ज किया।<ref>{{cite web |title=रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं|url=https://patents.google.com/patent/US20200413106A1 |access-date=14 June 2021}}</ref> यूएसपीटीओ ने 27 अक्टूबर, 2020 को आवेदन की अंतिम अस्वीकृति जारी की। फिर भी 2 मार्च, 2021 को, माइक्रोसॉफ्ट ने   यूएसपीटीओ व्याख्यात्मक फाइलिंग दी जिसमें कहा गया कि आवेदक सम्मानपूर्वक अस्वीकृति से असहमत है। ,<ref>{{cite web |title=Third time's a harm? Microsoft tries to get twice-rejected compression patent past skeptical examiners |url=https://www.theregister.com/2021/03/13/microsoft_ans_patent/ |publisher=The Register |access-date=14 June 2021}}</ref> आफ्टर फाइनल कंसीडरेशन पायलट 2.0 कार्यक्रम के तहत अंतिम अस्वीकृति को पलटने की मांग की जा रही है।<ref>{{cite web |title=After Final Consideration Pilot 2.0 |url=https://www.uspto.gov/patents/initiatives/after-final-consideration-pilot-20 |website=United States Patent and Trademark Office |publisher=United States Patent and Trademark Office |access-date=14 June 2021}}</ref> पुनर्विचार के बाद, यूएसपीटीओ ने 25 जनवरी, 2022 को आवेदन स्वीकार कर लिया।<ref>{{cite web |title=रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं|url=https://patents.google.com/patent/US20200413106A1 |access-date=16 February 2022}}</ref>
जून 2019 में Microsoft ने रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं नामक पेटेंट आवेदन दर्ज किया।<ref>{{cite web |title=रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं|url=https://patents.google.com/patent/US20200413106A1 |access-date=14 June 2021}}</ref> यूएसपीटीओ ने 27 अक्टूबर, 2020 को आवेदन की अंतिम अस्वीकृति जारी की। फिर भी 2 मार्च, 2021 को, माइक्रोसॉफ्ट ने यूएसपीटीओ व्याख्यात्मक फाइलिंग दी जिसमें कहा गया कि आवेदक सम्मानपूर्वक अस्वीकृति से असहमत है। ,<ref>{{cite web |title=Third time's a harm? Microsoft tries to get twice-rejected compression patent past skeptical examiners |url=https://www.theregister.com/2021/03/13/microsoft_ans_patent/ |publisher=The Register |access-date=14 June 2021}}</ref> आफ्टर फाइनल कंसीडरेशन पायलट 2.0 कार्यक्रम के तहत अंतिम अस्वीकृति को पलटने की मांग की जा रही है।<ref>{{cite web |title=After Final Consideration Pilot 2.0 |url=https://www.uspto.gov/patents/initiatives/after-final-consideration-pilot-20 |website=United States Patent and Trademark Office |publisher=United States Patent and Trademark Office |access-date=14 June 2021}}</ref> पुनर्विचार के बाद, यूएसपीटीओ ने 25 जनवरी, 2022 को आवेदन स्वीकार कर लिया।<ref>{{cite web |title=रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं|url=https://patents.google.com/patent/US20200413106A1 |access-date=16 February 2022}}</ref>


== यह भी देखें ==
== यह भी देखें ==

Revision as of 19:48, 16 July 2023

असममित अंक प्रणाली (एएनएस)[1][2] जगियेलोनियन विश्वविद्यालय के जारोस्लाव डूडा द्वारा प्रारम्भ की गई एन्ट्रापी एन्कोडिंग विधियों का समूह होता है, [3]जिसका उपयोग पिछले विधियों की तुलना में श्रेष्ट प्रदर्शन के कारण 2014 से डेटा संपीड़न में उपयोग किया जाता है।[4][5] एएनएस हफ़मैन कोडिंग के समान प्रसंस्करण लागत के साथ अंकगणित कोडिंग (जो लगभग स्पष्ट संभाव्यता वितरण का उपयोग करता है) के संपीड़न अनुपात को जोड़ता है। सारणीबद्ध ANS (tANS) संस्करण में, इसे गुणन का उपयोग किए बिना बड़े वर्णमाला पर काम करने के लिए परिमित-अवस्था मशीन का निर्माण करके प्राप्त किया जाता है।

अन्य बातों के अतिरिक्त, ANS का उपयोग फेसबुक फेसबुक ज़ेडस्टैंडर्ड कंप्रेसर [6][7] (उदाहरण के लिए लिनक्स कर्नेल, एंड्रॉइड ऑपरेटिंग सिस्टम में भी उपयोग किया जाता है जिसे[8] [9] एमआईएमई और एचटीटीपी के ​​लिए RFC 8478 के रूप में प्रकाशित किया गया था[10] [11]), एप्पल इंक एलजेडएफएसई कंप्रेसर,[12] गूगल ड्रेको 3डी कंप्रेसर[13] (उदाहरण के लिए पिक्सर सार्वभौमिक दृश्य विवरण फॉर्मेट में उपयोग किया जाता है[14]) और पीआईके छवि कंप्रेसर,[15] सीआरएएम डीएनए कंप्रेसर[16] सैमटूल्स उपयोगिताओं से,[17] ड्रॉपबॉक् DivANS कंप्रेसर,[18] माइक्रोसॉफ्ट डायरेक्टस्टोरेज बीसीपैक टेक्सचर कंप्रेसर,[19] और जेपीईजी एक्सएल[20] छवि कंप्रेसर इत्यादि में किया जाता है।



मूल विचार जानकारी को प्राकृतिक संख्या में एन्कोड करना है . मानक बाइनरी संख्या प्रणाली में, हम थोड़ा सा जोड़ सकते हैं को जानकारी का जोड़कर के अंत में , जो हमें देता है . एन्ट्रॉपी कोडर के लिए, यह इष्टतम है यदि . ANS इस प्रक्रिया को प्रतीकों के मनमाने सेट के लिए सामान्यीकृत करता है संभाव्यता वितरण के साथ . ANS में, यदि से जानकारी से जोड़ा गया है इसके परिणाम में , तब . समान रूप से, , कहाँ संख्या में संग्रहीत जानकारी के बिट्स की संख्या है , और प्रतीक में निहित बिट्स की संख्या है .

एन्कोडिंग नियम के लिए, प्राकृतिक संख्याओं के सेट को विभिन्न प्रतीकों के अनुरूप असंयुक्त उपसमूहों में विभाजित किया गया है – सम और विषम संख्याओं की तरह, लेकिन एन्कोड करने के लिए प्रतीकों की संभाव्यता वितरण के अनुरूप घनत्व के साथ। फिर सिंबल से जानकारी जोड़ना है वर्तमान संख्या में पहले से ही संग्रहीत जानकारी में , हम नंबर पर जाते हैं की स्थिति होने के नाते -वें से उपस्थिति -वां उपसमुच्चय.

इसे व्यवहार में लागू करने के वैकल्पिक तरीके हैं – एन्कोडिंग और डिकोडिंग चरणों (यूएबीएस और आरएएनएस वेरिएंट) के लिए प्रत्यक्ष गणितीय सूत्र, या कोई संपूर्ण व्यवहार को तालिका (टीएएनएस वेरिएंट) में डाल सकता है। रोकने के लिए पुनर्सामान्यीकरण का उपयोग किया जाता है अनंत तक जा रहा हूँ – संचित बिट्स को बिटस्ट्रीम में या उससे स्थानांतरित करना।

एंट्रॉपी कोडिंग

मान लीजिए कि 1,000 शून्य और का अनुक्रम एन्कोड किया जाएगा, जिसे सीधे स्टोर करने में 1000 बिट्स लगेंगे। हालाँकि, अगर यह किसी तरह ज्ञात हो कि इसमें केवल 1 शून्य और 999 हैं, तो यह शून्य की स्थिति को एनकोड करने के लिए पर्याप्त होगा, जिसके लिए केवल मूल 1000 बिट्स के बजाय यहां बिट्स।

आम तौर पर, ऐसी लंबाई अनुक्रम युक्त शून्य और वाले, कुछ संभावना के लिए , संयोजन कहलाते हैं। स्टर्लिंग सन्निकटन का उपयोग करके हमें उनकी स्पर्शोन्मुख संख्या प्राप्त होती है

एन्ट्रॉपी (सूचना सिद्धांत) कहा जाता है।

इसलिए, ऐसे किसी क्रम को चुनने के लिए हमें लगभग की आवश्यकता होती है बिट्स यह अब भी है बिट्स अगर हालाँकि, यह बहुत छोटा भी हो सकता है। उदाहरण के लिए, हमें केवल इसकी आवश्यकता है के लिए बिट्स .

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

एन्कोडिंग संयोजनों के विपरीत, यह संभाव्यता वितरण आमतौर पर डेटा कंप्रेसर में भिन्न होता है। इस प्रयोजन के लिए, शैनन एन्ट्रॉपी को भारित औसत के रूप में देखा जा सकता है: संभाव्यता का प्रतीक रोकना जानकारी के टुकड़े. तथा जानकारी को प्राकृतिक संख्या में एन्कोड करें , युक्त के रूप में व्याख्या की गई जानकारी के टुकड़े. संभाव्यता के प्रतीक से जानकारी जोड़ना इस सूचनात्मक सामग्री को बढ़ाता है . इसलिए, नए नंबर में दोनों जानकारी होनी चाहिए .

प्रेरक उदाहरण

1/2, 1/4, 1/4 प्रायिकता के साथ 3 अक्षरों ए, बी, सी वाले स्रोत पर विचार करें। बाइनरी में इष्टतम उपसर्ग कोड बनाना सरल है: ए = 0, बी = 10, सी = 11। फिर, संदेश को एबीसी -> 01011 के रूप में एन्कोड किया गया है।

हम देखते हैं कि एन्कोडिंग करने के लिए समकक्ष विधि इस प्रकार है:

  • संख्या 1 से प्रारंभ करें, और प्रत्येक इनपुट अक्षर के लिए संख्या पर ऑपरेशन करें।
  • ए = 2 से गुणा करें; बी = 4 से गुणा करें, 2 जोड़ें; C = 4 से गुणा करें, 3 जोड़ें।
  • संख्या को बाइनरी में व्यक्त करें, फिर पहला अंक 1 हटा दें।

तर्कसंगत संभावनाओं के साथ k अक्षरों वाले अधिक सामान्य स्रोत पर विचार करें . फिर स्रोत पर अंकगणितीय कोडिंग करने के लिए केवल पूर्णांकों के साथ स्पष्ट अंकगणित की आवश्यकता होती है।

सामान्य तौर पर, ANS अंकगणितीय कोडिंग का अनुमान है जो वास्तविक संभावनाओं का अनुमान लगाता है तर्कसंगत संख्याओं द्वारा छोटे हर के साथ .

ANS की मूल अवधारणाएँ

अंकगणितीय कोडिंग (बाएं) और एएनएस (दाएं) की अवधारणा की तुलना। दोनों को मानक अंक प्रणालियों के सामान्यीकरण के रूप में देखा जा सकता है, जो अंकों के समान संभाव्यता वितरण के लिए इष्टतम है, कुछ चुने हुए संभाव्यता वितरण के लिए अनुकूलित है। अंकगणित या रेंज कोडिंग सबसे महत्वपूर्ण स्थिति में नई जानकारी जोड़ने से मेल खाती है, जबकि एएनएस कम से कम महत्वपूर्ण स्थिति में जानकारी जोड़ने का सामान्यीकरण करता है। इसका कोडिंग नियम यह है कि x वर्तमान में एन्कोड किए गए प्रतीक के अनुरूप प्राकृतिक संख्याओं के सबसेट की x-वें उपस्थिति पर जाता है। प्रस्तुत उदाहरण में, अनुक्रम (01111) को प्राकृतिक संख्या 18 में एन्कोड किया गया है, जो एनकोड करने के लिए अनुक्रम की आवृत्तियों के साथ बेहतर समझौते के कारण मानक बाइनरी सिस्टम का उपयोग करके प्राप्त 47 से छोटा है। ANS का लाभ सीमा को परिभाषित करने वाले दो के विपरीत, ही प्राकृतिक संख्या में जानकारी संग्रहीत करना है।

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

उपरोक्त प्रक्रिया प्रतीकों के समान (सममित) संभाव्यता वितरण के लिए इष्टतम है . ANS इसे प्रतीकों के किसी भी चुने हुए (असममित) संभाव्यता वितरण के लिए इष्टतम बनाने के लिए सामान्यीकृत करता है: . जबकि उपरोक्त उदाहरण में सम और विषम के बीच चयन करना था , ANS में प्राकृतिक संख्याओं के इस सम/विषम विभाजन को कल्पित संभाव्यता वितरण के अनुरूप घनत्व वाले उपसमूहों में विभाजन के साथ प्रतिस्थापित किया जाता है। : पद तक , लगभग हैं प्रतीक की घटनाएँ .

कोडिंग फ़ंक्शन को लौटाता है प्रतीक के अनुरूप ऐसे उपसमुच्चय से -वाँ स्वरूप . घनत्व धारणा स्थिति के बराबर है . यह मानते हुए कि यह प्राकृतिक संख्या है रोकना जानकारी के टुकड़े, . अतः संभाव्यता का प्रतीक है युक्त के रूप में एन्कोड किया गया है एन्ट्रॉपी एन्कोडिंग से आवश्यक जानकारी के टुकड़े।

यूनिफ़ॉर्म बाइनरी वेरिएंट (यूएबीएस)

आइए द्विआधारी वर्णमाला और संभाव्यता वितरण से शुरुआत करें , . पद तक हम लगभग चाहते हैं विषम संख्याओं के अनुरूप (के लिए) ). हम दिखावे की इस संख्या को इस प्रकार चुन सकते हैं , उपार्जन . इस संस्करण को यूएबीएस कहा जाता है और यह निम्नलिखित डिकोडिंग और एन्कोडिंग कार्यों की ओर ले जाता है:[21] डिकोडिंग:

s = ceil((x+1)*p) - ceil(x*p)  // 0 if fract(x*p) < 1-p, else 1
if s = 0 then new_x = x - ceil(x*p)   // D(x) = (new_x, 0), this is the same as new_x = floor(x*(1-p))
if s = 1 then new_x = ceil(x*p)  // D(x) = (new_x, 1)

एन्कोडिंग:

if s = 0 then new_x = ceil((x+1)/(1-p)) - 1 // C(x,0) = new_x
if s = 1 then new_x = floor(x/p)  // C(x,1) = new_x

के लिए यह अलग के लिए मानक बाइनरी सिस्टम (0 और 1 उलटा के साथ) के बराबर है यह इस दिए गए संभाव्यता वितरण के लिए इष्टतम बन जाता है। उदाहरण के लिए, के लिए ये सूत्र छोटे मानों के लिए तालिका की ओर ले जाते हैं :

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 1 2 3 4 5 6

प्रतीक घनत्व के साथ प्राकृतिक संख्याओं के सबसेट से मेल खाता है , जो इस मामले में पद हैं . जैसा , इन पदों में 3 या 4 की वृद्धि होती है। क्योंकि यहां, प्रतीकों का पैटर्न हर 10 स्थिति में दोहराया जाता है।

कोडिंग किसी दिए गए प्रतीक के अनुरूप पंक्ति लेकर पाया जा सकता है , और दिए गए को चुनना इस पंक्ति में. फिर शीर्ष पंक्ति प्रदान करती है . उदाहरण के लिए, मध्य से शीर्ष पंक्ति तक.

कल्पना कीजिए कि हम '0100' से प्रारम्भ होने वाले अनुक्रम को एन्कोड करना चाहेंगे . पहला हमें ले जाता है , तब को , तब को , तब को . डिकोडिंग फ़ंक्शन का उपयोग करके इस फाइनल पर , हम प्रतीक अनुक्रम पुनः प्राप्त कर सकते हैं। इस प्रयोजन के लिए तालिका का उपयोग करते हुए, पहली पंक्ति में कॉलम निर्धारित होता है, फिर गैर-रिक्त पंक्ति और लिखित मान संबंधित निर्धारित करते हैं और .

रेंज वेरिएंट (आरएएनएस) और स्ट्रीमिंग

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

हम संभाव्यता वितरण के परिमाणीकरण से शुरुआत करते हैं हर, कहाँ n चुना गया है (आमतौर पर 8-12 बिट्स): कुछ प्राकृतिक के लिए संख्याएँ (उपश्रेणियों के आकार)।

निरूपित , और संचयी वितरण फ़ंक्शन:

यहां ध्यान दें कि

CDF[s] फ़ंक्शन सच्चा संचयी वितरण फ़ंक्शन नहीं है#परिभाषा यह है कि वर्तमान प्रतीक की संभावना अभिव्यक्ति के मूल्य में शामिल नहीं है। इसके बजाय, CDF[s] पिछले सभी प्रतीकों की कुल संभावना का प्रतिनिधित्व करता है। उदाहरण: की सामान्य परिभाषा के बजाय CDF[0] = f[0], इसका मूल्यांकन इस प्रकार किया जाता है CDF[0] = 0, क्योंकि कोई पिछला प्रतीक नहीं है।

के लिए फ़ंक्शन को निरूपित करें (आमतौर पर तालिकाबद्ध)

symbol(y) = s  such that  CDF[s] <= y < CDF[s+1]

अब कोडिंग फ़ंक्शन है:

C(x,s) = (floor(x / f[s]) << n) + (x % f[s]) + CDF[s]

डिकोडिंग: s = symbol(x & mask)

D(x) = (f[s] * (x >> n) + (x & mask ) - CDF[s], s)

इस तरह हम प्रतीकों के अनुक्रम को बड़ी प्राकृतिक संख्या में कूटबद्ध कर सकते हैं x. बड़ी संख्या के अंकगणित के उपयोग से बचने के लिए, व्यवहार में स्ट्रीम वेरिएंट का उपयोग किया जाता है: जो लागू करता है पुनर्सामान्यीकरण द्वारा: कम से कम महत्वपूर्ण बिट्स भेजना x बिटस्ट्रीम से या उससे (आमतौर पर L और b 2) की शक्तियां हैं।

rANS संस्करण में x उदाहरण के लिए 32 बिट है। 16 बिट पुनर्सामान्यीकरण के लिए, , डिकोडर जरूरत पड़ने पर बिटस्ट्रीम से कम से कम महत्वपूर्ण बिट्स को फिर से भरता है:

if(x < (1 << 16)) x = (x << 16) + read16bits()


सारणीबद्ध संस्करण (tANS)

पीआर(ए)=3/4, पीआर(बी)=1/4 संभाव्यता वितरण के लिए 4 राज्य एएनएस ऑटोमेटन का सरल उदाहरण। प्रतीक b में −lg(1/4)=2 बिट जानकारी होती है और इसलिए यह हमेशा दो बिट उत्पन्न करता है। इसके विपरीत, प्रतीक a में −lg(3/4) ~ 0.415 बिट जानकारी होती है, इसलिए कभी-कभी यह बिट (स्थिति 6 और 7 से), कभी-कभी 0 बिट (स्थिति 4 और 5 से) उत्पन्न करता है, केवल स्थिति को बढ़ाता है, जो बिट्स की भिन्नात्मक संख्या वाले बफर के रूप में कार्य करता है: lg(x)। व्यवहार में राज्यों की संख्या उदाहरण के लिए 2048 है, 256 आकार की वर्णमाला के लिए (बाइट्स को सीधे एनकोड करने के लिए)।

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

अंत में, डिकोडिंग लूप के चरण को इस प्रकार लिखा जा सकता है:

t = decodingTable(x);  
x = t.newX + readBits(t.nbBits); //state transition
writeSymbol(t.symbol); //decoded symbol

एन्कोडिंग लूप का चरण:

s = ReadSymbol();
nbBits = (x + ns[s]) >> r;  // # of bits for renormalization
writeBits(x, nbBits);  // send the least significant bits to bitstream
x = encodingTable[start[s] + (x >> nbBits)];

प्रत्येक को प्रतीक निर्दिष्ट करके विशिष्ट टीएएनएस कोडिंग निर्धारित की जाती है स्थिति, उनकी उपस्थिति की संख्या कल्पित संभावनाओं के समानुपाती होनी चाहिए। उदाहरण के लिए, कोई Pr(a)=3/8, Pr(b)=1/8, Pr(c)=2/8, Pr(d)=2/8 संभाव्यता वितरण के लिए abdacdac असाइनमेंट चुन सकता है। यदि प्रतीकों को 2 की घात वाली लंबाई की श्रेणियों में निर्दिष्ट किया गया है, तो हमें हफ़मैन कोडिंग मिलेगी। उदाहरण के लिए, aaabcdd प्रतीक असाइनमेंट के साथ tANS के लिए a->0, b->100, c->101, d->11 उपसर्ग कोड प्राप्त किया जाएगा।

एम = 3 आकार वर्णमाला और एल = 16 राज्यों के लिए टीएएनएस तालिकाओं के निर्माण का उदाहरण, फिर उन्हें स्ट्रीम डिकोडिंग के लिए लागू करना। सबसे पहले हम भिन्न का उपयोग करके संभावनाओं का अनुमान लगाते हैं जिसमें हर राज्यों की संख्या है। फिर हम इन प्रतीकों को लगभग समान तरीके से फैलाते हैं, वैकल्पिक रूप से विवरण साथ एन्क्रिप्शन के लिए क्रिप्टोग्राफ़िक कुंजी पर निर्भर हो सकते हैं। फिर हम किसी दिए गए प्रतीक के लिए उनकी राशि के मूल्य से प्रारम्भ होने वाली उपस्थिति की गणना करते हैं। फिर हम x (पुनर्सामान्यीकरण) के लिए अनुमानित सीमा पर लौटने के लिए स्ट्रीम से सबसे कम उम्र के बिट्स को फिर से भरते हैं।

टिप्पणियाँ

हफ़मैन कोडिंग के लिए, tANS की संभाव्यता वितरण को संशोधित करना अपेक्षाकृत महंगा है, इसलिए इसका उपयोग मुख्य रूप से स्थैतिक स्थितियों में किया जाता है, आमतौर पर कुछ LZ77 और LZ78|लेम्पेल-ज़िव योजना (जैसे ZSTD, LZFSE) के साथ। इस मामले में, फ़ाइल को ब्लॉकों में विभाजित किया गया है - उनमें से प्रत्येक के लिए प्रतीक आवृत्तियों को स्वतंत्र रूप से गिना जाता है, फिर अनुमान (परिमाणीकरण) के बाद ब्लॉक हेडर में लिखा जाता है और tANS के लिए स्थिर संभाव्यता वितरण के रूप में उपयोग किया जाता है।

इसके विपरीत, rANS का उपयोग आमतौर पर रेंज एन्कोडिंग के लिए तेज़ प्रतिस्थापन के रूप में किया जाता है (उदाहरण के लिए CRAM (फ़ाइल प्रारूप), LZNA, ड्रेको,[13]). इसमें गुणन की आवश्यकता होती है, लेकिन यह अधिक मेमोरी कुशल है और संभाव्यता वितरण को गतिशील रूप से अनुकूलित करने के लिए उपयुक्त है।

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

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

पेटेंट विवाद

उपन्यास ANS एल्गोरिदम और इसके वेरिएंट tANS और rANS के लेखक ने विशेष रूप से परोपकारी कारणों से अपने काम को सार्वजनिक डोमेन में स्वतंत्र रूप से उपलब्ध कराने का इरादा किया था। उन्होंने उनसे लाभ कमाने की कोशिश नहीं की है और यह सुनिश्चित करने के लिए कदम उठाए हैं कि वे कानूनी खदान न बनें, या दूसरों द्वारा प्रतिबंधित न हों, या उनसे लाभ न कमाएं। 2015 में, Google ने मिश्रित बूलियन-टोकन और गुणांक कोडिंग के लिए यूएस और फिर विश्वव्यापी पेटेंट प्रकाशित किया।[22] उस समय, प्रोफेसर डूडा को Google द्वारा वीडियो संपीड़न में मदद करने के लिए कहा गया था, इसलिए वे इस डोमेन के बारे में गहराई से जानते थे, मूल लेखक उनकी सहायता कर रहे थे।

डूडा (संयोग से) Google के पेटेंट इरादों की खोज से खुश नहीं था, क्योंकि वह स्पष्ट था कि वह इसे सार्वजनिक डोमेन के रूप में चाहता था, और उसने विशेष रूप से उस आधार पर Google की सहायता की थी। डूडा ने बाद में तृतीय-पक्ष आवेदन दायर किया[23] अमेरिकी पेटेंट कार्यालय में अस्वीकृति की मांग करते हुए। यूएसपीटीओ ने 2018 में इसके आवेदन को खारिज कर दिया और बाद में Google ने पेटेंट को छोड़ दिया।[24] जून 2019 में Microsoft ने रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं नामक पेटेंट आवेदन दर्ज किया।[25] यूएसपीटीओ ने 27 अक्टूबर, 2020 को आवेदन की अंतिम अस्वीकृति जारी की। फिर भी 2 मार्च, 2021 को, माइक्रोसॉफ्ट ने यूएसपीटीओ व्याख्यात्मक फाइलिंग दी जिसमें कहा गया कि आवेदक सम्मानपूर्वक अस्वीकृति से असहमत है। ,[26] आफ्टर फाइनल कंसीडरेशन पायलट 2.0 कार्यक्रम के तहत अंतिम अस्वीकृति को पलटने की मांग की जा रही है।[27] पुनर्विचार के बाद, यूएसपीटीओ ने 25 जनवरी, 2022 को आवेदन स्वीकार कर लिया।[28]

यह भी देखें

  • एन्ट्रापी एन्कोडिंग
  • हफ़मैन कोडिंग
  • अंकगणित कोडिंग
  • रेंज एन्कोडिंग
  • ज़स्टैंडर्ड फेसबुक कंप्रेसर
  • LZFSE एप्पल कंप्रेसर

संदर्भ

  1. J. Duda, K. Tahboub, N. J. Gadil, E. J. Delp, The use of asymmetric numeral systems as an accurate replacement for Huffman coding, Picture Coding Symposium, 2015.
  2. J. Duda, Asymmetric numeral systems: entropy coding combining speed of Huffman coding with compression rate of arithmetic coding, arXiv:1311.2540, 2013.
  3. "Dr Jarosław Duda (Jarek Duda)". Institute of Theoretical Physics. Jagiellonian University in Krakow. Retrieved 2021-08-02.
  4. Duda, Jarek (October 6, 2019). "List of compressors using ANS, implementations and other materials". Retrieved October 6, 2019.
  5. "Google पर सार्वजनिक डोमेन प्रौद्योगिकी का पेटेंट कराने का प्रयास करने का आरोप". Bleeping Computer. September 11, 2017.
  6. Smaller and faster data compression with Zstandard, Facebook, August 2016.
  7. 5 ways Facebook improved compression at scale with Zstandard, Facebook, December 2018.
  8. Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook, Phoronix, September 2017.
  9. "Android P रिलीज़ में Zstd". Archived from the original on 2020-08-26. Retrieved 2019-05-29.
  10. Zstandard Compression and The application/zstd Media Type (email standard).
  11. Hypertext Transfer Protocol (HTTP) Parameters, IANA.
  12. Apple Open-Sources its New Compression Algorithm LZFSE, InfoQ, July 2016.
  13. 13.0 13.1 Google Draco 3D compression library.
  14. Google and Pixar add Draco Compression to Universal Scene Description (USD) Format .
  15. Google PIK: new lossy image format for the internet.
  16. CRAM format specification (version 3.0).
  17. Chen W, Elliott LT (2021). "परिमित-अवस्था एन्ट्रापी के माध्यम से जनसंख्या आनुवंशिक डेटा के लिए संपीड़न।". J Bioinform Comput Biol. 19 (5): 2150026. doi:10.1142/S0219720021500268. PMID 34590992.
  18. Building better compression together with DivANS.
  19. Microsoft DirectStorage overview.
  20. Rhatushnyak, Alexander; Wassenberg, Jan; Sneyers, Jon; Alakuijala, Jyrki; Vandevenne, Lode; Versari, Luca; Obryk, Robert; Szabadka, Zoltan; Kliuchnikov, Evgenii; Comsa, Iulia-Maria; Potempa, Krzysztof; Bruse, Martin; Firsching, Moritz; Khasanova, Renata; Ruud van Asseldonk; Boukortt, Sami; Gomez, Sebastian; Fischbacher, Thomas (2019). "JPEG XL इमेज कोडिंग सिस्टम का समिति ड्राफ्ट". arXiv:1908.03565 [eess.IV].
  21. Data Compression Explained, Matt Mahoney
  22. "मिश्रित बूलियन-टोकन और गुणांक कोडिंग". Retrieved 14 June 2021.
  23. "गूगल का विरोध" (PDF). Institute of Theoretical Physics. Jagiellonian University in Krakow Poland. Professor Jarosław Duda.
  24. "पेटेंट कार्यालय की अस्वीकृति के बाद, Google के लिए सार्वजनिक डोमेन एल्गोरिदम के पेटेंट उपयोग के अपने प्रयास को छोड़ने का समय आ गया है". EFF.
  25. "रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं". Retrieved 14 June 2021.
  26. "Third time's a harm? Microsoft tries to get twice-rejected compression patent past skeptical examiners". The Register. Retrieved 14 June 2021.
  27. "After Final Consideration Pilot 2.0". United States Patent and Trademark Office. United States Patent and Trademark Office. Retrieved 14 June 2021.
  28. "रेंज असममित संख्या प्रणाली एन्कोडिंग और डिकोडिंग की विशेषताएं". Retrieved 16 February 2022.


बाहरी संबंध