【问题标题】:Relationship between code optimization and data compression代码优化与数据压缩的关系
【发布时间】:2017-01-22 14:42:33
【问题描述】:

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

我的问题更笼统:

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

【问题讨论】:

  • 你不能认为它是一种有损的东西,因为它不是有损的,而且霍夫曼编码不是一种编译器优化技术。你的问题没有任何意义。
  • 由于不清楚您的要求,我投票结束。
  • 没有。您所指的优化类型非常具体。大多数优化(例如循环展开)往往会使代码变大。

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


【解决方案1】:

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

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

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

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

与此类似的编程是线性搜索和二分搜索之间的区别。 线性搜索需要 O(N) 次比较。 每次比较都可以产生大量信息或很少——平均而言,不到一点点。 二进制搜索需要 O(log(N)) 次比较,每次比较产生一位。

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

【讨论】:

  • 我的问题是,它们都旨在消除冗余,同时保留代码/数据的语义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2011-12-14
  • 2015-12-28
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多