내 알고리즘 클래스에서 정수 목록의 중복을 제거하고 최대한 낮은 복잡도로 촬영하는 알고리즘을 사용해야합니다. 내 알고리즘에서, 중복 된 정수를 볼 때 for 루프를 사용하여 복제 된 요소를 삭제하기 위해 그 정수 다음에있는 모든 요소를 하나의 인덱스로 이동합니다. like :memmove는 (for-loop와 같은 방식으로) 요소를 시프트합니까? 아니면 전체 메모리 블록을 한 번에 잡아낼 수 있습니까?
내 알고리즘이 memmove를 사용하는 것이 더 효율적입니까? 또한 알고리즘을 설계하는 것이 내 직업이라면, memmove를 사용하여 알고리즘의 복잡성을 낮추면 memmove를 '부정 행위'로 보일 수 있습니까?
선형 복잡성이 될 것입니다. 'memmove' *가 빠를 수도 있지만 다시는 그렇지 않을 수도 있습니다. 가장 일반적인 컴퓨터에서 메모리 대역폭이 주요 병목 지점이되므로 가장 단순한 코드와 가장 신중하게 최적화 된 것의 차이는 15 ~ * 20 %입니다. –
C++에서 'memmove'대신 'std :: move'를 사용하십시오. 그러나 어느 것도이 문제에 대해 최적이 아닙니다. –
집중해야하는 알고리즘은 항목이 모두 이동 된 횟수를 최소화하는 알고리즘입니다. 모든 다른 요소 (또는 더 나쁜 요소, 모든 요소)가 * 같은 * 값인 데이터 세트로 제시하는 것을 상상해보십시오. 출력에 포함되지 않아야하는 요소를 이동하면 첫 번째 결과가 나오고이를 최소화하면이 연습의 요점입니다. (저것과 알맞은 양의 포인터 걷기). – WhozCraig