2016-10-05 2 views
1

У меня есть матрица N * N.Вставка и сдвиговая матрица n * n

Мне нужно реализовать функцию, которая получает Num 0/1, вставить его в матрицу и проверить, есть ли строка/столбец со всеми 1.

вставной должны быть в таком порядке: если матрица выглядит следующим образом:

0 1 0 
1 1 0 
0 0 0 

И мы вводим 1, так что теперь, чтобы матрица выглядеть следующим образом:

1 0 1 
0 1 1 
0 0 0 

Если теперь мы подставим 0, так что матрица выглядит следующим образом:

0 1 0 
1 0 1 
1 0 0 

У меня есть идея сделать правый сдвиг в матрицу, и я возьму время o (n^2).

Есть еще идеи по реализации функции, которая вставляет значение (0/1) и проверяет наличие строки и столбца со всеми 1?

Спасибо!

+0

так в чем вопрос здесь? –

+1

есть более эффективный способ? Может быть, битВектор? – maz

+0

Я сомневаюсь, что это может быть уменьшено дальше от 'O (n^2)', Но давайте надеемся, что у кого-то еще есть лучший вариант предложить вам :) –

ответ

-1

Матрица обычно реализуется в виде массива в памяти, причем каждый (x,y) месте индексированного в x*w + y, где w является ширина массива (x и y с нуля). Печать массива так же просто, как вставка новой строки после каждого w элементов.

Это делает вставку O(n). Просто сдвиньте каждый элемент на одну позицию в массиве.

+0

Общее количество элементов в этом массиве u говорит о 'n^2', не 'n. Таким образом, сложность времени - это не 'O (n)', а 'O (n^2)' из algo, который только что дал –

+0

. Я написал 'n' как длину массива, которая является' N * N' в OP вопрос. Вы правы, это все еще операция «O (N * N)» или «O (N^2)». Каждый элемент в матрице должен быть обновлен. –

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