我将如何通过检查周围的所有数字是否小于它来查找局部最大值来遍历二维数组?

阿洪

我将如何通过检查周围的所有数字是否小于它来查找局部最大值来遍历二维数组?我真的很困惑我将如何在代码中做到这一点。我需要得到位置,我只需要局部最大值,而不是绝对最大值。

void reportMaxima(int rows, int cols, int grid[ rows ][ cols ])
{

}
阿尔克斯

这应该有效:

#include <stdbool.h>
#include <string.h>

void report_maxima(int rows, int cols, int arr_in[rows][cols],
                    bool arr_out[rows][cols])
{
    int i, j;
    int k, l;

    memset(arr_out, 0, rows * cols * sizeof(arr_out[0][0]));
//  memset(arr_out, 0, sizeof(arr_out));  I think this doesn't work :(

    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            for (k = i - 1; k <= (i + 1); k++) {
                if (k < 0)
                    continue;
                if (k >= rows)
                    break;

                for (l = j - 1; l <= (j + 1); l++) {
                    if (l < 0)
                        continue;
                    if (l >= cols)
                        break;

                    if (arr_in[i][j] < arr_in[k][l])
                        goto not_maxima;
                }
            }

            arr_out[i][j]   = true;
            continue;

not_maxima:
        }
    }
}

首先,您需要一个bool数组来存储输出信息:一个点是否是最大值 ( true) 或不是 ( false)。

在存储它所在的点之前,您需要将该数组初始化为0( false) true最好的方法是使用memset().

然后,您显然需要遍历输入数组。ij这样做)

对于输入数组的每个点,您检查所有邻居。kl这样做)。您需要确保您尝试访问的邻居在数组边界内(if - continue并且if - break这样做)。

然后,您检查所有这些邻居是否都小于您所在的点。您找到的第一个比您的点大的邻居告诉您您不在局部最大值中,您应该跳到下一个点。如果在检查了所有邻居之后你没有发现任何邻居大于你的点,那么你就处于局部最大值。(或至少在一个拐点)

最后一件事很重要:如果你想确定,你应该添加很多检查,这会大大减慢算法的速度。这取决于您的需求。

编辑:

修复了使用不正确输入时的错误sizeof()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何沿轴使用 argmax 来获取 numpy 二维数组的每一列中的最大值?

来自分类Dev

如何在二维数组(矩阵)中找到局部最大值的索引?

来自分类Dev

查找二维数组最大值的快速代码

来自分类Dev

计算二维数组中的所有数字

来自分类Dev

计算二维数组中的所有数字

来自分类Dev

如何使用多线程在Java中查找二维数组的最大值

来自分类Dev

如何使用多线程在Java中查找二维数组的最大值

来自分类Dev

使用局部最小值和全局最大值查找范围内的所有数字

来自分类Dev

算法 - 在 n*n 二维矩阵中查找 k*k 集的所有最大值

来自分类Dev

在二维数组中查找最小值/最大值

来自分类Dev

查找二维数组的最大值和最小值

来自分类Dev

如何在二维数组(矩阵)中查找每一行的最大值C#

来自分类Dev

通过索引二维数组来填充numpy数组

来自分类Dev

二维数组中的最大值(处理中)

来自分类Dev

返回二维数组中行的最大值

来自分类Dev

如何将二维numpy数组中的所有数字转换为字符串?

来自分类Dev

在二维网格(多维列表)中获取具有最大值的所有图块

来自分类Dev

如何更改二维数组中的所有值?

来自分类Dev

php检查一个二维数组中的所有值是否在另一个二维数组中

来自分类Dev

php检查一个二维数组中的所有值是否都在另一个二维数组中

来自分类Dev

打字稿:带有数字键和数组值的二维数组

来自分类Dev

如何在Java中获取二维数组列表的最大值/最小值

来自分类Dev

检查是否可以仅使用数组中的数字来形成从 1 到 K 的所有数字

来自分类Dev

如何在整个二维数组中找到最大值(处理)

来自分类Dev

如何编写通过返回布尔值来检查数组是否包含数字的函数

来自分类Dev

python:二维矩阵中更快的局部最大值

来自分类Dev

查找函数的所有局部最大值

来自分类Dev

优化算法以查找所有局部最大值

来自分类Dev

如何通过使用awk忽略带有字符的行来查找字段的最大值?

Related 相关文章

  1. 1

    如何沿轴使用 argmax 来获取 numpy 二维数组的每一列中的最大值?

  2. 2

    如何在二维数组(矩阵)中找到局部最大值的索引?

  3. 3

    查找二维数组最大值的快速代码

  4. 4

    计算二维数组中的所有数字

  5. 5

    计算二维数组中的所有数字

  6. 6

    如何使用多线程在Java中查找二维数组的最大值

  7. 7

    如何使用多线程在Java中查找二维数组的最大值

  8. 8

    使用局部最小值和全局最大值查找范围内的所有数字

  9. 9

    算法 - 在 n*n 二维矩阵中查找 k*k 集的所有最大值

  10. 10

    在二维数组中查找最小值/最大值

  11. 11

    查找二维数组的最大值和最小值

  12. 12

    如何在二维数组(矩阵)中查找每一行的最大值C#

  13. 13

    通过索引二维数组来填充numpy数组

  14. 14

    二维数组中的最大值(处理中)

  15. 15

    返回二维数组中行的最大值

  16. 16

    如何将二维numpy数组中的所有数字转换为字符串?

  17. 17

    在二维网格(多维列表)中获取具有最大值的所有图块

  18. 18

    如何更改二维数组中的所有值?

  19. 19

    php检查一个二维数组中的所有值是否在另一个二维数组中

  20. 20

    php检查一个二维数组中的所有值是否都在另一个二维数组中

  21. 21

    打字稿:带有数字键和数组值的二维数组

  22. 22

    如何在Java中获取二维数组列表的最大值/最小值

  23. 23

    检查是否可以仅使用数组中的数字来形成从 1 到 K 的所有数字

  24. 24

    如何在整个二维数组中找到最大值(处理)

  25. 25

    如何编写通过返回布尔值来检查数组是否包含数字的函数

  26. 26

    python:二维矩阵中更快的局部最大值

  27. 27

    查找函数的所有局部最大值

  28. 28

    优化算法以查找所有局部最大值

  29. 29

    如何通过使用awk忽略带有字符的行来查找字段的最大值?

热门标签

归档