2017-07-23 17 views
0

假設我們有兩個陣列: 陣列a1和陣列a2。將陣列元素與其他陣列進行比較後,最有效的方法

'a1'和'a2'的相似之處在於它們都具有相同的大小和相同的元素,但元素不以相同的順序出現。

將兩個數組進行比較並找出使數組'a1'與'a2'的順序相同所需的最小交換次數的最有效方法是什麼?

例如:

int a1[5] = { 1, 2, 3, 4, 5}; 
int a2[5] = { 2, 3, 1, 5, 4}; 

因此需要互換的最小數目爲:3

在步驟:

交換1:A1 [0] < - > A1 [1]

交換2:A1 [1] < - > A1 [2]

交換3:A1 [ 3] < - > A1 [4]

所以,最後A1將包含{2,3,1,5,4}

+3

這是一種homewo的RK? – Rabbid76

+0

數字是從1到n的整數嗎? –

+1

這是已知的算法:[Levenshtein距離](https://en.wikipedia.org/wiki/Levenshtein_distance)。雖然它更通用一些。我不知道你的限制是否可以改善,或者如果你的限制有更快的限制。 – bolov

回答

0
int numofchanges = 0; 
for(int i = 0; i < sizeOfArrays; i++) 
{ 
    int arr3[] = arr1; 
    for(int n = 0; n < sizeOfArrays; n++) 
    { 
     arr3[i] = arr1[n]; 
     if(arr3[i] == arr2[i]) 
     { 
      int tmp = arr1[i]; 
      arr1[i] = arr1[n]; 
      arr1[n] = tmp; 
      numofchanges++; 
     } 
    } 
} 

WARRNING這不會運行是一樣的東西僞代碼

變量numofchanges將舉行更改的數量和ARR1現在將ARR2

我希望這是有幫助的