如何使用 C# 在行和列增加的矩阵中搜索?
这个问题的原始解决方案是扫描输入矩阵中存储的所有元素以搜索给定的键。O(MN)如果矩阵的大小为MxN,则这种线性搜索方法会花费时间。
矩阵可以看作是一个有序的一维数组。如果输入矩阵中的所有行都按自上而下的顺序连接,则形成一个已排序的一维数组。并且,在这种情况下,二分搜索算法适用于这个二维数组。下面的一段代码开发了一个函数SearchRowwiseColumnWiseMatrix,它将一个二维数组和搜索关键字作为输入,并根据找到的搜索关键字的成功或失败返回真或假。
示例
public class Matrix{
public bool SearchRowwiseColumnWiseMatrix(int[,] mat, int searchElement){
int col = getMatrixColSize(mat);
int start = 0;
int last =mat.Length- 1;
while (start <= last){
int mid = start + (last - start) / 2;
int mid_element = mat[mid / col, mid % col];
if (searchElement == mid_element){
return true;
}
else if (searchElement < mid_element){
last = mid - 1;
}
else{
start = mid + 1;
}
}
return false;
}
private int getMatrixRowSize(int[,] mat){
return mat.GetLength(0);
}
private int getMatrixColSize(int[,] mat){
return mat.GetLength(1);
}
}
static void Main(string[] args){
Matrix m = new Matrix();
int[,] mat = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
Console.WriteLine(m.SearchRowwiseColumnWiseMatrix(mat, 11));
}输出结果TRUE
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下