給定M行的矩陣和N列,並將其分配爲M*N
元素的字節數組(這些元素最初設置爲零),我將根據以下規則修改此矩陣:元素在某個元素的鄰域中發現必須設置爲給定的值。換句話說,給定一個矩陣,我應該設置矩陣的一個區域:爲此,我應該訪問數組中不連續的部分。如何有效地改變矩陣的連續部分?
爲了執行上述操作,我已經獲得以下信息:
- 指針到位於在附近的中心處的元件(該指針時,必須在上述過程中改變操作);這個元素的位置(行和列)也被提供;
- 大小附近(大號始終是一個奇數)的
L*L
。
實現此操作的代碼應儘可能快地在C++中執行:因此,我考慮使用上述指針訪問數組的不同部分。取而代之的是,鄰域的中心元件的位置(行和列)可能允許我檢查所指定的區域是否超過基體的尺寸(例如,該區域的中心可以被設置在矩陣的邊緣) :在這種情況下,我應該只設置位於矩陣中的那部分區域。
int M = ... // number of matrix rows
int N = ... // number of matrix columns
char* centerPtr = ... // pointer to the center of the region
int i = ... // position of the central element
int j = ... // of the region to be modified
char* tempPtr = centerPtr - (N+1)*L/2;
for(int k=0; k < L; k++)
{
memset(tempPtr,value,N);
tempPtr += N;
}
我該如何改進代碼? 如何處理一個區域可能超過矩陣的尺寸的事實? 如何使代碼在執行時間方面更高效?
強制性的問題:你有沒有輪廓,以確認這是一個問題嗎? –
不,但我有興趣查看優化代碼和非優化代碼之間的區別。注意:上面列出的代碼並沒有處理這樣一個事實,即一個區域可能會超出矩陣的維度,因爲我不知道如何使用指針來處理這個問題。 – enzom83
如果您真的想要「儘可能快」的代碼,那麼您可能需要爲將要運行的平臺/設備編寫一些手動優化程序集。我猜這不是你想要的。 –