내 알고리즘 클래스에서 질문이 있는데 해결할 수 없습니다. 질문에 Theres는 정렬 알고리즘이 O(nlogn)
이고 이진 탐색은 O(log n)
입니다. 두 세트는 P
& Q
이고 두 세트가 비 연속적인지 여부를 결정하는 알고리즘을 설계해야합니다.검색 및 정렬을 사용하여 부 집합 집합
답변
O(N)
용액 (두 세트의 정렬 가정) 병합 목록을
- 는 경우, 정보는 두 개의 정렬 된 세트를 병합 끝까지 도달 할 수없는 경우 두 세트에서 두 개의 동일한 원소를 찾는다. 분리형
예 :
a= 1, 4, 6
b= 2, 4, 7
은 이제 =
요소를 설정 병합 된 :1 2 4 4 6 7
설정에는 (A/B) : 이제 1 2 1 2 1 2
우리가 명확하게 두 발로 연속 것을 볼 수 없다 둘 다 서로 다른 두 세트에서 나오므로 분리되지 않습니다.
편집 :
당신의 필요가 세트 간단한 병합 당신에게 그것을 줄 것보다 해체하거나하지 찾을 경우. 당신이 세트에서 두 원소를 찾자 마자 동등한 것이지, 둘 중 하나가 끝날 때까지 도달 할 수 없다면 다른 원소가 떨어져 있지 않다는 말로 귀가한다.
컨테이너 관련 질문. Element[] e=new Element[X];
희망 난 분명 이니로
이class Element{
int i;
int setInfo
}
이제 배열을 선언 : 아래는 점이다.
두 세트 사이에 공통 요소가없는 경우에만 두 세트가 연결되지 않습니다. 나는이 두 세트에 각각 n 개의 원소가 있다고 가정하고있다. 이 알고리즘은 nlog (n) 시간에 공통 요소를 확인합니다. 발견 된 공통 요소가 없으면 두 세트가 서로 떨어져 있음을 의미합니다.
For each element in set "P" search whether that number exist in set "Q".
Time complexity - n*log(n)
Log(n) to search in set Q and this search will be done "n" times.
O (n) 시간마다 검색을 수행 할 수 있도록 세트를 먼저 정렬해야합니다 (다른 O (n log n) 연산). –
검색하기 전에 두 목록을 정렬하면 시간 복잡도는 O (nlogn) + O (nlogn) + O (nlogn) = O (nlogn) [2 정렬 및 하나의 검색]이됩니다. @TedHopp - 바이너리 검색은 O (logn)을 취하고 O (n)보다 선형 검색을 사용하지만 다른 루프가 있기 때문에 O (n^2)가 될 것이므로 O (n) . –
@Ted, 정렬 된 두 배열의 공통 요소 검색이 n 시간 만 걸리는 방법을 설명해 주시겠습니까? – nitinsh99
두 세트가 정렬되었다고 가정하면 올바른 것입니다. 솔루션을 만들려면 병합 알고리즘 대신 병합 알고리즘을 수정하고 두 요소가 같지 않은지 확인하십시오. – iampat
@Trying, 설정 한 번호의 정보를 저장하는 실용적인 접근법을 제공 할 수 있습니까? int 배열을 제공한다는 것은 어떤 컨테이너를 사용할 것입니까? – nitinsh99
@ nitinsh99이 답변을 편집했습니다. – Trying