Symetria macierzy

0

WItam,
Mam macierz zero-jedynkową i muszę sprawdzić czy ta macierz jest symetryczna. Czy istnieje inny sposób niż sprawdzanie po kolei wszystkich rzedow z jednej i drugiej połowy macierzy czy są sobie równe? Szczególnie, że macierz może mieć tylko 2 wartości - 1 i 0 może da się zrobić jakieś cwane założenie?
Pozdrawiam.

0

Musisz sprawdzić wszystkie pola tak czy siak. Nie da się czegoś całkowicie przewidzieć.

Jeśli macierz jest zero jedynkowa to może wystarczy zsumować wiersze i kolumny i porównać (taki mały pomysł który mi przyszedł do głowy, ale może jest poprawny). Będzie szybsze dla dużych macierzy dzięki optymalnemu wykorzystaniu pamięci podręcznej.

0

Dzięki za odpowiedz.
Mam jeszcze jedno pytanie: jak można sprawdzić, czy symetria w macierzy jest rotacyjna? Tzn po dowlnej rotacji macierz będzie wyglądać tak samo?
Pozdrawiam.

0

Skoro macierz może mieć tylko wartości 1 i 0, to możesz zmienić reprezentację tej macierzy. Każde kolejne 32 (64 dla 64-bitowego programu) wiersze grupuj w pojedynczej liczbie całkowitej jako kolejne bity.

Przy takiej reprezentacji można porównywać do 32 (64) wierszy jednocześnie. Jeżeli liczba wierszy nie jest wielokrotnością 32 (64), to będziesz musiał jednak używać masek bitowych.

Takie rozwiązanie będzie dużo szybsze (nawet kilkaset razy jeżeli cała tablica zmieści się w pamięci podręcznej procesora).

Jeżeli natomiast macierz ma bardzo mało 1 lub 0, to możesz dla każdego wiersza pamiętać tylko ich wystąpienia na liście.

0

Żeby po spakowaniu sprawdzanie czy macierz jest symetryczna było szybkie, należałoby najpierw stworzyć dwie kopie macierzy z czego jedną transponowaną i potem sprawdzić czy są identyczne. Wyodrębnianie bitów po kolei z kolumn dla każdego bitu z wiersza nie wydaje mi się dobrym pomysłem. Spakowane bity nie zawsze są szybsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1