排列内的有效存储二进制数据

efficient storage binary data within permutations

我正在寻找一种在传输数据时按字典顺序存储数据的方法。 由于字典的顺序无关紧要,它提供了一个理想的位置来存储可能被忽视的数据。

出于此目的,它是字典这一事实并不重要,因此我将其建模为列表。

我有一个大小为 A、B、C 和 D 的列表。

我可以在其中存储的理想数据量是 log2(n!) where n=4 是 4.58...所以 4 位。

有许多简单的方法可以接近 n-1 位可以存储,例如 n-1 效率的简单方法:

I have the same list as above, A..D.
I start with the first element
I place the next elements before or after it - each referring to a 1 or a 0.
For example:
     000 -> DCBA
     001 -> CBAD
     010 -> DBAC
     100 -> BACD

对此有一些优化可以提供额外百分比的存储位,但我想知道(如果可能的话)是否有一种方法可以接近理论最大值,或者至少提供显着提高了该方法的效率。

对于更多上下文,我希望按照 HTTP 请求 header 字段的顺序存储数据。

如果可能的话,我正在寻找一种算法,而不是一段代码。

我通过使用快速排序样式算法解决了这个问题,但是没有将每个元素与主元进行比较,而是使用 'Datasource' 的下一位。 由于我正在回答我自己的问题,而且这个问题几乎没有人感兴趣,所以我不会详细介绍,但如果有人问我,我很乐意这样做。