[英]In need of a matrix search algorithm
我是C ++和Java的業余程序員。 我有一個用於特定項目的二維布爾數組(16行,16列)。 該數組的內容會定期更新。 有些正在更改,其他元素保持不變。 目前,我只是在掃描數組的每個元素,以便讓我知道其中的哪個更新了它們的值。 我是否有算法或有效的方式來做到這一點? 我將使用的語言是C ++。
這個簡單的答案是,沒有有效的算法可以掃描矩陣。 您可以通過使用更緊湊的結構(例如位字段和緩存友好的布局)來稍微提高性能,但是老實說,它不能解決潛在的問題。
問題來自以下事實:您需要查看矩陣中的每個值以查找更改。
接下來的操作取決於錯誤更改的計算強度。 如果影響很小,那么只需蠻力就行了,因為256位的確不是那么多。 但是,如果一項變更觸發了龐大的計算昂貴的算法,則您需要圍繞它添加一些簿記邏輯。 一種簡單的方法是在編寫更改時記錄更改隊列,然后在每次打勾時查看需要完成的操作。
有一個功能強大的圖書館犰狳 。 Armadillo是用於C ++語言的高質量線性代數庫(矩陣數學),旨在在速度和易用性之間取得良好的平衡。
根矩陣類是Mat<type>
,請參閱armadillo上支持的類型。
Mat<unsigned char>
應該消耗與布爾值矩陣相同的內存量。
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.