C++ : Fast searching in 2d array

标签 c++ arrays

我有一个 2D 数组,我按以下方式在我的代码中使用它:

搜索特定条目需要很多时间,而我想减少搜索元素的时间。谁能建议我可以做哪些优化来减少在此二维数组中搜索的时间?

 for( counter1=0; counter1< size ; ++counter1)
    {   
    int index= GVector[counter1];
    SingleTableEntries NewNextState=NewSingleTable[Next][index];

    Next=NewNextState.Next_State;
    if(NewNextState.accept1==1 )
    {
        return 1;           
    }

    index= GuideVector[counter1+1];

    NewNextState=NewSingleTable[Next][index];

    NextState_chunk2=NewNextState.Next_State;
    if(NewNextState.accept1==1 )
    {
        return 1;       
    }       
    //code
 }

最佳答案

给定一个 n x n 矩阵,其中每一行和每一列都按递增顺序排序。给定一个数字x,如何判断这个x是否在矩阵中。设计的算法应具有线性时间复杂度。

  1. 从右上角的元素开始
  2. 循环:比较这个元素 e 和 x i) 如果它们相等则返回它的位置 ii) e < x 然后将其向下移动(如果超出矩阵范围则 break 返回 false) iii) e > x 然后将其向左移动(如果超出矩阵范围则 break 返回 false)
  3. 重复 i)、ii) 和 iii) 直到找到元素或返回 false

下面的函数在 mat[][] 中搜索元素 x。如果找到该元素,则打印其位置并返回 true,否则打印“未找到”并返回 false。

int search(int mat[4][4], int n, int x) {
    int i = 0, j = n-1;  //set indexes for top right element
    while ( i < n && j >= 0 ) {
        if ( mat[i][j] == x ) {
            printf("\n Found at %d, %d", i, j);
            return 1;
        }
        if ( mat[i][j] > x )
        j--;
        else //  if mat[i][j] < x
        i++;
    }
    printf("\n Element not found");
    return 0;  // if ( i==n || j== -1 )
}

int main() {
    int mat[4][4] = {   {10, 20, 30, 40},
                        {15, 25, 35, 45},
                        {27, 29, 37, 48},
                        {32, 33, 39, 50},
                    };
    search(mat, 4, 29);
    getchar();
    return 0;
}

时间复杂度:O(n)

上述方法也适用于 m x n 矩阵(不仅适用于 n x n)。复杂度为 O(m + n)。

关于C++ : Fast searching in 2d array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078113/

相关文章:

c++ - fftw - 访问冲突错误

c++ - `const` 作为移动构造函数的模板参数的效果

arrays - 在 Postgres 中过滤顶级 JSONB 数组文档?

C++ 样式 : copyable handle wrapper classes

c++ - %*c 是什么意思?

c++ - 成员仅因类型不同而不同的 C++ 类

javascript - 为什么使用 push 或任何数组方法修改原始数组但将其分配给其他东西却没有?

javascript - 如何在javascript中使用while循环打印数字

javascript - Array Push 在 JavaScript 中对相同的值使用相同的索引

java - 循环数组队列实现 : Which is the best way to resize a circular array?