如何在二维数组中使用二叉搜索
how to use binary search in two dimensional array?
我想比较 2、二维数组(一些特定元素)arr1[][]
,arr[][]
在 C++ 中,我正在使用 for 循环来比较它们,但花了很长时间。
我可以使用搜索算法来实现这一点,例如二叉搜索或快速搜索?我该如何实现?
这是我到目前为止的代码:
for (k = 0; k < MAXROW; k++)
{
for (m = 0; m < MAXROW; m++)
{
for(j=0;j<MAXCOL;j++)
{
if(arr[k][3] ==arr1[m][3])
{
if((arr[k][1] ==arr1[m][1] && arr[k][2] ==arr1[m][2]))
{
cout<<" n same element";
}
else
cout<<"n inner different elements";
}
else
cout<<"n different elements";
判断两个二维数组是否相等(不知道它们的组织)的唯一方法是比较每个元素。这应该有 O(mn) 运行时间,其中 m=# 行和 n=# 列。您似乎编写了一个额外的循环,这可能就是您认为它运行太慢的原因。以下是我如何编写比较:
bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
for (int j = 0; j < MAX_COLS; ++j) {
if (arr1[i][j] != arr2[i][j]) {
are_equal = false;
break;
}
}
}
if (are_equal) {
std::cout << "The arrays are equal." << std::endl;
} else {
std::cout << "The arrays differ by at least one element." << std::endl;
}
要仅比较第 3 列和第 4 列(或列的任何子集),请执行以下操作:
int columns_to_check[] = {2, 3}; // Remember that these are 0-indexed
const int NUM_COLS = sizeof(columns_to_check)/sizeof(int);
bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
for (int j = 0; j < NUM_COLS; ++j) {
int col = columns_to_check[j];
if (arr1[i][col] != arr2[i][col]) {
are_equal = false;
break;
}
}
}
if (are_equal) {
std::cout << "The arrays are equal." << std::endl;
} else {
std::cout << "The arrays differ by at least one element." << std::endl;
}
如果您只想比较第 3 列和第 4 列,则可以只使用一个循环。
bool are_equal = true;
for (int i = 0; i < MAX_ROWS; ++i) {
if (arr1[i][2] != arr2[i][2] || arr1[i][3] != arr2[i][3]) {
are_equal = false;
break;
}
}
不,
你不能使用二进制搜索。您必须使用 2 个循环并逐个元素比较数组。包括二叉搜索在内的大多数搜索算法都使用键在数组中进行搜索。阵列是 2D 还是 1D
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 如何在二维数组中使用二叉搜索
- 如何使用二进制搜索C++从二维数组中输出数据
- 在函数搜索模式中引用二维数组时出错
- 搜索二维数组
- 在给定一个元素的地址下搜索一个二维数组