2013-02-27 5 views
0

У меня есть 2D-массив, который полностью отсортирован. Приведенные ниже массивы являются примерамиДвоичный поиск по двумерному массиву

1 2 3 
    5 6 7 
    9 10 11 

и

1 2 3 4 5 
    6 7 8 9 10 

Я хотел бы использовать бинарный поиск по этому массиву. Пусть rows будет числом строк и cols быть числом столбцов

Изначально start = 0 и end = rows * cols -1

В 3 х 3 массиве выше, средняя точка работает, чтобы быть четыре [9 элементов]. Теперь, как узнать соответствующую строку и столбец с серединой? Есть ли для этого стандартная формула?

ответ

6

Формула очень проста:

row = number/cols_per_row; 
col = number%cols_per_row; 
+0

Хм .. Просто Любопытно. Как вы это придумали? – vinoth

+1

Ну, для каждого номера cols_per_row вы идете на одну строку вниз. Таким образом, это объясняет, почему первое число найдено с использованием этой формулы, верно? Что касается второго - столбец, в котором вы находитесь, циклически повторяется каждый номер cols_per_row, поэтому '%' описывает такое поведение, правильно? –

+0

Что такое 'cols_per_row'? –

1

Пусть size = rows * cols

mid = size // 2 (целочисленное деление)

row = mid // cols

col = mid % cols (остальное для целочисленного деления)

Смежные вопросы