[英]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是否在矩阵中。 设计的算法应具有线性时间复杂度。
下面的函数在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.