簡體   English   中英

在矩陣中定位相鄰元素的有效方法

[英]Efficient method of locating adjacent elements in a matrix

我正在嘗試編寫一些代碼來定位與矩陣中給定條目正交的元素。 輸出需要包括元素本身是什么,它們的索引以及算法也需要為邊緣工作。 例如,考慮

A = [ 1 2 5 6 7
      2 3 1 6 9
      3 6 7 8 1 ] 

然后,如果我想要與條目(2,2)相鄰的元素,代碼將返回:

    [2,2,1,6] %-> these elements are orthogonal to entry (2,2)
    [w,x,y,z] %-> where w,x,y,z correspond to the index of the orthogonal entries 
                 %found (they can be linear indices or otherwise).

因此,我實現了自己的功能來做到這一點,並且很好,我意識到它相當糟糕。 它似乎不能始終如一地工作在邊緣上(盡管我可以嘗試填充矩陣並查看是否可以解決問題-我還沒有機會),而且重要的是,我的代碼遍歷了整個怪異的矩陣。 因此,它的效率很低。 我想知道是否有人可以快速,有效地完成上面概述的工作? MATLAB似乎沒有執行此操作的功能-我已經檢查過了。

非常感謝您的幫助。

for(int i = row-1; i <= row+1; i += 2) {
    for(int j = col-1; j <= col+1; j += 2) {
        if(row>=0 && col>=0 && row < MATRIX_SIZE && col < MATRIX_SIZE)
            std::cout << mat[row, col];
    }
}

在c ++中的示例中。 輸出不會很清楚,但這只是一個例子。 在編程時,假設矩陣中的行/列從0(不是1)開始,因此在您的示例中,您給出的解決方案將適合輸入(1,1)而不適合(2,2)。 運行時間當然是O(1)

row =給定的行參數(例如1)

col =給定的列參數(例如也為1)

MATRIX_SIZE =矩陣的大小:如果矩陣為nxn,則MATRIX_SIZE = n,並且矩陣每行/列的最后一個索引為n-1。

如果您的2D矩陣包含Wdt列和Hgt行,則第k個元素的鄰居的索引為

top = k - Wdt        // if k > Wdt
bottom = k + Wdt     // if k <= Wdt * Hgt - Wdt  
right = k + 1        // if (k - 1) mod Wdt > 0
left = k - 1         // if (k - 1) mod Wdt < Wdt - 1

if表達式旨在排除邊緣元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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