모든 프로그래머가 알아야 할 3가지 고급 데이터 구조

모든 프로그래머가 알아야 할 3가지 고급 데이터 구조

데이터 구조를 사용하는 것은 프로그래머로서 매우 흔한 일이므로 이진 트리, 스택 및 대기열과 같은 기본 데이터 구조에 능숙해지는 것이 성공에 매우 중요합니다. 그러나 기술을 향상하고 군중에서 눈에 띄고 싶다면 고급 데이터 구조에도 익숙해지기를 원할 것입니다.

고급 데이터 구조는 데이터 과학의 필수 구성 요소이며 비효율적인 관리를 정리하고 대규모 데이터 세트를 위한 스토리지를 제공합니다. 소프트웨어 엔지니어와 데이터 과학자는 지속적으로 고급 데이터 구조를 사용하여 알고리즘과 소프트웨어를 설계합니다.

모든 전문 프로그래머가 알아야 할 고급 데이터 구조에 대해 논의하면서 계속 읽으십시오.

1. 피보나치 힙

이미 데이터 구조를 배우는 데 시간을 투자했다면 이진 힙에 익숙해야 합니다. 피보나치 힙은 매우 유사하며 최소 힙 또는 최대 힙 속성을 따릅니다. 피보나치 힙은 최소값 또는 최대값 노드가 항상 루트에 있는 트리 모음으로 생각할 수 있습니다.

피보나치 힙
이미지 크레디트: 위키미디어

또한 힙은 노드 n 이 최소한 F(n+2)개의 노드를 갖도록 피보나치 속성을 충족합니다. 피보나치 힙 내에서 각 노드의 루트는 일반적으로 원형 이중 연결 목록을 통해 함께 연결됩니다. 이를 통해 O(1) 시간에 노드를 삭제하고 두 목록을 연결할 수 있습니다.

피보나치 힙은 이진 및 이항 힙보다 훨씬 더 유연하므로 다양한 응용 프로그램에서 유용합니다. 알고리즘의 실행 시간을 크게 향상시키기 위해 Dijkstra 알고리즘에서 우선 순위 대기열로 일반적으로 사용됩니다.

2. AVL 트리

Avl 나무
이미지 크레디트: 위키미디어

AVL(Adelson-Velsky and Landis) 트리는 컴퓨터 과학에서 사용되는 다양한 유형의 트리 중 하나입니다. 본질적으로 자체 균형 이진 검색 트리입니다. 표준 이진 검색 트리는 특정 에지 케이스에서 왜곡될 수 있으며 최악의 경우 O(n)의 시간 복잡도를 가지므로 실제 애플리케이션에 비효율적입니다. 자체 균형 트리는 균형 속성을 위반할 때 자동으로 구조를 변경합니다.

AVL 트리에서 각 노드에는 균형 요소가 포함된 추가 특성이 포함되어 있습니다. 균형 요소는 해당 노드에서 오른쪽 하위 트리에서 왼쪽 하위 트리의 높이를 뺀 값입니다. AVL 트리의 자체 균형 속성에서는 균형 요소가 항상 -1, 0 또는 1이어야 합니다.

자체 균형 속성(균형 요소)이 위반되면 AVL 트리는 균형 요소를 유지하기 위해 노드를 회전합니다. AVL 트리는 오른쪽 회전, 왼쪽 회전, 왼쪽-오른쪽 회전 및 오른쪽-왼쪽 회전의 네 가지 기본 회전을 사용합니다.

AVL 트리의 자체 균형 속성은 최악의 경우 시간 복잡도를 O(log n)으로 개선하여 이진 검색 트리의 성능에 비해 훨씬 더 효율적입니다.

AVL 트리는 균형 요소를 통해 자체적으로 유지되므로 주어진 높이에서 최소 노드 수를 계산할 수 있습니다. 순환 관계는 N(h) = N(h-1) + N(h-2) + 1로 내려오고 AVL 트리에는 적어도 세 개의 노드가 있어야 합니다(n > 2). 반복 관계의 기본 사례는 각각 N(0) = 1 및 N(1) = 2입니다.

3. 레드-블랙 트리

레드 블랙 트리
이미지 크레디트: 위키미디어

Red-Black 트리는 자체 균형 속성으로 추가 비트를 사용하는 또 다른 자체 균형 이진 검색 트리입니다. 비트는 일반적으로 빨간색 또는 검정색으로 표시되므로 Red-Black 트리라는 이름이 지정됩니다.

Red-Black의 각 노드는 빨간색 또는 검은색이지만 루트 노드는 항상 검은색이어야 합니다. 두 개의 인접한 레드 노드가 있을 수 없으며 모든 리프 노드는 블랙이어야 합니다. 이러한 규칙은 트리의 자체 균형 속성을 유지합니다.

이진 검색 트리와 달리 Red-Black 트리는 효율성이 대략 O(log n)이므로 훨씬 더 효율적입니다. 그러나 AVL 트리는 명확한 자체 균형 속성으로 인해 훨씬 ​​더 균형을 이룹니다.

데이터 구조 개선

고급 데이터 구조를 아는 것은 취업 면접에서 큰 차이를 만들 수 있으며 경쟁에서 귀하를 구분하는 요인이 될 수 있습니다. 조사해야 할 다른 고급 데이터 구조로는 n-Trees, Graphs 및 Disjoint Sets가 있습니다.

주어진 시나리오에 대한 이상적인 데이터 구조를 식별하는 것은 좋은 프로그래머를 훌륭하게 만드는 것의 일부입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다