Encoding 常数位和整数的高效编码

Encoding 常数位和整数的高效编码,encoding,Encoding,如何对一大组整数进行编码,这些整数都具有已知的常量数字和,以及常量数字量 以10为基数、数字和为5、数字为3的整数示例: 014, 041, 104, 113, 122, 131, 140, 203 .... 最重要的因素是空间,但计算时间并非完全不重要。最简单的方法是存储数字和本身,并保持不变 但我可能误解了这个问题 编辑:这里是我的外卖:你想编码集本身;是吗 对集合本身进行编码就像存储基数、数字总和和位数一样简单,例如,在您给出的示例中,{10,5,3} 然而,大多数情况下,你会发现一个数

如何对一大组整数进行编码,这些整数都具有已知的常量数字和,以及常量数字量

以10为基数、数字和为5、数字为3的整数示例:

014, 041, 104, 113, 122, 131, 140, 203 ....

最重要的因素是空间,但计算时间并非完全不重要。

最简单的方法是存储数字和本身,并保持不变

但我可能误解了这个问题

编辑:这里是我的外卖:你想编码集本身;是吗

对集合本身进行编码就像存储基数、数字总和和位数一样简单,例如,在您给出的示例中,{10,5,3}

然而,大多数情况下,你会发现一个数字最紧凑的表示形式是数字本身,除非它非常大

此外,因为数字和通常被认为是递归的;在一到九之间,包括在内;203与500、140或950具有相同的位和。这意味着该集合对于任何数字组合都是巨大的,而且除了某些退化情况外,任何集合都使用它们相关的基中的所有可用数字


因此,你知道,当单独存储时,数字本身的最有效编码变成了数字本身,特别是考虑到±2 147 483 648之间的每个数字通常占用相同的内存空间,通常在存储器中。

当您有一组明确定义的可能值进行编码时,直接编码理论方法是按顺序对所有可能值进行编号,然后根据需要存储尽可能多的位。如果单个值的频率相同或未知,这显然是最佳的。如果你对频率分布有所了解,你将不得不使用哈夫曼代码来获得真正的最佳结果,但这相当复杂,我将只处理另一种情况

对于均匀分布或未知情况,方法如下: 想象一下,您可以预生成并存储它,或者动态生成一个按字典排序的列表,其中包含所有编码值的输入。例如,在您的情况下,除非您的数字和是递归的,否则列表将开始:005、023、032、050、104、113、122、131、140、203、212、221、230、401、410、500。 然后根据列表中的每个项目在列表中的位置为其分配一个整数:005变为0,023变为1,032变为2,依此类推。除非我犯了错误,否则请适当调整列表中的16个值,对于这些值,您需要4位来将任何索引编码到列表中。这个索引是您的编码值,编码和解码变得显而易见


至于首先生成列表的算法:最简单的方法是从000数到999,然后扔掉所有不符合标准的东西。通过复制计数和溢出(例如104如何跟随050)可以更巧妙地解决这一问题,但这可能不值得努力。

对于任何非零数字和203、2003、20003,…,此集合是无限的,。。。。你对位数有限制吗?是的,位数也是恒定的。你想用什么语言?我在下面用python提供了一个解决方案。它所缺少的只是使用了非常简单的permute库。你找到解决方案了吗?在我当前的解决方案中,我使用了一个映射014->0,041->2,104->3的字典。。。然后我存储生成字典所需的参数,只存储映射的值。但是我非常想使用一个非字典的解决方案。好的,我需要的是一个编码器和一个解码器一个编解码器。关键是数字和总是一样的。如果我将122编码为数字和,那么我将得到5,但他们无法将5解码回122。