/ / Potrzebuję algorytmu wyszukiwania macierzy - java, c ++, matrix

Potrzebujący algorytm wyszukiwania macierzowego - java, c ++, matrix

Jestem programistą hobbystycznym w C ++ i Javie. Mam dwuwymiarową tablicę boolowską (16 wierszy, 16 kolumn), której używam do określonego projektu. Zawartość tej tablicy jest okresowo aktualizowana. Niektóre są zmieniane, inne elementy pozostają takie same. W tej chwili tylko skanuję każdy element tablicy, aby wiedzieć, który z nich zaktualizował swoje wartości. Czy istnieje algorytm lub skuteczny sposób, aby to zrobić? Językiem, którego będę używać, jest C ++.

Odpowiedzi:

0 dla odpowiedzi № 1

Ta prosta odpowiedź brzmi: nie ma skutecznegoalgorytm skanowania w macierzy. Możesz nieco poprawić wydajność, stosując bardziej zwarte struktury, takie jak pola bitowe i układ przyjazny dla pamięci podręcznej, ale szczerze mówiąc, nie rozwiązuje to podstawowego problemu.

Problem wynika z faktu, że trzeba spojrzeć na każdą wartość w macierzy, aby znaleźć zmiany.

To, co zrobisz dalej, zależy od tego, jak obliczeniowointensywna jest fałszywa zmiana. Jeśli jest to zmiana o niskim wpływie, po prostu brutalna siła, ponieważ 256 bitów to naprawdę niewiele. Ale jeśli jedna zmiana wyzwala ogromny kosztowny algorytm obliczeniowy, chcesz umieścić wokół niego logikę księgowości. Prostym podejściem jest zapisanie kolejki zmian podczas ich zapisywania, a następnie każdego tiku, sprawdzenie, co należy zrobić.


0 dla odpowiedzi nr 2

Istnieje potężna biblioteka pancernik. Armadillo to wysokiej jakości biblioteka algebry liniowej (matematyka macierzy) dla języka C ++, mająca na celu zachowanie równowagi między szybkością i łatwością użycia.

Podstawową klasą macierzy jest Mat<type>, patrz obsługiwane typy na pancernik.

Mat<unsigned char> powinien zużywać taką samą ilość pamięci jak macierz wartości boolowskich.


#include <iostream>

using  arma::Mat;

int main()
{
Mat<unsigned char> mat; // create your matrix
mat.set_size(16,16); //Set your matrix size

//Index starts from 0
for (auto i=0; i< 16; i++){
for(auto j=0; j<16; j++){
mat(i,j) //search through your elements
}
}
return 0;
}