2017-01-16 37 views
0

this matlab post中,可以找到「循環擦除隨機遊走」向量問題的解。這個問題在於「擦除循環」,意思是:在任何整數重複之間移除整數。平面循環擦除隨機遊走(matlab)

實施例:

v=[3 1 4 6 7 9 1 22 87 33 35 36 37 35 34] becomes [3 1 22 87 33 35 34]. 

一個如何解決與2列的矩陣(平面時)同樣的問題?

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4] should be [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

將下標轉換爲索引,我們鏈接的解決方案? – beaker

+0

我對問題定義有疑問。 (爲了簡潔起見),我們將自己限制在一維向量中,你會期望輸出是用於輸入的[1,2,3,4,3,5,4]。輸出是[1,2,3]還是[1,2,3,5,4]?上面提到的解決方案會導致前者,但輸出後面的IMO更有意義。 – aksadv

回答

0

您在問題中鏈接的線程中的答案之一解決了1-D向量的問題。二維數組可以使用真實想象轉換成一維複數矢量(並返回)到複數變換。因此,以下可能是一個解決方案:

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4]; 
% from your example. note the change in variable name. 

% convert the 2-D array into 1-D using real-imag to complex trasnform 
u = v*[1;i]; 

解瑣碎的修改1-d問題從what's published here

off = false; % Faster to call function FALSE once 
n = length(u); 
use = true(1, n); 
i = 1; 
while i <= n 
    multi = find(u(i:n) == u(i), 1, 'last'); 
    use((i + 1):(i + multi - 1)) = off; 
    i = i + multi; 
end 

最後,選擇從所述輸入矩陣的選擇的行:

v = v(use,:) 
% [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

謝謝。您的2d轉換爲1d複雜格式是找到平面解決方案的一種很好的方式。關於你的第一條評論,預期產出當然是[1,2,3,5,4]。 – sapienz