2013-11-27 3 views
0

저는 실제 시뮬레이션을 코딩하고 있습니다. 동일한 요소 (homebaked struct)의 두 벡터를 잘 사용하고 있습니다. 내 컴퓨터를 결정적으로 늦추는 데 필요한 것은 vec1에서 vec2에 포함 된 모든 요소를 ​​제거하려고 할 때입니다 (vec2에서이 요소의 각 복사본이 여러 개있을 수 있음). 현재 구현은 복잡성 크기로 실행됩니다. vec1) * size (vec2)하지만 알고리즘을 정렬하는 데 그리 멀지 않은 것처럼 보입니다. 누군가가 이미 훨씬 빠르게 (N.log (N)) 작업을 완료했을 수도 있습니다. 당신은 들었거나 조작 된 것을 모두 들었습니까?벡터의 모든 요소를 ​​다른 요소에서 제거하는 빠른 (est) 방법

+3

'std :: set_difference'가해야합니다. – chris

+1

... 정렬 된 벡터에. – jrok

+0

@jrok, 예, 막 추가하려고했습니다. 그것은 필요할 때마다 효율적으로 정렬 할 수 있는지 여부에 달려 있습니다. 게다가'v1'에 2 개의 1이 있고'v2'에 1이 있으면 결과는 1이됩니다. – chris

답변

0

벡터가 정렬되지 않은 경우 어떤 경우에도 복잡도는 O (m * n)과 같습니다. 여기서 m과 n은 벡터의 크기입니다.

0

벡터 자체를 정렬하는 것은 항목이 해시 가능 인 경우 달성 할 수있는 것보다 느립니다. 벡터 중 하나에서 해시 테이블을 만든 후 다른 벡터에서 항목을 검색하려면 (N + M)이 필요합니다.

관련 문제