이것은 대부분의 기술을 이해하는 데 필요한 것입니다! 그에게이 문서를 넣어 던졌다 심사관은, 당신에게 B 트리와 B + 트리를 물었다

개인 블로그 탐색 페이지 (클릭 오른쪽에있는 링크를 개인 블로그를 엽니) : 다니엘은 기술 스택에 당신을 데려 갈 

1 B 트리

B + 트리를 소개하기 전에, 짧게는 두 개의 데이터 구조를, B- 트리에 대해 모두 유사점과 차이점을 우리에게, 그리고 마지막으로, 우리는이 두 가지 데이터 구조의 차이를 비교합니다.

1.1 B 트리 개념

또한 하나 이상의 균형을 검색 나무입니다 B- 트리로 알려진 B-트리. 진 나는 모두가 가장 간단한 바이너리 변환이 온다에서, B-나무의 정의에서의 모습을 보자, 아무것도 이상한 곳이있는 B 트리와 B + 나무 뒤에 이야기, 사실, 잘 알고 생각합니다.

  • 각 노드는 가장 m-1 번째로 갖는 키워드 (키 - 값 쌍으로 존재할 수있다).

  • 적어도 루트에 하나의 캔 키워드 .

  • 루트가 아닌 노드 / 2 회 이상 m에이 키워드 .

  • 키워드의 순서로 각각의 노드는 키워드에있는 모든 키워드가 덜보다 좌측 서브 트리 및 우측 서브 트리 내의 모든 키워드의 각각이보다 큰, 소형 ~ 대형의 배치된다.

  • 모든 잎 노드는 동일한 층에, 또는 루트 노드에 각 리프 노드의 길이는 동일합니다.

  • 각 노드가 인덱스 데이터를, 대응하는 키 값.

따라서, 루트 번호 범위 : 1 <= k <= m-1루트가 아닌 번호 m/2 <= k <= m-1범위 : .

또한, 우리는 개념에 관심을 지불 할 필요가, 당신은 일반적으로 문자 m의 순서를 나타내는 순서는 노드가 자식 노드의 최대 번호가 대표하는 B-트리를 설명하는 순서를 지정해야합니다.

K <= 4, 비 루트 노드의 개수가 범위 1 <= : 우리는 5 차 B 트리의 루트 노드 번호 범위가 그와 같이, 상기 개념을 설명하기 위해 예를 들자면 2 <= K <= 4.

다음은, 우리가 예를 통해 삽입 한 후 삽입 공정 B-트리를 설명하고 키워드를 삭제하는 과정을 설명합니다.

1.2 B 트리에 삽입

삽입, 우리는 규칙을 기억해야합니다 : 현재 노드가 좌우로이 노드 키 이하 m-1, 그렇다면, 직접 삽입 할 수의 수이며, 그렇지 않은 경우 키 중간 노드 여부를 결정 부모 노드로의 중간 노드에 두 부분.

예 : (: 노드와 다음 노드가 통합 된 키 및 값을 나타내는 주) 단계 5-B 트리의 노드 키까지 네 개의 키의 최소값을 갖는다.

  • 18,70,50,40 삽입

  • 22 삽입

당신이 22 삽입, 이미 말했다 이상 필요가 규칙에 의해 분할 될 수 있도록 키 노드가 4 개 이상을 가지고 발견했을 때, 분할 이후로 다음과 같습니다.

  • 그런 다음 23,25,39를 삽입

분할, 아래 얻을.

삽입 과정이 더 소개하지 않습니다 더 이상, 나는 당신이 이미 작업을 삽입하는 방법을 알고이 예제를 생각합니다.

트리 삭제 작업 1.3 B

삽입 작업의 B 트리 삭제하면, 같은 캔 쉽게 파악 몇 가지 사례를 기억 알고, 상대적으로 복잡하지만.

  • 이제 초기 상태는 아래의 B-나무 한 다음 삭제 작업이된다.

  • 나중에 삭제, 또는 노드의 수보다 큰 경우 삭제 (15)는,이 상황은, 리프 노드 요소를 삭제하는 것입니다 m/2만큼이 상황을 직접 삭제할 수 있습니다로.

  • 그런 다음, 우리는이에 대한 규칙을 삭제 (22)을 넣어 : 22 잎 이외의 노드를, 우리가 키를 오버라이드 (override) 할 필요가 이후의 키 (요소)에 의해 제거 할 수는 잎 이외의 노드를 삭제 한 후 하위 분기를 삭제할 경우 후속 키 후속 키 . (22) 삭제를 위해, 24 필요성 위치한 22 노드 삭제할 후속 요소로 이동한다.

발견 노드 (26)는이 시점에서 하나 개의 요소, 2 이하 (m / 2),이 노드는 요구 사항, 규칙이 시간 (형제 자매에 빌린 요소)을 만족하지 않습니다 요소의 수는 요소를 제거하는 경우, 리프 노드를 제거하면 보다 작는 (m / 2), 및 그 형제 요소보다 큰 (m / 2), 소자 형제 노드 더 m / 2의 최소치보다 말 즉,이 노드를 통해 부모 노드의 첫번째 요소 요소는 다음 형제 노드를 부모 노드로 다시 이동합니다 . 이 요구 사항을 충족합니다.

우리는 더욱 이해 동작을 살펴.

  • 그런 다음, (28)을 제거 리프 노드를 삭제 , 우리가 어떻게 그것을 할, 빌릴 수없는, 형제 노드 (2)보다 더 그러나 형제 자매, 아무것도를 고려 차용 요소가 필요하므로, 요구 사항을 충족하지 않는 삭제 하시겠습니까? 이 경우, 우선, 그것은 노드와 현재 노드와 키의 형제 자매에 대한 부모 노드 이동의 첫 번째 요소는 새 노드를 형성하기 위해 합병이다 .

이동 한 후, 형제 자매와 병합합니다.

단지 위의 상황을 삭제, 당신은 상황에 따라 삭제할 수 있습니다.

이 보고서보다도, 나는 내가 비교 B + 트리가 함께 믿고, B 나무가 특정 이해, 다음 부분, 우리는 그 다음 B + 트리를 설명 믿습니다수록을 취소합니다.

이 B + 트리

2.1 B + 트리 개요

B + 트리와 B-나무는 사실에서 우리는 첫번째보기, 매우 유사하다 같은 지점 .

  • 적어도 하나의 루트 요소에서
  • 비 루트 노드의 요소 범위 : m / 2 <= K <= m-1

다른 점 .

  • 내부 노드 (또한 아이 노드)와 리프 노드 : B + 트리 두 노드의 유형이 있습니다. 내부 노드가 잎 이외의 노드이며, 내부 노드는 인덱스, 저장 데이터를 저장하지 않는 데이터는 리프 노드에 저장됩니다.
  • 내부 노드 키 트리의 좌측 키 모두 오른쪽 하위 트리보다 미만이되면, 내부 노드에서의 키를 들면, 오름차순 또는 동일 주요 IT. 기록 리프 노드는 키의 크기에 따라 배치된다.
  • 각 리프 노드 포인터 인접한 리프 노드, 링크 자체가 키워드의 크기에 따라 자라 잎 노드의 대량 주문이 있습니다.
  • 우측 아이의 첫 번째 요소의이 부모의 인덱스입니다.

A B의 + 트리의 예에서 살펴 보자, 지금은 감정을 느낌!

2.2 삽입

: 조작을 삽입하여 매우 간단 내용 만 기억하는 기술이 필요 요소의 노드의 개수가 m-1보다 큰 경우, 상기 중간 요소에 의해 좌우 부분, 스플릿 인덱스 저장소로 상위 노드로 중간 소자 그러나, 상기 중간 요소 자체로 분할이다 또는이 부분의 우측 분할 .

다음 절차에서는 예로서 5 차 B + 트리를 삽입하고, 5 차 B + 트리 노드 적어도 두 가지 요소, 4 개 요소의 최대.

  • 5,10,15,20- 삽입

  • 25은 소자의 수는 4 분할 이상이며, 삽입

  • 그리고 분열을 계속, 26, 30를 삽입

이러한 몇 가지 예를 통해, 나는 문제의 삽입, 삭제하지 다음 아래 보이는 믿습니다.

2.3 삭제

때문에 삭제 작업의 경우, B-트리의 일부보다 간단 리프 노드 포인터를 존재하는 요소의 형제를 빌릴 때, 부모가 필요하지 않고, 직접 섹션으로 이동 한 형제 (제공되는 형제의 요소 더는 m / 2)보다 한 다음 부모 노드의 인덱스를 갱신, 요소가 더 (더 형제 추가 요소 노드 없음) m / 2 형제보다가 아닌 경우, 현재 노드와 노드가 결합 형제 및 삭제 부모 노드 키 , 여기에서 우리는 구체적인 예를 살펴.

  • 초기 상태

  • 10 삭제 삭제, 왼쪽 형제에있는 요구 사항을 충족하지 않는 부모 노드의 인덱스를 수정하는 마지막으로 추가 대출 요소 때문에 요소 등을 가지고

  • 제거 요소 (5), 즉 요구 사항을 충족, 당신은 형제의 합병, 마지막으로 수정 한 부모 지수 선택할 수 있도록 약 형제 여분의 요소가 없다는 것을 발견하지 않습니다 발견

  • 그것은 부모 지수는 따라서 조건을 만족하는 위의 단계와 동일한 작업을 수행 할 필요가 없다는 것을 발견

이러한 방법으로, B의 + 트리의 삭제가 완료되면, 그것을 읽고하지, 난 아주 간단한 느낌!

3 B와 B + 트리 트리 요약

B- 트리에 B + 트리 상대는 자신의 장점 중 일부는, 그것은 다음과 같은 점에 기인 할 수있다.

  • 이상의 단일 노드 기억 소자는 MySQL 데이터베이스의 기본 데이터 구조로서 더 적합하게되도록 IO의 수는 적은 쿼리되도록.
  • 모든 문의는 쿼리 성능이 안정, 리프 노드에 보여야 B-트리하면서, 각 노드는 불안정 데이터를 찾을 수 있습니다.
  • 모든 잎 노드 찾기가 더 쉽게 정렬 된 목록을 형성한다.

첨부 자바 / C / C ++ / 기계 학습 / 알고리즘 및 데이터 구조 / 프런트 엔드 / 안드로이드 / 파이썬 / 프로그래머 읽기 / 하나의 책 책 Daquan의 :

(건조 개인 블로그에이 열 오른쪽 클릭) : 기술 건조한 꽃을
===== >> ① [자바 다니엘은 진보의 길에 당신을 데려] << ====
===== >> ② [+ ACM 알고리즘 데이터 구조 다니엘 진보에 도로에 걸릴] << ===
===== >> ③ [데이터베이스 다니엘 진보에 도로에 걸릴] << == ===
===== >> ④ [다니엘 웹 프런트 엔드는 고급가는 길에 당신을 데려 갈 수 있습니다] << ====
===== >> ⑤ [기계 학습 파이썬 다니엘은 당신에게 항목을 고급 도로] << ====
===== >> ⑥ [건축가 다니엘은 진보의 길에 당신을 데려] << =====
===== >> ⑦ [C ++ 다니엘은 도로에 당신을 데려 갈 고급] << ====
===== >> ⑧ [다니엘은 진보의 길에 당신을 데려 갈 IOS] << ====
=====> > ⑨ [웹 보안 다니엘은가는 길에 당신을 데려 갈 고급] << =====
===== >> ⑩ [리눅스 운영 체제와 다니엘은 진보의 길에 당신을 데려] << = ====

더 불로 과일이 없다, 당신이 젊은 친구가, 친구가 기술을 배우고 싶은 희망, 도로의 방법으로 모든 장애물을 극복, 기술에 묶어 책을 이해 한 다음 코드에 노크, 원리를 이해하고 연습을 갈 것입니다 결정 그것은 당신의 미래, 당신에게 꿈을 생활, 직장을 가져올 것이다.

게시 47 개 원래 기사 · 원의 칭찬 0 · 조회수 263

추천

출처blog.csdn.net/weixin_41663412/article/details/104898923