gpt4 book ai didi

c - 如何以最少的 for 循环次数循环遍历像素 block

转载 作者:行者123 更新时间:2023-11-30 19:01:28 24 4
gpt4 key购买 nike

我有一个宽度 * 高度像素的图像,我想在其中循环遍历像素 block ,例如 block 大小为 10 * 10。我怎样才能以最少的循环次数做到这一点?

我尝试首先循环遍历每一列,然后循环遍历每一行,并从这两个外部循环中获取起始 x 和 y 位置。然后循环从 block 的起始位置开始循环直到 block 大小并操作像素。这消耗了四个嵌套循环。

for (int i = 0; i < Width; i+=Block_Size) {

for (int j = 0; j < Height; j+=Block_Size) {

for (int x = i; x < i + Block_Size; x++) {

for (int y = j; y < j + Block_Size; y++) {

//Get pixel values within the block

}

}

}

}

最佳答案

How can i do this with minimum number of loops?

您可以通过完全展开任意数量的循环级别来减少循环数量。对于固定的栅格尺寸,您可以将它们全部展开,从而产生零循环的(可能很长)实现。对于已知的 Block_Size,无论总体尺寸是否已知,您都可以展开一个或两个内部循环,从而仅剩下两个循环。

但是你为什么会考虑这样的事情呢?这个问题似乎假设减少循环嵌套的深度会有某种固有的优势,但这不一定是真的,而且无论产生什么影响都可能很小。

我倾向于猜测您已经研究了一些计算复杂性理论,并消除了深循环嵌套必然会产生较差的扩展性能,甚至深循环嵌套本质上性能较差的想法。这些都是误解,尽管相对常见,而且他们无论如何都会向后看问题。

循环嵌套性能如何扩展的主要考虑因素是最内层循环体的多少倍,

        //Get pixel values within the block

,被执行。对于任何合理的方法,无论涉及多少个循环,都将获得大致相同的性能,使其对栅格中的每个像素执行一次。既然如此,代码清晰度应该是您的目标,并且您最初的四循环嵌套非常清晰。

关于c - 如何以最少的 for 循环次数循环遍历像素 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com