【发布时间】:2011-02-23 17:47:02
【问题描述】:
我正在寻找用唯一且最佳的短替换来确定性地替换唯一字符串的方法。所以我有一组有限的字符串,到目前为止我可以实现的最佳压缩是通过枚举算法,我对输入集进行排序,然后用扩展字母表上的字符字符串枚举替换字符串(a..z , A...Z, aa...zz, aA...zZ, a0...z9, Aa..., aaa...zaa, aaA...zaaA, ....)。
就压缩而言,这非常有效,但有一个严重的缺点,即它在任何给定的输入字符串上都不是原子的。相反,它的结果取决于从一开始就知道所有输入字符串,以及输入集的排序。
任何人都知道具有类似压缩但不需要预先知道所有输入字符串的算法?!例如,散列对我不起作用,因为根据输入集的大小,我需要一个 8-12 的散列长度才能使散列唯一,这对于替换来说太长了(目前,替换字符串对于我的用例(
【问题讨论】:
-
可能输入的字符是从什么字母表中绘制的?例如只是小写字母;大写和小写字母;字母数字;等等。另外,我认为你的意思是'确定性',你有'原子'。
-
除非您提供有关类型输入字符串的更多详细信息,否则很难回答。不可能有一个通用算法可以在没有冲突的情况下对单个字符串起作用。将一个巨大的文件视为单个字符串。现在您尝试仅使用 3 个字节来表示...
-
@AakashM 输入字符串基本上是 (?u)[a-zA-z_$][\.\w$]*,所以 unicode 字母数字带有一些额外的字符。使用“原子”,我的意思是我不能自己计算给定输入字符串的替换并逃脱它,因为,是的,它不是确定性的。
-
@Moron 想想类似 C 的程序文本中的标识符。
-
这是用于 javascript minifier 还是类似的东西?
标签: algorithm string optimization