>Java >java지도 시간 >내장된 설정 기능을 사용하지 않고 대형 어레이에 대한 중복 제거 알고리즘을 어떻게 최적화할 수 있습니까?

내장된 설정 기능을 사용하지 않고 대형 어레이에 대한 중복 제거 알고리즘을 어떻게 최적화할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 03:41:15478검색

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);
}

결과로 생성되는 고유 값 세트에는 고유한 요소만 포함됩니다.

요소 순서 유지:

요소의 원래 순서를 유지하는 것이 중요한 경우 제공된 버전의 수정된 버전 알고리즘을 사용할 수 있습니다:

// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.