我正在寻找用唯一且最佳的短替换来确定性地替换唯一字符串的方法。所以我有一组有限的字符串,到目前为止我可以实现的最佳压缩是通过枚举算法,我在其中对输入集进行排序,然后用扩展字母表中的char字符串枚举替换字符串(a..z ,A ... Z,aa ... zz,aA ... zZ,a0 ... z9,Aa ...,aaa ... zaa,aaA ... zaaA,....)。
就压缩而言,这非常有效,但是它具有严重的缺点,即它在任何给定的输入字符串上都不是原子的。相反,它的结果取决于从一开始就知道所有输入字符串,以及输入集的排序。
任何人都知道一种具有类似压缩但不需要预先知道所有输入字符串的算法?!例如Hashing对我来说不起作用,因为根据输入集的大小,我需要哈希长度为8-12,哈希是唯一的,并且这将替换为太长(当前,替换字符串)我的用例(< 10,000输入字符串)是1-3个字符长。此外,如果我们中的理论家知道这是浪费的努力,我会有兴趣听到:-)。
答案 0 :(得分:1)
您可以使用枚举方案,但按您第一次遇到输入字符串的顺序排序。
例如,您处理的第一个字符串可以映射到“a”。 下一个不同的字符串将映射到“b”等。
每次处理字符串时,都需要查看它是否已经映射过。
答案 1 :(得分:1)
“最佳短”取决于从中抽取样本的字符串数量。在群体中没有系统冗余的情况下,您会发现根本只能压缩一小部分任意字符串(例如,考虑尝试压缩随机位串)。
如果您可以对您的数据做出假设,例如“字符串应该主要由英语单词组成”,那么您可以根据字母频率做一些简单有效的事情(例如,对于英语,相对频率顺序是像ETAOINSHRDLUGCY ...之类的东西,所以你想用更少的比特代表Es和更多的比特来表示像Q这样的不常见的字母。
干杯。