키 - 값 구조 쌍을 사용할 시스템을 구현하려고합니다. 그들은 일종의 선형 방식 (즉, 인덱스 될 수 있음)으로 유지되어야하며, 일단 주어진 위치는 움직일 수 없으므로 삽입은 추가 만 할 수 있습니다 (그리고 많은 정렬이 가능하지는 않습니다). 그냥 예를 들어이 마음에 가지고있는 것이다 :선형 레이아웃을 허용하는 빠른 알고리즘/데이터 구조?
키가 검색 될 때, 그것의 인덱스가 캐시 된 후 일정 시간에 액세스 할 수 있도록이 같은 시스템을 설계 한Data list:
0: { "somekey", somevalue }
1: { "someotherkey", someothervalue }
...
n: { "justanotherkey", justanothervalue }
. 이제는 데이터의 순서 나 양을 예측할 방법이 없기 때문에 정렬 할 수 없습니다. 선형 탐색보다 나은 알고리즘이나 데이터 구조에 대한 아이디어가 필요하지만 여전히 제약 조건을 유지해야합니다. 좋아해.
누구나 아이디어가 있습니까? 나는 속도를 많이 낼 수 있을지는 모르겠지만 조금이라도 도움이된다면 내 시스템의 핵심이 될 것입니다. 미리 감사드립니다!
== 편집 ==
(해시 테이블 및 동적 배열과 같은) 두 개의 분리 된 구조를 사용하는 아이디어는 실제로 처음 의도였다. 불행히도 키와 값을 분리 할 수 없기 때문에이 방법은 저에게는 효과가 없습니다. 키는 오류 및 메시지에 사용되므로 색인이 캐시 된 후에도 원래 키에 액세스해야합니다. 기본적으로 배열 구조체 일뿐입니다.
struct Entry {
/* Key is actually a complex struct itself with string, and params */
Key key;
Data* data;
}
왜 색인을 캐시해야합니까? 해시 테이블의 핵심은 O (1) 키를 통해 액세스 권한을 부여하는 것입니다. –
@MikeDunlavey 키는 상당히 복잡합니다 (임의의 길이 문자열 및 설정 배열입니다. 여러 키는 동일한 문자열을 가질 수 있지만 설정에 따라 다릅니다).이 유형의 경우에는 좋은 충돌이 발생하지 않습니다. 사용할 수있는 해시 테이블 알고리즘? – Miguel
글쎄, 내가 할 수있는 것은 단지 큰 긴 키를 가져다가 32 비트 또는 64 비트 체크섬 (또는 아마도 메시지 다이제스트)을 취하는 것과 같이 짧은 것으로 결합하거나 또는 비트의 긴 문자열로 변환하는 것입니다. 또는 긴 문자열. 해시 함수가 원하는 것은 무엇이든간에. 해시를 실행하는 데 필요한주기와 비교할 때 주기적으로 너무 비싸지 않아야하며, 초당 몇 번이나 수행해야하는지에 따라 다릅니다. –