首頁  >  文章  >  後端開發  >  將給定數組之間對應索引處的不相等元素的數量最小化

將給定數組之間對應索引處的不相等元素的數量最小化

王林
王林轉載
2023-08-26 12:57:181225瀏覽

將給定數組之間對應索引處的不相等元素的數量最小化

比較每個索引處的元素並調整它們直到它們匹配,以減少給定數組之間相應索引處不一致元素的數量。根據需要進行調整,同時迭​​代數組。數組將變得更加相似,並且不相等元素的比例將因此減少。透過減少它們在相應位置的差異,該過程旨在增加陣列之間的相似性。最終目標是產生每個索引處具有相同元素的數組,這將減少不相等元素的數量。

使用的方法

  • 雜湊方法

  • 排序方法

哈希方法

在雜湊方法中,我們首先為其中一個數組建立一個散列表,以便在比較數組之間的檔案時減少不相等分量的數量。此時,當我們重複矩數組時,我們會查看雜湊表中每個組件的頻率。如果找到該組件,則將其保留;如果不是,則使用哈希表中最接近的協調組件來代替它。此過程的結果是,相應索引處的不相等元素較少,並且兩個陣列變得更加相似。此方法的效率是一個優勢,因為它可以在平均情況和最佳情況下實現線性時間複雜度 O(N) 所需的相似性。

演算法

  • 第一個數組的每個元素都應作為鍵添加,其頻率作為值添加到哈希表中。

  • 設定一個指針,以便可以循環存取第二個數組。

# ###A。確定第二個數組中的每個元素是否存在於雜湊表中。

b。如果是這樣,請保留該元素。

如果沒有的話,找到最接近的匹配項中頻率最低的哈希表元素。

d。將第二個數組中的現有元素變更為最接近的匹配項。

  • 直到指標到達第二個基地台的,重複步驟3重新執行

  • 由於倉庫的存在,相應索引處的不確定元素數量現在將達到最低水平

  • 與第一個陣列所需的相似性存在於修改後的第二個陣列中。

  • ###例### 雷雷
輸出

雷雷

最大獨立集合(MIS)方法

我們使用動態規劃方法來尋找給定陣列之間的公共最終子序列(LCS),以最小化對應索引處不符合元素的數量。為了追蹤兩個陣列中所有可能排列的元素的LCS長度修改,我們創建了一個二維表。為了減少差異,需要改變的元素可以透過回溯LCS來找到。透過LCS之外的元素以匹配LCS,確保陣列之間更高的相似度。透過最佳化陣列以共享一個公共子序列,這種動態規劃技術有效地降低了無法滿足元素的數量。

演算法

將兩個陣列(稱為 array1 和 array2)的長度分別設為 m 和 n。
  • 要儲存兩個陣列中所有可能的元素組合的 LCS 長度,請建立一個大小為 (m 1) x (n 1) 的 2D 表 DP。
  • 使用兩個已解決的循環來強調1和2號集群中的每個元件:
  • 設定 DP[i][j] = DP[i-1]。 [j-1] 如果目前清單上的組件相同,則為 1。
    • 如果元件發生變化,請將 DP[i][j] 增加到 DP[i-1][j] 和 DP[i][j-1] 之間最值得注意的可能值。
    • 從 DP[m][n] 向後跟隨 LCS 到 DP[0][0]:
  • 如果array1[i-1]和array2[j-1]的元素被提升了,將array1[i-1]的紫色移到DP[i-1][j-1]放置array1 [i-1]合併到最後一個公共子序列中
    • 根據DP中哪個尊重度較高,移動到已清空的DP[i][j-1]或向上移動到DP[i-1][j](如果它們發生了變化)

    • 回溯 LCS 後,必須更改兩個陣列中 LCS 以外的元素以符合 LCS,以減少不相等元素的數量。
  • 調整後的陣列的相似度會增加,比較列表時不等分量的數量會減少。

Example

#include <iostream>
#include <vector>
using namespace std;

vector<int> findLCS(vector<int>& array1, vector<int>& array2) {
   return {};
}

int minimizeUnequalCount(vector<int>& array1, vector<int>& array2) {
   return 0;
}

void modifyArrays(vector<int>& array1, vector<int>& array2) {
}

int main() {
   vector<int> array1 = {1, 3, 5, 7, 9};
   vector<int> array2 = {2, 4, 5, 8, 9};

   vector<int> lcs = findLCS(array1, array2);
   cout << "Longest Common Subsequence: ";
   for (int num : lcs) {
      cout << num << " ";
   }
   cout << endl;

   int unequalCount = minimizeUnequalCount(array1, array2);
   cout << "Count of Unequal Elements after adjustment: " << unequalCount << endl;

   modifyArrays(array1, array2);
   cout << "Modified Array 1: ";
   for (int num : array1) {
      cout << num << " ";
   }
   cout << endl;

   cout << "Modified Array 2: ";
   for (int num : array2) {
      cout << num << " ";
   }
   cout << endl;

   return 0;
}

输出

Longest Common Subsequence: 
Count of Unequal Elements after adjustment: 0
Modified Array 1: 1 3 5 7 9 
Modified Array 2: 2 4 5 8 9 

Conclusion

有两种技术可用于减少两个给定数组之间对应索引处不相等元素的数量:哈希方法和排序方法。哈希方法为一个数组构建哈希表,并迭代地用哈希表中找到的最接近的匹配替换另一个数组中的元素。对于平均和最佳情况,这将实现O(N)的线性时间复杂度。另一方面,排序方法在迭代两个数组时按升序对它们进行排序,并将元素调整为较小的值。尽管它可能不总是产生最佳结果,但它使数组更具可比性。这两种方法都成功地减少了不一致元素的数量,增加了数组的相似性,并降低了对应位置的不一致元素的总数。

以上是將給定數組之間對應索引處的不相等元素的數量最小化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除