마지막 n 개의 고유 번호를 순서대로 기억하고 싶습니다. 의 말을하자 N 내가 6을 추가하는 경우 = 4알고리즘 : 마지막 n 개의 고유 번호를 순서대로 기억하십시오.
내 현재 목록이 5 3 4 2
, 그것은 3 4 2 6
로 바뀝니다 : 여기
5 4 2 3
으로 바뀝니다. 여기서 3은 앞쪽으로 이동합니다.
나는 이렇게 할 것이다 : 대기열에 숫자를 저장하십시오. 새 번호를 추가 할 때 해당 번호의 대기열을 검색하십시오. 번호를 찾지 못하면 끝에있는 번호를 튕겨 앞면에있는 새 번호를 누릅니다. 번호가 발견되면 해당 위치의 번호를 제거한 다음 새 번호를 앞에 밉니다.
분명히 대기열 작업 (예 : C++의 std::deque
)에 최적화 된 대기열의 임의 위치에서 숫자를 제거하는 작업은 상당히 느립니다. 연결된 목록을 사용하면 목록을 검색하는 속도가 느려집니다. 이런 종류의 작업을 수행하기 위해 알고리즘 + 데이터 구조의 더 나은 조합이 있습니까?
아무런 차이가 없으면 "마지막 n 개의 고유 번호를 순서대로 기억하고 있습니다." 필자는 특별히 추가시 목록에서 제거 된 요소가 무엇인지 알아야합니다.
vector/queue/list가 가장 좋을지 모르겠다. 프로파일 링을 시도 했습니까? 또한 'n'은 항상 ~ 30보다 작을 것입니까? 또한 주문이 중요합니까? –
목록을 통한 검색 속도가 느린 이유는 무엇입니까? – xvatar
이 숙제가 있습니까? – JustinDanielson