해시 테이블과 같은 외부 데이터 구조를 사용하지 않고 동일 요소의 두 배열 (예 : 정수)의 교차를 결정하는 알고리즘을 알고 싶습니다 (O (nlogn))?데이터 구조를 사용하지 않고 두 세트의 교차를 찾는 알고리즘
1
A
답변
9
정렬은, 각
소자
배열 반복기를 사용하여 반복 :
if A[iter1] > B[iter2]: increase iter2
else if A[iter1] < B[iter2]: increase iter1
else: element is in intersection, print and increase both iters
정렬은 O(nlogn)
이다 순회는 O(nlogn)
2
- 놓아이를 통해 배열
- 루프 전체
O(n)
이고 상점 매치
뭔가 같은 ... N의
var A = [0...N];
var B = [0...N];
var result = [];
Array.sort(A);
Array.Sort(B);
for(var x=0, y=0; x < N && y < N; x++) {
while(A[x] < B[y] && y < N) {
y++;
}
if(A[x] == B[y]) {
result.push(B[y++]);
}
}
0
사거리는 다양한 크기의 정수
을 감안할 때 n 개의 세트를 설정합니다. 각 세트에는 중복도 포함될 수 있습니다. 모든 세트의 교차점을 찾는 방법. 요소가 모든 세트에 여러 번 나타나면 결과에 여러 번 추가해야합니다.
예를 들어 {1,2,2,3,4} {2,2,3,5,6} {1,3,2,2,6}의 세 세트가 있다고 가정합니다. 주어진 집합의 교집합은 {2,2,3}이어야합니다.
다음은이 문제를 해결하는 효율적인 방법입니다.
- 모든 세트를 정렬하십시오.
- 가장 작은 세트를 가져와 모든 요소와 해당 빈도를지도에 삽입합니다.
- 지도의 각 요소에 대해 다음을 수행하십시오. ... ..a. 요소가 세트에 없으면 무시하십시오. ... ..b. 각 집합에서 요소의 빈도를 찾습니다 (이진 검색 사용). 지도의 주파수보다 작 으면 주파수를 업데이트하십시오. ... ..c. 요소가 모든 세트에서 발견되면 결과에 추가하십시오.
시간 복잡도 : 'n'목록이 있고 목록의 평균 크기는 'm'이어야합니다. 정렬 단계는 O (n * m * log m) 시간 (평균 길이 m 인 n 개의 목록 정렬)을 필요로합니다. 탐색 단계는 O (m * n * log m) 시간이 걸린다. (목록의 각 요소에 대해 로그 m 시간으로 n 개의 목록을 검색합니다). 따라서 전체 시간 복잡도는 O (n m log m)입니다.
보조 공간 :지도를 저장하기위한 공간 (O (m)).
관련 문제
- 1. 데이터 세트의 특정 특성을 찾는 알고리즘
- 2. 프롤로그에서 멤버 함수를 사용하지 않고 두 세트의 교차점 찾기
- 3. 루프를 사용하지 않고 데이터 세트의 다음/이전 라인
- 4. LINQ를 사용하여 동일한 컬렉션의 두 속성간에 교차를 찾는 방법은 무엇입니까?
- 5. Steiner Forest를 찾는 대략적인 알고리즘
- 6. 두 세트의 XPath 교차점
- 7. 어셈블리에서 div를 사용하지 않고 나머지를 찾는 방법
- 8. 두 개의 다른 데이터 세트의 항목 합
- 9. 하나의 SQL 스크립트로 두 세트의 데이터 추출
- 10. R : 중복되는 두 데이터 세트의 연결/할당
- 11. 정규식과 유일한 정규식을 사용하지 않고 * 일치하는 항목을 찾는 알고리즘이 있습니까?
- 12. octree 데이터 구조를 사용하여 인접/인접 큐브를 찾는 방법은 무엇입니까?
- 13. 필드 검색을 사용하지 않고 쿼리 세트의 특정 인스턴스를 제외하는 장고
- 14. 데이터 :: 비교를 사용하지 않고 펄에서 두 개의 해시를 비교하려면 어떻게해야합니까?
- 15. 두 세트의 포인트를 연결하는 최소 비용을 찾는 방법
- 16. C++에서 해시 함수를 사용하여 두 배열의 교차를 찾는 방법은 무엇입니까?
- 17. 통신 "웹"에서 실패 사례를 찾는 알고리즘
- 18. "자주 사용하지 않는"알고리즘 -
- 19. cakephp보기를 사용하지 않고 HABTM 관계의 데이터 저장
- 20. 레일을 사용하지 않고 모델을 사용하지 않고
- 21. 두 번째로 구분 된 데이터 구조를 파싱합니다.
- 22. 두 세트의 3d 점
- 23. 알고리즘 (전이 폐쇄?) 구조를 변환하는
- 24. 엑셀 파일에서 추출한 데이터 세트의 PDF
- 25. 데이터 세트의 데이터 소스를 변경하십시오
- 26. 여러 데이터 세트의 데이터 결합
- 27. 특정 의사 결정 구조를 사용하지 않고 C#에서 숙제를하려면 어떻게해야합니까?
- 28. 경로 찾는 알고리즘 어려움
- 29. 리소스가없는 슬롯을 찾는 알고리즘
- 30. 간격의 교차점을 찾는 알고리즘
CS 알고리즘 숙제? –
힌트 : 먼저 정렬하십시오. – Anycorn
아니요, 인터뷰 질문이었습니다. 면접관은 데이터 구조를 사용하지 않고 해결하도록 요청했습니다. 두 배열을 정렬하면 첫 번째 배열을 스캔하고 두 번째 배열의 이진 탐색을 수행하면 O (nlogn) 시간이됩니다. 이진 검색을 사용하지 않고도이 작업을 수행 할 수 있습니까? – Neel