c - 二维数组中最快的搜索算法

标签 c algorithm search

所以,我有一个二维数组,int a[X][Y]; X 可以达到 10 000 000Y 最大 6。 给定一个数组 int v[Z] (Z <= Y),我必须查看是否在 a 中找到包含 v 中所有元素的一行

最快的算法是什么?您将如何实现?

我已经尝试过逐行获取然后使用 2 个 for 搜索的经典方法,一个用于 v 元素,一个用于 a 元素,但是它花费的时间太长。

最好(最快)的方法是什么?

int check()
{
    int nrfound;

    for (int l = 0; l < lines_counter; l++) for each line in a array
    {
        nrfound = 0;

        for (int i = 0; i < n; i++) { // for each element in v array

            for (int j = 0; j < m; j++) // for each element in a[l] line
                if (v[i] == a[l][j])
                    nrfound++;
            if (nrfound == Z)
                return 0;
        }
    }
    return 1;
}

最佳答案

我看到三件事需要考虑:

  • 使用线程。
  • 如果可能,在构建int a[X][Y] 表时,我会创建额外的数组int[6][Y],其中将包含:
    • 包含 1、2、3 .. 6 个元素的索引列表。这可以让您缩小搜索范围。
  • 对于每个 X 计数它的值的哈希值。然后统计V值的Hash。
    • 比较哈希码,而不是每个单独的值。

关于c - 二维数组中最快的搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042660/

相关文章:

在 C 中更改/转换 xmlChar 的类型

c - 不使用 ebp 实现堆栈回溯

algorithm - 合并多个排序数组的分而治之策略

perl - 返回关键字、之前的单词和之后的单词的 Perl 或 Gawk 脚本?

search - 如果需要 TABLES 参数但这些参数已过时,如何创建搜索帮助退出功能模块?

python - 按相关性过滤列表和排序项目

c - 溢出: I just want to know how the computers correct the overflow

c++ - 如何检测非 IEEE-754 float ,以及如何使用它们?

algorithm - 优雅地验证位于迷宫边缘的棋子

algorithm - 当递归调用后有逻辑时,从递归到迭代的最巧妙方法是什么?