데이터 구조

Data structure
해시 테이블로 알려진 데이터 구조.

컴퓨터 과학에서 데이터 구조는 데이터 조직, 관리, 저장 형식으로서 효율적인 접근과 수정을 가능하게 한다.[1][2][3]더 정확히 말하면, 데이터 구조는 데이터 값, 그 사이의 관계, 그리고 데이터에 적용할 수 있는 기능이나 연산의 집합체,[4]데이터에 관한 대수적 구조다.

사용법

데이터 구조는 추상 데이터 유형(ADT)의 기초가 된다.ADT는 데이터 유형의 논리적 형식을 정의한다.데이터 구조는 데이터 유형의 물리적 형태를 구현한다.[5]

다른 유형의 데이터 구조는 다른 종류의 애플리케이션에 적합하며, 일부는 특정 작업에 매우 전문화되어 있다.예를 들어, 관계형 데이터베이스는 일반적으로 데이터 검색에 B-트리 인덱스를 사용하는 반면, 컴파일러 구현은 보통 식별자를 검색하기 위해 해시 테이블을 사용한다.[6][7]

데이터 구조는 대용량 데이터베이스와 인터넷 인덱싱 서비스와 같은 용도에 대해 대량의 데이터를 효율적으로 관리할 수 있는 수단을 제공한다.일반적으로 효율적인 데이터 구조는 효율적인 알고리즘 설계의 핵심이다.일부 형식 설계 방법과 프로그래밍 언어는 소프트웨어 설계의 핵심 구성 요소로서 알고리즘보다는 데이터 구조를 강조한다.데이터 구조는 메인 메모리와 보조 메모리에 저장된 정보의 저장과 검색을 구성하는데 사용될 수 있다.[8]

실행

데이터 구조는 일반적으로 컴퓨터가 메모리에 저장되고 프로그램에 의해 조작될 수 있는 메모리 주소를 나타내는 비트 문자열인 포인터에 의해 지정된 메모리의 어떤 장소에서 데이터를 가져오고 저장하는 능력에 기초한다.따라서 배열기록 데이터 구조는 산술 연산이 있는 데이터 항목의 주소를 계산하는 것에 기초하는 반면, 연결된 데이터 구조는 구조 자체 내에 데이터 항목의 주소를 저장하는 것에 기초한다.

데이터 구조를 구현하려면 대개 해당 구조의 인스턴스를 만들고 조작하는 일련의 절차를 작성해야 한다.데이터 구조의 효율성은 이러한 운영과 별도로 분석할 수 없다.이러한 관찰은 추상 데이터 유형의 이론적 개념, 추상 데이터 유형에 대해 수행될 수 있는 연산에 의해 간접적으로 정의되는 데이터 구조, 그리고 그러한 연산의 수학적 특성(공간과 시간 비용 포함)에 동기를 부여한다.[9]

Python 3. The standard type hierarchy.png

일반적으로 단순한 원시 데이터 유형에 기초하여 구축된 데이터 구조에는 수많은 유형이 있다.잘 알려진 예는 다음과 같다.[10]

  • 바이트컴퓨터 CPU가 메모리에서 레지스터로 또는 단일 CPU 명령으로 다시 복사할 수 있는 가장 작은 데이터 양이므로, 컴퓨터를 통해 빅데이터를 실행하는 가장 효율적인 방법은 bytestream이며, 따라서 Stream 프로세싱은 Stream 처리된다.참고. 메모리의 모든 비트는 바이트의 일부이기 때문에 CPU는 메모리에서 레지스터 또는 백으로 단일 비트를 복사할 수 없다.[11]
  • 배열은 특정 순서에 따른 여러 요소로서, 일반적으로 모두 동일한 유형이다(언어에 따라, 개별 요소는 모두 동일한 유형이어야 하거나 거의 모든 유형의 요소가 되어야 할 수 있다).어떤 요소가 필요한지 지정하기 위해 정수 색인을 사용하여 요소에 액세스한다.일반적인 구현에서는 어레이 요소에 연속적인 메모리 단어를 할당하지만 이것이 항상 필요한 것은 아니다.배열은 고정 길이 또는 크기 조정이 가능하다.
  • 링크된 목록(일명 목록이라고도 함)은 노드라고 불리는 모든 유형의 데이터 요소의 선형 모음이며, 여기서 각 노드는 자체 값을 가지며 링크된 목록의 다음 노드를 가리킨다.어레이에 비해 링크된 리스트의 주요 장점은 리스트의 나머지 부분을 재배치하지 않고도 값을 항상 효율적으로 삽입하고 제거할 수 있다는 것이다.특정 요소에 대한 무작위 액세스와 같은 특정 다른 작업은 배열보다 목록 속도가 느리다.
  • 레코드(투플 또는 구조체라고도 함)는 집계 데이터 구조다.레코드는 다른 값을 포함하는 값이며, 일반적으로 고정된 숫자와 시퀀스로, 일반적으로 이름에 의해 인덱싱된다.기록의 요소는 보통 필드 또는 멤버라고 불린다.
  • 조합은 그 경우에 저장될 수 있는 다수의 허용된 원시 유형(예: 플로트 또는 롱 정수)을 지정하는 데이터 구조다.플로트와 정수를 포함하도록 정의할 수 있는 기록과 대조되는 반면, 조합에서는 한 번에 하나의 값만 있다.가장 넓은 멤버 데이터 유형을 포함하기에 충분한 공간이 할당된다.
  • 태그가 지정된 조합(변종, 변종 레코드, 차별되는 조합 또는 분리 결합이라고도 함)은 강화된 형식 안전을 위해 현재 유형을 나타내는 추가 필드를 포함한다.
  • 오브젝트는 기록과 같이 데이터 필드와 데이터 컨텐츠에 작용하는 다양한 방법을 포함하는 데이터 구조다.개체는 분류법에서 클래스의 메모리 내 인스턴스다.객체 지향 프로그래밍의 맥락에서 레코드를 객체와 구별하기 위한 평이한 데이터 구조로 알려져 있다.[12]

또한 해시, 그래프, 이진수 등은 일반적으로 사용되는 다른 데이터 구조다.

언어 지원

대부분의 어셈블리 언어BCPL(기본 결합 프로그래밍 언어)과 같은 일부 낮은 수준의 언어는 데이터 구조에 대한 내장 지원이 부족하다.한편, 많은 고급 프로그래밍 언어MASM과 같은 일부 상위 수준의 어셈블리 언어는 레코드와 어레이와 같은 특정 데이터 구조에 대한 특별한 구문 또는 기타 내장형 지원을 가지고 있다.예를 들어, C(BCPL의 직계 후손)와 Pascal 언어는 벡터(1차원 배열)와 다차원 배열 외에 각각 구조와 기록을 지원한다.[13][14]

대부분의 프로그래밍 언어는 데이터 구조 구현을 다른 프로그램에 의해 재사용할 수 있는 일종의 라이브러리 메커니즘을 특징으로 한다.현대 언어는 일반적으로 가장 일반적인 데이터 구조를 구현하는 표준 라이브러리와 함께 제공된다.를 들어 C++ Standard Template Library, Java Collections FrameworkMicrosoft .NET Framework.

현대 언어들은 또한 일반적으로 도서관 모듈의 인터페이스와 그것의 구현 사이의 분리인 모듈 프로그래밍을 지원한다.일부는 고객이 구현 세부사항을 숨길 수 있는 불투명한 데이터 유형을 제공한다.C++, Java, Smalltalk와 같은 객체 지향 프로그래밍 언어는 일반적으로 이러한 목적을 위해 클래스를 사용한다.

알려진 많은 데이터 구조는 다중 컴퓨팅 스레드가 데이터 구조의 단일 콘크리트 인스턴스에 동시에 접근할 수 있는 동시 버전을 가지고 있다.[15]

참고 항목

참조

  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. ISBN 978-0262033848.
  2. ^ Black, Paul E. (15 December 2004). "data structure". In Pieterse, Vreda; Black, Paul E. (eds.). Dictionary of Algorithms and Data Structures [online]. National Institute of Standards and Technology. Retrieved 2018-11-06.
  3. ^ "Data structure". Encyclopaedia Britannica. 17 April 2017. Retrieved 2018-11-06.
  4. ^ Wegner, Peter; Reilly, Edwin D. (2003-08-29). Encyclopedia of Computer Science. Chichester, UK: John Wiley and Sons. pp. 507–512. ISBN 978-0470864128.
  5. ^ "Abstract Data Types". Virginia Tech - CS3 Data Structures & Algorithms.
  6. ^ Gavin Powell (2006). "Chapter 8: Building Fast-Performing Database Models". Beginning Database Design. Wrox Publishing. ISBN 978-0-7645-7490-0.
  7. ^ "1.5 Applications of a Hash Table". University of Regina - CS210 Lab: Hash Table. Archived from the original on 2021-04-27. Retrieved 2018-06-14.
  8. ^ "When data is too big to fit into the main memory". homes.sice.indiana.edu.
  9. ^ Dubey, R. C. (2014). Advanced biotechnology : For B Sc and M Sc students of biotechnology and other biological sciences. New Delhi: S Chand. ISBN 978-81-219-4290-4. OCLC 883695533.
  10. ^ Seymour, Lipschutz (2014). Data structures (Revised first ed.). New Delhi, India: McGraw Hill Education. ISBN 9781259029967. OCLC 927793728.
  11. ^ Cline, Marshall. "C++ FAQ: the rules about bytes, chars, and characters".
  12. ^ Walter E. Brown (September 29, 1999). "C++ Language Note: POD Types". Fermi National Accelerator Laboratory. Archived from the original on 2016-12-03. Retrieved 6 December 2016.
  13. ^ "The GNU C Manual". Free Software Foundation. Retrieved 2014-10-15.
  14. ^ Van Canneyt, Michaël (September 2017). "Free Pascal: Reference Guide". Free Pascal.
  15. ^ Mark Moir and Nir Shavit. "Concurrent Data Structures" (PDF). cs.tau.ac.il.

참고 문헌 목록

추가 읽기

외부 링크