我有一个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
}
答案 0 :(得分:2)
给定n×n矩阵,其中每个行和列按递增顺序排序。给定数字x,如何确定此x是否在矩阵中。设计的算法应具有线性时间复杂度。
下面的函数搜索mat [] []中的元素x。如果找到该元素,则打印其位置并返回true,否则打印“not found”并返回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×n矩阵(不仅适用于n×n)。复杂性为O(m + n)。