ホームページ >Java >&#&チュートリアル >組み込みの集合関数を使用せずに、大規模な配列の重複削除アルゴリズムを最適化するにはどうすればよいでしょうか?

組み込みの集合関数を使用せずに、大規模な配列の重複削除アルゴリズムを最適化するにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 03:41:15546ブラウズ

How Can We Optimize a Duplicate Removal Algorithm for Large Arrays Without Using Built-in Set Functions?

配列からの重複削除アルゴリズムの最適化

提供されたコードは、Set などの組み込みツールを利用せずに配列から重複値を削除することを目的としています。またはイテレータ。ただし、多数の要素を処理する場合、パフォーマンスのボトルネックに直面します。この問題は、各要素が後続のすべての要素と比較される入れ子のループ構造に起因します。

アルゴリズムの効率を高めるには、次の最適化戦略を検討してください。

HashSet:

タスクは Set または HashSet の使用を明示的に禁止していますが、 HashSet は、重複を排除するための効率的なソリューションを提供します。その実装ではハッシュ テーブルを使用して各要素の存在を追跡し、定数時間の検索と挿入を可能にします。

Set<Integer> uniqueValues = new HashSet<>();

for (int num : arr) {
    uniqueValues.add(num);
}

結果の uniqueValues Set には個別の要素のみが含まれます。

要素の順序の保持:

要素の元の順序を保持することが重要な場合は、提供されたアルゴリズムを使用できます:

// Create a boolean array to track duplicates
boolean[] duplicates = new boolean[arr.length];

// Find and mark duplicates in the first iteration
for (int i = 0; i < arr.length; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
            duplicates[j] = true;
        }
    }
}

// Create a new array to store unique values
int[] uniqueArr = new int[arr.length - duplicates.length];
int uniqueIndex = 0;

// Copy unique values into the new array
for (int i = 0; i < arr.length; i++) {
    if (!duplicates[i]) {
        uniqueArr[uniqueIndex++] = arr[i];
    }
}

return uniqueArr;

このアルゴリズムは、元の要素の順序を維持しながら O(n²) の時間計算量を達成します。

以上が組み込みの集合関数を使用せずに、大規模な配列の重複削除アルゴリズムを最適化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。