代码优化与数据压缩之间的关系

时间:2017-01-22 14:42:34

标签: optimization compilation compiler-construction compression list-comprehension

我在互联网上搜索了这个问题,并发现一些研究人员使用数据压缩算法进行编译器优化,如霍夫曼编码。

我的问题更为笼统:

我们可以将代码优化视为有损压缩类型吗?

1 个答案:

答案 0 :(得分:0)

在具体的层面上,它是苹果和橘子。但在抽象层面上,这是一个有趣的问题。

数据压缩处理冗余,这是数据和信息之间的差异。 它试图通过修改信息编码来减少不必要的冗余。 通常,这种编码通过获取一个公共子字符串并生成引用它的代码,而不是重复子字符串。

编译器优化(速度)旨在减少不必要的周期。 一种方法是如果某些计算的结果需要两次或更多次, 确保将其保存在某个地址或寄存器中(记忆),以便可以在较少的周期内重复使用。

另一种形式的编码数字是所谓的“一元符号”,其中只有一个数字,数字通过重复来表示。例如,数字“三”和“四”是“111”和“1111”,它们取N个数字。 这个代码通过切换到二进制来优化,如“011”和“100”,它采用log(N)数字(当然是基数2)。

与此类比的编程是线性搜索和二进制搜索之间的区别。 线性搜索需要进行O(N)比较。 每次比较都可以产生大量信息或者很少 - 平均来说远远少于一点。 二进制搜索采用O(log(N))比较,每次比较产生一位。

通过一些思考,应该可以找到其他相似之处。

相关问题