繁体   English   中英

c ++:在二维数组中快速搜索

[英]c++ : Fast searching in 2d array

我有一个2D array ,可通过以下方式在代码中使用:

搜索特定条目需要花费大量时间,而我想减少搜索元素的时间。 谁能建议我可以做些优化来减少在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
 }

给定一个nxn矩阵,其中每一行和每一列都按升序排序。 给定数字x,如何确定该x是否在矩阵中。 设计的算法应具有线性时间复杂度。

  1. 从右上角元素开始
  2. 循环:将该元素e与xi相比较,如果相等,则返回其位置ii)e <x然后将其向下移动(如果超出矩阵范围,则返回false)iii)e> x然后将其向左移动(如果超出矩阵范围,则返回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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM