개체를 삽입 할 때 정렬 된 개체 목록을 조회수로 추적하여 해결할 수있었습니다. 따라서 항상 N 개의 인기 히트 곡 목록이 있습니다. 이 3,000,000 개체는 다음과 나는 여기에 상위 20
을 갖고 싶어 내가 사용하는 구조입니다 :
unordered_map<string, int> key_hit;
:
key_hit
이 (키 문자열, 내가 객체를 의미)를 히트를 추적 할 수는
두 개의 배열 : hits[N]
, keys[N]
(상위 히트와 해당 키 (개체) 포함).
unordered_map<string,int> key_idx;
알고리즘 (상세 없이도) :
idx, hits, keys
0, 212, x
1, 200, y
...
N, 12, z
다른지도 key_idx
키 및 해당 인덱스를 유지
key
가 입력된다.
key
을 key_hit
으로 검색하면 해당 횟수와 증가분 (이 값은 충분히 빠름)을 찾습니다.
hit<hits[N]
인 경우 무시하십시오. 다른
- ,
idx=key_idx[key]
, (발견되지 않는 경우는, 구조에 추가하고 기존 하나를 삭제합니다. 너무 오래 모든 세부 사항을 작성하는)는 위의 항목 h[idx-1]<H
보다 큰지 여부를
H=h[idx]++
- 확인하시기 바랍니다. 예인 경우
key_idx
, hits
, keys
에 idx 및 idx-1을 바꿔 넣으십시오.
나는 그것을 빨리 만들려고 노력했다. 하지만 얼마나 빠르지는 모르겠다.
특정 언어를 언급하고 있습니까? –
예, 코드는 C++입니다. – Yasser