ホームページ >バックエンド開発 >C++ >指定された配列間の対応するインデックスで等しくない要素の数を最小限に抑えます。

指定された配列間の対応するインデックスで等しくない要素の数を最小限に抑えます。

王林
王林転載
2023-08-26 12:57:181265ブラウズ

指定された配列間の対応するインデックスで等しくない要素の数を最小限に抑えます。

各インデックスの要素を比較し、一致するまで調整して、指定された配列間の対応するインデックスにある不一致の要素の数を減らします。同時に配列を反復処理しながら、必要に応じて調整します。配列はより類似するようになり、結果として不等要素の割合が減少します。このプロセスでは、対応する位置での差異を減らすことにより、アレイ間の類似性を高めようとします。最終的な目的は、すべてのインデックスで同じ要素を持つ配列を生成し、不等要素の数を減らすことです。

使用方法

  • ハッシュアプ​​ローチ

  • 並べ替えアプローチ

哈希方法

ハッシュ手法では、配列間でファイルを比較するときに不等コンポーネントの数を減らすために、配列の 1 つのハッシュ テーブルを作成することから始めます。その時点で、モーメント配列を繰り返しながら、ハッシュ テーブル内の各コンポーネントの頻度を調べます。コンポーネントが見つかった場合、それは保持されます。そうでない場合は、ハッシュ テーブルから最も近い調整コンポーネントが代わりに使用されます。このプロセスの結果、対応するインデックスで等しくない要素が少なくなり、両方の配列がより似たものになります。この方法の効率は、平均的な場合と最良の場合の線形時間計算量 O(N) で望ましい類似性を達成できるため、利点があります。

###アルゴリズム###

    最初の配列の各要素はキーとして追加され、その頻度は値としてハッシュ テーブルに追加される必要があります。
  • 2 番目の配列を循環できるようにポインターを設定します。
  • a. 2 番目の配列の各要素がハッシュ テーブルに存在するかどうかを確認します。

b.その場合は、その要素をそのままにしておきます。

指定がない場合、最も近いマッチング中周波数の最低のエピエレメントが検出されます。

d. 2 番目の配列内の既存の要素を最も近いものに変更します。

指が 2 番目の数グループの末尾に到達するまで、ステップ 3 を繰り返し実行します
  • 数の存在により、対応するインデックスの不等要素の数は最低レベルに達する予定です
  • 最初の配列との望ましい類似性が、変更された 2 番目の配列に存在します。
  • ###例### リーリー

    出力
  • リーリー
最大独立集合 (MIS) アプローチ

私たちは、対応するインデックスに含まれる要素の数を最小限に抑えるために、アクティブな規則手法を使用して、特定の数グループ間の最長距離のパブリック サブシーケンス (LCS) を使用しています。差を減らすために、修飾が必要な元素は、LCS に適合するように修飾することによって、数値群間のより高い類似性を確保することによって得られる。パブリックな子シーケンスを共有するこのような動作技術は、不等要素の数を効果的に削減します。

###アルゴリズム###

array1 と array2 という 2 つの配列の長さを、それぞれ m と n に設定します。

両方の配列の要素の考えられるすべての組み合わせの LCS 長を保存するには、サイズ (m 1) x (n 1) の 2D テーブル DP を作成します。

  • 2 つの解決済みの循環を使用して 1 および 2 号グループの各コンポーネントを制御します:

  • DP[i][j] = DP[i-1]を設定します。 [j-1] 現在のリストのコンポーネントが同じ場合は 1。

  • コンポーネントが異なる可能性がある場合は、DP[i-1][j] と DP[i][j-1] の間で最も注目すべき考えられる評価まで DP[i][j] を増分します。
    • LCS を DP[m][n] から DP[0][0] まで逆方向にたどります。
    • 配列 1[i-1] と配列 2[j-1] の要素が引き上げられた場合、配列 1[i-1] の角は DP[i-1][j-1] に移動され、 array1[i-1] は最も長いパブリック子シーケンスに結合されます
  • DP 内の 1 つの尊敬度に応じて、既に空の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。