2008-08-18 3 views
2

쿼리 할 수있는 데이터 구조가 필요합니다 마지막으로 얼마나 많은 항목이 x입니다. 항목은 단순한 식별자 또는보다 복잡한 데이터 구조 일 수 있습니다. 항목의 타임 스탬프는 바깥쪽에 저장되는 것이 아니라 해시 또는 이와 유사한 것으로 동일한 항목을 갖는 여러 항목에 문제가없는 것이 좋습니다 타임 스탬프).C#의 에이징 데이터 구조

지금까지 LINQ를 사용하면 주어진 시간보다 큰 타임 스탬프로 항목을 쉽게 필터링하고 개수를 집계 할 수있었습니다. 아직 .NET 3.5 환경을 제작 환경에 적용하는 것을 주저하고 있습니다. 유사한 데이터 구조에 대한 다른 제안이 있습니까?

관심있는 다른 부분은 노화 오래된 데이터가 밖으로 나왔습니다. 6 시간 미만의 항목 수만 묻는다면 제거 할 항목보다 오래된 것이 필요합니다. 내 데이터 구조는 장기 실행 프로그램 일 수 있기 때문에.

답변

3

간단한 연결 목록을 사용할 수 있습니다.

기본적으로 새 항목을 끝에 추가하고 처음부터 너무 오래된 항목을 제거하면 값싼 데이터 구조입니다.

예제 코드 :

list.push_end(new_data) 
while list.head.age >= age_limit: 
    list.pop_head() 

, 가지 치기를 할 수있는 트리 구조 또는 유사한 것을 사용 목록 그때 dmo에 동의, 한 번에 하나의보다 큰 부분을 잘라내는 보증 할만큼 바쁜 경우 높은 수준.

2

중요한 고려 사항은 쿼리/추가/삭제 빈도입니다. 당신은 어떤 스레드가 통과하고 주기적으로이 나무를 정리 할 수 ​​

http://en.wikipedia.org/wiki/B-tree

: (컬렉션이 큰 것, 특히 경우) 자주 질의를 할 것입니다 경우 B-나무가 갈 수있는 방법이 될 수 있습니다 검색의 일부로 사용하십시오 (사용법에 따라 다름). 기본적으로 트리 검색을 수행하여 "x 분 전"의 위치를 ​​찾은 다음 노드에있는 새 자녀 수를 계산합니다. 노드 아래에있는 자식 수를 최신으로 유지하면이 합계를 빠르게 수행 할 수 있습니다.