IP Library › Granted Patent US 12,341,538
Granted Patent B1
US 12,341,538 · App. 18/961,011 · Granted Jun 24, 2025

Compressing entropy tables with interpolative coding

Inventors: Alexandre Delattre (Paris, FR); Sylvain Gaeremynck (Paris, FR); Mickaël Corroyer (Paris, FR)
Assignee: Nintendo Co., Ltd.
H03M7/6005
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,341,538
App. No.
18/961,011
Granted
Jun 24, 2025
Kind
B1
Abstract

A symbol sequence is entropy-encoded using a table of symbol occurrences, and an integer value f is used to encode the table of symbol occurrences. The integer value f is used to adaptively decode the table of symbol occurrences, including (i) decoding each entry of a cumulative table of symbol occurrences by successively subdividing decoding ranges of the cumulative table of symbol occurrences at their respective middle indexes and, for each decoding range: calculating, from decoded entries of the cumulative table of symbol occurrences, an entry at a first index+f mod(an entry at a last index−the entry at the first index+1) to decode an entry at the respective middle index of the decoding range, and calculating f div(the entry at the last index−the entry at the first index+1) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; and applying the decoded table of symbol occurrences to entropy-decode the received encoded symbol sequence.

Claims (53)

1. A decoder comprising at least one processor and/or processing circuit configured to perform operations comprising:

access an integer value f that encodes a table of symbol occurrences;

use the integer value f to adaptively decode the table of symbol occurrences, including:

(i) decode each entry of a cumulative table of symbol occurrences by successively subdividing decoding ranges of the cumulative table of symbol occurrences at their respective middle indexes and, for each decoding range:

calculate, from decoded entries of the cumulative table of symbol occurrences, an entry at a first index+f mod(an entry at a last index−the entry at the first index+1) to decode an entry at the respective middle index of the decoding range, and calculate f div(the entry at the last index−the entry at the first index+1) to update f; and

(ii) calculate the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences.

2. The decoder of claim 1 wherein the operations further include apply the calculated table of symbol occurrences to entropy-decode an encoded symbol sequence.

3. The decoder of claim 2 wherein the operations further comprise execute at least a portion of the entropy-decoded symbol sequence.

4. The decoder of claim 2 wherein the operations further comprise stream at least a portion of the entropy-decoded symbol sequence and/or information derived therefrom.

5. The decoder of claim 1 wherein the operations further comprise:

receiving a second integer value m,

using a zero value as a lower bound of the cumulative table of symbol occurrences, and

using the received second integer value m as an upper bound of the cumulative table of symbol occurrences.

6. The decoder of claim 5 wherein the operations further comprise obtaining the received second integer value m from a header metadata of the encoded symbol sequence.

7. The decoder of claim 1 wherein the operations further comprise:

receiving a second integer value m,

inserting a zero value as a first entry of the cumulative table of symbol occurrences, and

inserting the received second integer value m as a last entry of the cumulative table of symbol occurrences.

8. The decoder of claim 1 wherein the operations further comprise decode the entries of the cumulative table by traversing a tree of subdivided decoding ranges and calculate an arithmetic division at each node of the tree before child nodes of said each node.

9. The decoder of claim 8 wherein the operations further comprise decoding the entries of the cumulative table by traversing the tree of subdivided decoding ranges in a depth-first pre-order and calculating an arithmetic division at each node of the tree.

10. The decoder of claim 1 wherein the received integer value f is represented as a big number (bignum).

11. The decoder of claim 1 wherein the operations further comprise renormalizing to allow faster and more memory-efficient decoding.

12. The decoder of claim 1 wherein the encoded symbol sequence comprises an aggregation of different components comprising token, literal length, literals, offset, and match length, of sequences of an LZ4 block.

13. A non-transitory storage configured to store instructions that cause at least one processor and/or processing circuit to perform operations comprising:

access an integer value f that encodes a table of symbol occurrences;

use the integer value f to adaptively decode the table of symbol occurrences, including:

(i) decode each entry of a cumulative table of symbol occurrences by successively subdividing decoding ranges of the cumulative table of symbol occurrences at their respective middle indexes and, for each decoding range:

calculate, from decoded entries of the cumulative table of symbol occurrences, an entry at a first index+f mod(an entry at a last index−the entry at the first index+1) to decode an entry at the respective middle index of the decoding range, and

calculate f div(the entry at the last index−the entry at the first index+1) to update f; and

(ii) calculate the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences.

14. The non-transitory storage of claim 13 wherein the operations further comprise apply the calculated table of symbol occurrences to entropy-decode an encoded symbol sequence.

15. The non-transitory storage of claim 14 wherein the operations further comprise use at least a portion of the entropy-decoded symbol sequence to stream data representing at least a portion of a graphical user interaction.

16. The non-transitory storage of claim 14 wherein the operations further comprise execute at least a portion of the entropy-decoded symbol sequence.

17. The non-transitory storage of claim 14 wherein the operations further comprise stream information based on at least a portion of the entropy-decoded symbol sequence.

18. The non-transitory storage of claim 14 wherein the encoded symbol sequence comprises an aggregation of different components comprising token, literal length, literals, offset, and match length, of sequences of an LZ4 block.

19. The non-transitory storage of claim 14 wherein applying comprises applying Asymmetric Numeral Systems (ANS) entropy decoding to decode the received encoded symbol sequence.

20. The non-transitory storage of claim 13 wherein the operations further comprise iterating the successively subdividing and the calculating for each decoding range.

21. The non-transitory storage of claim 13 wherein the operations further comprise recursing the successively subdividing and the calculating for each decoding range.

22. The non-transitory storage of claim 14 wherein the operations further comprise independently decoding segments of the encoded symbol sequence resulting from entropy-based binary segmentation of the symbol sequence and reconstructing the symbol sequence based on segment headers.

23. The non-transitory storage of claim 13 wherein the operations further comprise:

receiving a second integer value m,

using a zero value as a lower bound of the cumulative table of symbol occurrences, and

using the received second integer value m as an upper bound of the cumulative table of symbol occurrences.

24. The non-transitory storage of claim 23 wherein the operations further comprise obtaining the received second integer value m from a header metadata of the encoded symbol sequence.

25. The non-transitory storage of claim 13 wherein the operations further comprise:

receiving a second integer value m,

inserting a zero value as a first entry of the cumulative table of symbol occurrences, and

inserting the received second integer value m as a last entry of the cumulative table of symbol occurrences.

26. The non-transitory storage of claim 13 wherein the operations further comprise decode the entries of the cumulative table by traversing a tree of subdivided decoding ranges and calculating an arithmetic division at each node of the tree before child nodes of said each node.

27. The non-transitory storage of claim 26 wherein the operations further comprise decoding the entries of the cumulative table by traversing the tree of subdivided decoding ranges in a depth-first pre-order and calculating an arithmetic division at each node of the tree.

28. The non-transitory storage of claim 13 wherein the received integer value f is represented as a big number (bignum).

29. The non-transitory storage of claim 13 wherein the operations further comprise renormalizing to allow faster and more memory-efficient decoding.

30. The non-transitory storage of claim 13 wherein the operations further comprise using only integer arithmetic, shifts, logic operations, loads and stores to recover entries of the table of symbol occurrences from integer value f.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 21, 2025
From: NINTENDO EUROPEAN RESEARCH AND DEVELOPMENT
To: NINTENDO CO., LTD.
Reel/Frame 069932/0678 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 7, 2024
From: DELATTRE, ALEXANDRE; GAEREMYNCK, SYLVAIN; CORROYER, MICKAËL
To: NINTENDO EUROPEAN RESEARCH AND DEVELOPMENT
Reel/Frame 069517/0331 →
References Cited (29)
US 6157740A · Buerkle et al. · 2000 [cited by applicant]
US 6975773B1 · Govindaswamy · 2005 [cited by examiner]
US 8898068B2 · Subbaraman · 2014 [cited by examiner]
US 11379951B2 · Delattre et al. · 2022 [cited by applicant]
US 11494875B2 · Delattre et al. · 2022 [cited by applicant]
US 20090034856A1 · Moriya · 2009 [cited by examiner]
US 20130028326A1 · Moriya · 2013 [cited by examiner]
US 20140140400A1 · George · 2014 [cited by examiner]
Huffman, “A Method for the Construction of Minimum-Redundancy Codes” Proceedings Of the I.R.E. (Sep. 1952). [cited by applicant]
En.wikipedia.org/wiki/Arithmetic_coding (2025). [cited by applicant]
Duda et al, “The use of asymmetric numeral systems as an accurate replacement for Huffman coding”, Picture Coding Symposium (2015). [cited by applicant]
Moffat et al, Binary Interpolative Coding for Effective Index Compression. Information Retrieval 3, 25-47 (2000). doi. org/10.1023/A:1013002601898, link.springer.com/article/10.1023/A:1013002601898. [cited by applicant]
Turpin et al, Housekeeping for prefix coding, IEEE Transactions on Communications 48(4):622-628, 48(4):622-628 (May 2000 DOI: 10.1109/26.843129). [cited by applicant]
Moffat et al, Large-Alphabet Semi-Static Entropy Coding Via Asymmetric Numeral Systems , ACM Transactions on Information Systems 38(4) May 2020 DOI: 10.1145/3397175. [cited by applicant]
Trotman, “Compressing Inverted Files”, Information Retrieval 6, 5-19 (2003). [cited by applicant]
Teuhola, “Tournament Coding of Integer Sequences”, The Computer Journal vol. 52 No. 3 (2009). [cited by applicant]
Duda, Encoding of probability distributions for Asymmetric Numeral Systems: https://www.researchgate.net/publication/352373099 (2022). [cited by applicant]
Truong et al, Selective review of offline change point detection methods: Signal Processing vol. 167, Feb. 2020, 107299 https://arxiv.org/abs/1801.00718. [cited by applicant]
Ruptures: change point detection in Python: https://arxiv.org/abs/1801.00826 https://centre-borelli.github.io/ruptures-docs/ (2025). [cited by applicant]
Mia, Change Point Detection with Copula Entropy based Two-Sample Test: https://arxiv.org/abs/2403.07892 (2024). [cited by applicant]
Unakafov et al, Change-point detection using the conditional entropy of ordinal patterns: https://arxiv.org/abs/1510.01457 (2017). [cited by applicant]
Killick et al, Optimal detection of changepoints with a linear computational cost: https://arxiv.org/abs/1101.1438 (2012, 2024). [cited by applicant]
Daass et al, Using an adaptive entropy-based threshold for change detection methods—Application to fault-tolerant fusion in collaborative mobile robotics: https://ieeexplore.ieee.org/document/8820667, 2019 6th Internati… [cited by applicant]
https://en.wikipedia.org/wiki/LZFSE (2025). [cited by applicant]
https://en.wikipedia.org/wiki/Minimum_description_length#Two-Part_codes (2025). [cited by applicant]
Howard et al (1993) “Fast and efficient lossless image compression”. In: Storer JA and Cohn M, Eds., Proc. 1993 IEEE Data Compression Conference. IEEE Computer Society Press, Los Alamitos, California, pp. 351-360 (1993). [cited by applicant]
Sugiura et al, “Optimal Golomb-Rice Code Extension for Lossless Coding of Low-Entropy Exponentially Distributed Sources,” in IEEE Transactions on Information Theory, vol. 64, No. 4, pp. 3153-3161, Apr. 2018, doi: 10.110… [cited by applicant]
Wang et al, “Variants of Golomb Coding and the n-ary Versions,” in IEEE Transactions on Communications, vol. 68, No. 12, pp. 7460-7472, Dec. 2020, doi: 10.1109/TCOMM.2020.3022396. [cited by applicant]
Lakhdhar et al, “Context-Based Adaptive Arithmetic Encoding of EAVQ Indices,” in IEEE Transactions on Audio, Speech, and Language Processing, vol. 20, No. 5, pp. 1473-1481, Jul. 2012, doi: 10.1109/TASL.2011.2181834. [cited by applicant]