Есть ли способ найти строку данной ячейки в упорядоченной матрице? - PullRequest
0 голосов
/ 18 апреля 2009

Например, с учетом матрицы:

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

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

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

Ответы [ 4 ]

4 голосов
/ 18 апреля 2009

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

строка: н / ширина
col: n% ширина

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

строка: (n-1) / ширина + 1
col: (n-1)% ширина + 1

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

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

Примечание: я использую целочисленную математику стандартного программиста, где "a / b" действительно означает "floor (a / b)".

3 голосов
/ 18 апреля 2009
row = ceiling(7 / 5)  or   ceiling(position / width)
0 голосов
/ 18 апреля 2009

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

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

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

Это оставлено в качестве упражнения, чтобы выяснить, что происходит в мажорной колонке.

0 голосов
/ 18 апреля 2009
Let X be your index
-------------------
column = X % width
row    = ceiling(X / width)

Редактировать : похоже, теперь работает, когда я внес некоторые изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...