假设数学表达式的字符数少于原始数字。 例子 -
20880467999847912034355032910578可表示为(23 ^ 23 +10)
这看起来像一个很好的压缩方法。它可以用于压缩大文件吗?
UPDATE-我并不是说将文件转换为大二进制数。假设我有一个文本文件,我用它们的ascii值替换它中的所有字符。现在我在十进制数字系统中有一个大数字。我可以将它表达为一个数学表达式,如上例所示。
答案 0 :(得分:5)
如果您将文件的内容作为一个大的二进制数,并找到一个表达式,该表达式的计算结果为,并且可以比数字本身更紧凑地存储,那么是的,您已压缩文件。
不幸的是,对于大多数文件,你永远不会找到这样的表达。
简单的逻辑(请参阅@OliCharlesworth发布的链接)应该说服您无法为所有甚至大多数文件找到这样的表达式。即使对于可能具有合适表达式的文件,找到它也会非常非常困难。如果你想说服自己,试试这个挑战:
使用以下ASCII字符串:
"神圣的Kolmogorov复杂性,蝙蝠侠!压缩这个傻逼好,你会得到一个相当便宜,我的好孩子!"
解释为一个二进制数,与高阶位来第一,即:2280899635869589768629811602006623364651019118009864206881173103187172975244099647369151382436996220022807793898568915685059542016541775658916080587423284053601554008368389985872997499032440860090224967472423163775276043175694884234152335588829534778866153948275745
。尝试找到一个评估该数字的多项式。使用的所有数字必须是整数,并且多项式中出现的小数位总数必须小于80.如果您成功,我将通过PayPal向您发送小额现金奖。
答案 1 :(得分:5)
你正在寻找的概念是Kolmogorov的复杂性 - 它衡量的是算法不可压缩的数字。有关此类号码的this wiki article和rigorous definition,请参见examples。
答案 2 :(得分:0)
是的,根据定义。您已正确定义压缩,表示较小的东西。
你怎么建议这样做?这有多常用?有瑕疵。