Таким образом, проблема состоит в том, чтобы найти, находится ли x в одном из элементов отсортированной матрицы, возрастающей по строке и по столбцу.
пример :
1 2 3
4 5 6
7 8 9
Мне интересно найти временную сложность решения этой проблемы по принципу «разделяй и властвуй». Я погуглил, но нашел только для решения O (m + n), а также из этого Поиск в отсортированной 2D-матрице. но он говорит (комментарий к ответу), что «T (R) = 3T (R/4)», почему f (R) = 0?
Вопрос в том, в чем сложность решения «разделяй и властвуй» с использованием основной теоремы? а в T(R) = 3T(R/4) + f(R) каким должно быть f(R)?
если это поможет, это мое решение "разделяй и властвуй":
bool find_x_in_matrix(int x, int mat[3][3], int top_row, int top_col, int bot_row, int bot_col) {
if(top_row > bot_row || top_col > bot_col)
return false;
int mid_row = (bot_row + top_row) / 2;
int mid_col = (bot_col + top_col) / 2;
if(mat[mid_row][mid_col] == x)
return true;
else if(mat[mid_row][mid_col] > x) {
return find_x_in_matrix(x, mat, top_row, mid_col, mid_row - 1, bot_col) ||
find_x_in_matrix(x, mat, top_row, top_col, mid_row-1, mid_col-1) ||
find_x_in_matrix(x, mat, mid_row, top_col, bot_row, mid_col-1);
}else if(mat[mid_row][mid_col] < x) {
return find_x_in_matrix(x, mat, top_row, mid_col + 1, mid_row, bot_col) ||
find_x_in_matrix(x, mat, mid_row + 1, top_col, bot_row, mid_col) ||
find_x_in_matrix(x, mat, mid_row + 1, mid_col + 1, bot_row, bot_col);
}
}
отредактируйте, чтобы уточнить решение:
Алгоритм: 1. сравнить средний элемент матрицы с искомым значением 2. если значение равно m(i,j) вернуть true 3. если значение меньше, искать значение в верхнем правом, верхнем левом, нижнем левом углу матрица 4. если значение больше, ищите значение в верхнем правом, нижнем правом, нижнем левом углу матрицы