다양한 데이터 구조의 실제 사용 [닫기]


102

데이터 구조에 대해 많은 이야기가 있지만, 데이터 구조와 실제 사용에 대한 간단한 목록을 찾을 수 없습니다. 나는 인터뷰를 위해 공부하려고 노력하고 있는데 이것이 다른 많은 사람들과 함께 저를 도울 것이라고 생각합니다. 다음과 같은 것을 찾고 있습니다.

데이터 구조-예 / 사용

해시 테이블-빠른 데이터 조회 ... 예제 제공

어레이-...

이진 트리-...

어딘가에 이와 같은 리소스가 있으면 알려주십시오.

감사!

편집 : 위키피디아는 훌륭하지만 대부분의 페이지에서 실제로 실용적인 용도를 나열하지 않습니다. 그 이상의 것을 찾고 있습니다.

답변:


96

이전에 StackOverflow에서 비슷한 질문에서 목록을 찾았습니다.

해시 테이블-빠른 데이터 조회에 사용-컴파일러, 데이터베이스 인덱싱, 캐시, 고유 데이터 표현을위한 기호 테이블.

Trie-자동 완성 및 맞춤법 검사를 위해 휴대폰에서 찾은 것과 같은 사전입니다.

접미사 트리-대부분의 워드 프로세서에서 사용되는 빠른 전체 텍스트 검색.

스택-워드 프로세서의 실행 취소 / 다시 실행, 표현식 평가 및 구문 분석, JVM과 같은 많은 가상 머신은 스택 지향적입니다.

큐-다양한 엔터티가 저장되고 나중에 처리 될 수 있도록 보관되는 전송 및 작업 연구, 즉 큐가 버퍼의 기능을 수행합니다.

우선 순위 큐-커널에서 프로세스 스케줄링

트리-파서, 파일 시스템

기수 트리-IP 라우팅 테이블

BSP 트리-3D 컴퓨터 그래픽

그래프-소셜 네트워킹 사이트의 연결 / 관계, 라우팅, 통신 네트워크, 데이터 구성 등

힙-lisp의 동적 메모리 할당

이것은 RV Pradeep이 처음 게시 한 답변입니다.

기타 덜 유용한 링크 :

응용 프로그램은 일부 데이터 구조에 대해서만 나열됩니다.

적절한 요약 및 관련성에 의해 애플리케이션 중심이 아님


1
첫 번째 링크가 깨진
댄 보리에게

@DanBeaulieu 감사합니다. 죽은 링크를 제거했습니다.
MXMLLN 2015

1
아주 좋은 요약입니다. 아마도 사용 목록은 끝나지 않지만 요점은 알 수 있습니다.
Nick L.

1
실행 취소 / 다시 실행이 실제로 스택이 될까요? 실행 취소가 스택 상단에서 튀어 나오면 다시 실행할 수 없습니다.
Tony L.

5
@TonyL. 나는 이것이 오래된 질문이라는 것을 알고 있지만 2 스택이 사용되거나 실행 취소 / 다시 실행이라고 생각합니다. 작업을 실행 취소하면 작업 스택에서 튀어 나와 다시 실행 스택에 배치됩니다. 다시 실행하면 다시 실행 스택에서 꺼내서 작업 스택으로 푸시합니다. 용어가 잘못되었을 수 있지만 거기에 예가 있어야합니다.
Rick Henderson

14

나는 당신과 같은 배에 있습니다. 기술 인터뷰를 위해 공부해야하는데 목록을 외우는 것은별로 도움이되지 않습니다. 3-4 시간의 여유가 있고 더 깊이 다이빙을하고 싶다면 체크 아웃을 추천합니다.

mycodeschool
저는 Coursera와 블로그 및 교과서와 같은 기타 리소스를 살펴 봤지만, 충분히 포괄적이지 않거나 스펙트럼의 반대쪽 끝에서 필수 컴퓨터 과학 용어로 너무 조밀하다는 것을 발견했습니다.

비디오의 친구는 데이터 구조에 대한 많은 강의를 가지고 있습니다. 어리석은 그림이나 약간의 악센트는 신경 쓰지 마십시오. 선택할 데이터 구조뿐만 아니라 사람들이 데이터 구조에 대해 생각할 때 고려해야 할 몇 가지 다른 사항을 이해해야합니다.

  • 공통 데이터 구조의 장단점
  • 각 데이터 구조가 존재하는 이유
  • 실제로 메모리에서 어떻게 작동하는지
  • 특정 질문 / 연습 및 효율성 극대화를 위해 사용할 구조 결정
  • lucid Big 0 설명

관심이 있으시면 github에 메모를 게시했습니다.


7

내 이해에 따르면 데이터 구조는 효율적으로 관리 할 수있는 모든 전자 시스템의 메모리에 상주하는 데이터입니다. 많은 경우 메모리 게임이거나 데이터에 대한 더 빠른 접근성입니다. 메모리 측면에서도 최종 제품의 회사에 대한 비용을 기준으로 데이터 관리와 관련된 절충안이 있습니다. 효율적인 관리는 최종 제품의 기본 요구 사항을 기반으로 데이터에 가장 잘 액세스 할 수있는 방법을 알려줍니다. 이것은 매우 높은 수준의 설명이지만 데이터 구조는 방대한 주제입니다. 대부분의 면접관은 연결 목록 및 관련 주제 인 시간에 따라 면접에서 토론 할 수있는 데이터 구조에 대해 알아 봅니다.

이제 이러한 데이터 유형은 논리적으로 구성되고 액세스되는 방식에 따라 기본, 추상, 복합으로 나눌 수 있습니다.

  • 프리미티브 데이터 구조 는 모든 데이터 구조에 대한 기본 빌딩 블록이며, boolean, char, int, float, double, string과 같은 연속 메모리를 가지고 있습니다.
  • 복합 데이터 구조 는 둘 이상의 기본 데이터 유형 (클래스, 구조, 공용체, 배열 / 레코드)으로 구성된 데이터 구조입니다.
  • 추상 데이터 유형 은 알고리즘이라고하는 효율적으로 액세스 할 수있는 복합 데이터 유형입니다. 데이터에 액세스하는 방식에 따라 데이터 구조는 선형 및 비선형 데이터 유형으로 나뉩니다. 연결된 목록, 스택, 대기열 등은 선형 데이터 유형입니다. 힙, 이진 트리 및 해시 테이블 등은 비선형 데이터 유형입니다.

이 정보가 여러분의 참여에 도움이되기를 바랍니다.


6

훌륭한 책 " 알고리즘 디자인 매뉴얼"Skienna 에는 알고리즘 및 데이터 구조의 방대한 저장소가 포함되어 있습니다.

수많은 문제에 대해 데이터 구조와 알고리즘이 설명, 비교 및 ​​실제 사용에 대해 논의됩니다. 저자는 또한 구현 및 원본 연구 논문에 대한 참조를 제공합니다.

이 책은 문제를 해결하기위한 최상의 데이터 구조를 검색하는 경우 책상에 두는 것이 좋습니다. 면접 준비에도 도움이됩니다.

또 다른 훌륭한 리소스는 NIST 데이터 구조 및 알고리즘 사전입니다 .


4

데이터 구조의 실용적 적용

Red-Black Trees (삽입 / 삭제가 빈번하고 검색이 적을 때 사용)-Red Black Tree를 이용한 K-mean Clustering, Databases, Simple-minded Database, 사전 내 단어 검색, Web 검색

AVL 트리 (검색은 많고 삽입 / 삭제는 적음)-데이터 분석 및 데이터 마이닝과 더 많은 검색이 필요한 애플리케이션

최소 힙-클러스터링 알고리즘


3

다양한 데이터 구조의 순위는 적어도 부분적으로 문제 컨텍스트와 연결됩니다. 알고리즘의 시간과 공간 성능을 분석하는 방법을 배우는 데 도움이 될 것입니다. 일반적으로 "big O 표기법"이 사용됩니다. 예를 들어 이진 검색은 O (log n) 시간입니다. 즉, 요소 ​​검색 시간이 요소 수의 로그 (내재적으로 밑이 2 인 경우)임을 의미합니다. 직관적으로, 모든 단계가 나머지 데이터의 절반을 관련이없는 것으로 폐기하므로 요소 수를 두 배로 늘리면 시간이 1 단계 증가합니다. (바이너리 검색은 다소 잘 확장됩니다.) 공간 성능은 더 큰 데이터 세트에 대해 메모리 양이 증가하는 방식과 관련이 있습니다. 또한 big-O 표기법은 상수 인자를 무시합니다. 더 작은 데이터 세트의 경우 O (n ^ 2) 알고리즘이 상수 인자가 더 높은 O (n * log n) 알고리즘보다 여전히 빠를 수 있습니다.

시간과 공간 외에 다른 특성으로는 데이터 구조가 정렬되었는지 여부 (트리 및 스킵리스트가 정렬되고 해시 테이블이 정렬되지 않음), 지속성 (이진 트리가 이전 버전의 포인터를 재사용 할 수 있고 해시 테이블이 제자리에서 수정 됨) 등이 있습니다.

여러 데이터 구조를 비교하려면 여러 데이터 구조의 동작을 배워야하지만 성능이 다른 이유를 이해하는 한 가지 방법은 몇 가지를 면밀히 연구하는 것입니다. 단일 연결 목록, 이진 검색 트리 및 건너 뛰기 목록을 비교하는 것이 좋습니다. 은 모두 비교적 간단하지만 매우 다른 특성을 가지고 있습니다. 값을 찾고, 새 값을 추가하고, 모든 값을 순서대로 찾는 데 얼마나 많은 작업이 필요한지 생각해보십시오.

사람들이 추천하는 알고리즘 / 데이터 구조 성능 분석에 대한 다양한 텍스트가 있지만, 제가 실제로 이해하게 된 것은 OCaml을 배우는 것입니다. 복잡한 데이터 구조를 다루는 것은 ML의 강점이며 C 에서처럼 포인터와 메모리 관리를 피할 수있을 때 그 동작이 훨씬 더 명확 해집니다. (데이터 구조를 이해하기 위해 OCaml을 배우는 것은 거의 확실합니다. :))

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.