c - 简单的脑残,更好的算法

标签 c algorithm

<分区>

这是在一所社区大学。我失败了,但想知道答案。

问题是这样的:您有一个表示图像的二维结构数组。每个结构都有一个红色、绿色、蓝色和 alpha 值。可以有更多信息,但不是解决问题所必需的。

假设图像是 4000x4000 或 1600 万个元素。每一个元素都需要在每一轮更新/检查。

对于您需要的每个元素:

  • 如果 < 50 或设置为 205 > 205,则将红色字节设置为 50
  • 使用 rand() 将绿色字节设置为 0 到 255 之间的随机值
  • 以“有趣”的方式修饰蓝色。

“你不能强行做到这一点,以更聪明的方式思考;你需要更好的算法”

我基本上做了一个循环。我是最快的,但他说这是“关于找到更好的算法,而不是使用可爱的编译器和指针技巧”。

还需要使用纯 C 语言。没有 OpenMP/Threads 或 OpenGL 着色、OpenCL 等...只有带有标准库的 ANSI C(甚至禁止使用 GNU/POSIX 库)。

我询问了按位运算,他说“这些在 C [??] 中非常昂贵,而且它是关于编写一个快速而可靠的算法,而不是你不断想出的这些可爱的技巧”。

有什么提示吗?

最佳答案

是的,让我们一起想办法写一个算法来“以‘有趣’的方式修改蓝色。”,只要它“快速且可靠”。很高兴社区大学的教学如此强大。我从来没有听说过按位运算很昂贵。比什么贵?当你说你是“最快的”时,你是说你是第一个提出答案的,还是你的答案是最有效的实现?如果您被迫将数据存储为结构的二维数组(而不是树),我不确定您还能做什么。所以你知道你失败了,但没有被告知正确答案?这就是我所说的教育!

关于c - 简单的脑残,更好的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757682/

相关文章:

java - 使用 boolean 值的参数

c# - 如何在 32 个二元期权之间迭代?

c - Atof 不能在 C 中工作,没有 atof 也不能在调试中工作

java - 算法 - 查找循环世界中重叠间隔的持续时间(24 小时)

c# - C#编译如何避免需要头文件?

c++ - 必须使用 MACRO 的极少数情况

java - 从 C++ 和 Java 到 Ada 的类构造概念

algorithm - 从数字中去除前导/尾随数字的最佳方法是什么?

c - C 中的类内核模块初始化

c - for循环括号在c