簡體   English   中英

需要矩陣搜索算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM