2009-04-18 4 views
0

Например, если матрица:Есть ли способ найти строку данной ячейки в упорядоченной матрице?

01|02|03|04|05 
    06|07|08|09|10 
    11|12|13|14|15 

И зная, что матрица 5х3, есть способ, что если дано значение «7», что мы можем знать, что в строке 2? Дело в том, что матрица всегда упорядочена от 1 до n, начиная с 0.

Наконец, матрица хранится линейно в массиве с нулевым значением.

+1

Хотите получить нулевое решение или нет? Ваш принятый ответ не основан на нулевом значении. –

+0

Еще одна вещь, которую следует учитывать, - это то, действительно ли ваша строка «1» считается строкой 1 или строкой 0 в вашей матрице. Здесь много двусмысленности. –

+0

Да, ничто, как указано, не основано на нулевом значении. Верхний левый элемент равен 1, и он, кажется, имеет (row, col) = (1,1). – Kip

ответ

3
row = ceiling(7/5) or ceiling(position/width) 
+0

Почему это изменилось? Это не правильно? Это кажется правильным и точным. – ApplePieIsGood

+0

Я не обманул его ... но я бы отметил, что, хотя это правильный ответ для математического класса, это не идеальное * программирующее решение, потому что вам нужно будет делать ненужную математику с плавающей запятой. Кроме того, если положение и ширина являются целыми числами, наивная реализация ceil (pos/width) будет фактически эквивалентной ceil (пол (pos/width)) = floor (pos/width). Конечно, это зависит от языка программирования, некоторые будут использовать математику с плавающей запятой для всех разделов, если вы не уйдете с пути. – Kip

0
Let X be your index 
------------------- 
column = X % width 
row = ceiling(X/width) 

Edit: Кажется, работает теперь, когда я сделал некоторые изменения.

0

Если матрица хранится в row-major порядке, то индексы строк карта с индексом элемента следующим образом:

rowIndex = (elementIndex - 1)/numcolumns 
columnIndex = (elementIndex % numcolumns) - 1 

Это всегда целочисленное деление - так что никаких остатков. Вы получите индексы строк и столбцов начиная с 0.

В качестве упражнения вы узнаете, что происходит в макете колонны.

+1

Но 7 - 1/4 равно 1,5, оставляя 1, а в матрице 3x4 7 находится в третьей строке или в индексе 2 в массиве с нулевым значением. Если я не пропущу что-то, ваш ответ не прав? – ApplePieIsGood

+0

Спасибо! Исправлена ​​опечатка. См. Обновленный пост. – dirkgently

+0

В вашем случае numcolumns = 5. Итак, rowIndex = (7 - 1)/5 = 6/5 = 1 (так как индексы начинаются с 0, это указывает на вторую строку). Кроме того, columnIndex = 7% 5 - 1 = 2 - 1 = 1 (второй столбец). – dirkgently

4

, если она 0 на основе:

ряд: п/ширина
Col: п% ширина

В вашем примере, вы говорите, что с нуля, но он фактически начинается с 1, и вы считаете элемент верхнего левого угла как (row, col) = (1,1), поэтому вам нужно будет отрегулировать математику:

ряд: (п-1)/ширина + 1
Col: (п-1) ширина% + 1

В вашем случае, N = 7, ширина = 5:

строки = (7-1)/5 + 1 = 1 + 1 = 2
Col = (7-1)% 5 + 1 = 1 + 1 = 2

Примечание: Я использую стандартный целым числом программиста math, где «a/b» действительно означает «пол (a/b)».

+0

Плохая связь с моей стороны, я имел в виду, что она хранится в массиве с нулевым значением, а не в том, что первое значение основано на нулевом значении. – ApplePieIsGood

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