다양한 데이터 구조의 순위는 적어도 부분적으로 문제 컨텍스트와 연결됩니다. 알고리즘의 시간과 공간 성능을 분석하는 방법을 배우는 데 도움이 될 것입니다. 일반적으로 "big O 표기법"이 사용됩니다. 예를 들어 이진 검색은 O (log n) 시간입니다. 즉, 요소 검색 시간이 요소 수의 로그 (내재적으로 밑이 2 인 경우)임을 의미합니다. 직관적으로, 모든 단계가 나머지 데이터의 절반을 관련이없는 것으로 폐기하므로 요소 수를 두 배로 늘리면 시간이 1 단계 증가합니다. (바이너리 검색은 다소 잘 확장됩니다.) 공간 성능은 더 큰 데이터 세트에 대해 메모리 양이 증가하는 방식과 관련이 있습니다. 또한 big-O 표기법은 상수 인자를 무시합니다. 더 작은 데이터 세트의 경우 O (n ^ 2) 알고리즘이 상수 인자가 더 높은 O (n * log n) 알고리즘보다 여전히 빠를 수 있습니다.
시간과 공간 외에 다른 특성으로는 데이터 구조가 정렬되었는지 여부 (트리 및 스킵리스트가 정렬되고 해시 테이블이 정렬되지 않음), 지속성 (이진 트리가 이전 버전의 포인터를 재사용 할 수 있고 해시 테이블이 제자리에서 수정 됨) 등이 있습니다.
여러 데이터 구조를 비교하려면 여러 데이터 구조의 동작을 배워야하지만 성능이 다른 이유를 이해하는 한 가지 방법은 몇 가지를 면밀히 연구하는 것입니다. 단일 연결 목록, 이진 검색 트리 및 건너 뛰기 목록을 비교하는 것이 좋습니다. 은 모두 비교적 간단하지만 매우 다른 특성을 가지고 있습니다. 값을 찾고, 새 값을 추가하고, 모든 값을 순서대로 찾는 데 얼마나 많은 작업이 필요한지 생각해보십시오.
사람들이 추천하는 알고리즘 / 데이터 구조 성능 분석에 대한 다양한 텍스트가 있지만, 제가 실제로 이해하게 된 것은 OCaml을 배우는 것입니다. 복잡한 데이터 구조를 다루는 것은 ML의 강점이며 C 에서처럼 포인터와 메모리 관리를 피할 수있을 때 그 동작이 훨씬 더 명확 해집니다. (데이터 구조를 이해하기 위해 OCaml을 배우는 것은 거의 확실합니다. :))