이진 트리에 n개의 가중치 리프 노드가 있다고 가정하면 루트 노드에서 각 리프 노드까지의 경로 길이의 합과 해당 노드 가중치의 곱을 이진 트리의 가중치 경로 길이 WPL(가중 경로 길이)이라고 합니다. .
동일한 리프 노드는 서로 다른 이진 트리를 구성합니다.
가중치가 더 큰 리프 노드는 루트에 더 가깝고 wpl 값은 더 작습니다.
정의
최소 가중치 경로 길이를 갖는 이진 트리를 허프만 트리(최적 트리라고도 함)라고 합니다.
어떻게 건설하나요?
원칙적으로
가중치가 더 큰 리프 노드는 루트 노드에 더 가깝습니다.
가중치가 작을수록 리프 노드가 루트 노드에서 멀어집니다.
작은 값 찾기(합성된 노드도 함께 비교해야 함)
프로세스
가중치가 있는 n0개의 리프 노드가 있습니다.
애플리케이션
허프만 코딩(접두사 코딩)
허프만 코딩의 특징: 가중치가 클수록 문자 코드는 짧아지고, 그 반대도 마찬가지입니다.
문자 집합의 Huffman 인코딩에서는 한 문자의 Huffman 인코딩이 다른 문자의 Huffman 인코딩 접두사가 될 수 없습니다.
애플리케이션
문자 인코딩
기계 지침
트리 테이블 조회
이진 정렬 트리
왼쪽<루트<오른쪽
균형 이진 트리 AVL
이진 정렬 트리(특수 이진 정렬 트리)의 향상된 버전입니다. 트리를 최대한 짧게 유지하세요!
나무가 정상적으로 자라고 있는지 어떻게 알 수 있나요?
균형 요소 = 왼쪽 하위 트리 높이 - 오른쪽 하위 트리 높이
균형 인자 <= 1인 이진 정렬 트리
이진 트리의 최대 깊이와 최소 노드 수의 균형을 유지합니다.
B-트리(균형 이진 트리의 확장)
끼워 넣다
B-트리 생성은 지속적인 삽입 작업의 프로세스입니다.
단서 이진 트리
왼쪽 빈 체인 필드의 조건: 시퀀스의 가장 왼쪽 끝에 있고 원래 왼쪽 포인터는 비어 있습니다.
오른쪽 빈 체인 도메인의 조건: 시퀀스의 오른쪽 끝에 있고 원래 오른쪽 포인터가 비어 있습니다.
이진 트리 순회 방법
루트 노드의 경우
프롤로그
루트-왼쪽-오른쪽
중간 주문
왼쪽 루트-오른쪽
후문
왼쪽 오른쪽 루트
수준
한 줄씩 탐색
최소 스패닝 트리
프림의 알고리즘
필요하다
무게는 가장 작으며 순환을 형성할 수 없습니다.
노드 수가 적은 질문의 경우
Prime 알고리즘의 핵심 단계는 다음과 같습니다. 가중치 연결 그래프에서 V는 모든 정점을 포함하는 집합입니다. U는 이미 그래프의 모든 정점 v에서 시작하는 최소 신장 트리의 노드입니다. ={v}, 다음 작업을 반복합니다. 모든 u∈U,w∈V-U의 모든 간선 (u,w)∈E 중에서 가중치가 가장 작은 간선을 찾고 간선 (u,w)를 집합에 추가합니다. 그리고 집합 U에 점 w를 추가합니다. U=V일 때 최소 스패닝 트리가 발견됩니다.
크루스칼 알고리즘
먼저 노드를 결정하고 가장 짧은 경로를 가진 노드를 순서대로 선택합니다.
고리를 형성할 수 없음
변의 수가 적은 질문의 경우
기본 아이디어: 엣지 주도. 가중치 연결 그래프에서 U는 모든 간선의 집합이고, N은 정점의 수이며, SU는 이미 최소 스패닝 트리에 있는 간선의 집합입니다. 다음 작업을 반복합니다. 매번 가장 작은 가중치를 갖는 간선 e∈U-SU와 SU의 간선과 순환을 형성하지 않는 간선을 선택하여 SU에 추가합니다. SU의 간선 수가 N-1과 같을 때 최소 스패닝 트리가 발견됩니다.
질문
노드가 리프 노드가 아닌 경우 자식을 가지며 이 자식은 형제 그룹입니다.
오른쪽 포인터가 없는 노드의 수는 다음과 같습니다: 잎이 아닌 노드의 루트 노드 수
대칭적인 것을 제외하고 숫자를 세어 항상 왼쪽이 적고 오른쪽이 많거나 왼쪽이 많고 오른쪽이 적은지 확인하세요.
나무
ASL 평균 검색 길이
나무의 높이와 관련이 있다
5장. 트리와 이진 트리
이진 트리 순회 및 허프만 트리
난이도: 이진 트리와 나무와 숲 사이의 변환
대부분의 테스트는 트리 순회 및 허프만 트리 알고리즘을 포함하는 객관식 질문 형식입니다.
나무
n 노드의 유한 집합
루트 노드는 고유합니다.
하위 트리의 수에는 제한이 없지만 서로 교차하지 않습니다.
Degree: 노드가 소유한 하위 트리의 수
이진 트리: 차수 <=2
자연
이진 트리의 i번째 수준에는 최대 2^i-1개의 노드가 있습니다.
이진 트리의 깊이가 k이면 최대 2^k-1개의 노드가 있습니다. (k>=1)
n0=n2 1, n0은 차수가 0인 노드의 수를 나타내고, n2는 차수가 2인 노드의 수를 나타냅니다.
완전 이진 트리에서 n 노드가 있는 완전 이진 트리의 깊이는 [log2n] 1입니다. 여기서 [log2n]은 내림됩니다.
[이진트리] 노드 계산식 N = n0 n1 n2
총 노드 수 = 총 차수 1=Oxn0 1xn1 2xn2 ..
완전 이진 트리
모든 노드에는 왼쪽 및 오른쪽 하위 트리가 있으며 모든 리프 노드는 동일한 수준에 있습니다.
완전 이진 트리
리프 노드는 가장 낮은 수준과 그 다음 낮은 수준에만 나타날 수 있습니다.
그리고 맨 아래 레이어의 노드는 레이어의 가장 왼쪽 위치에 있는 이진 트리에 집중되어 있습니다.
나무, 숲, 이진 나무 사이의 순회 대응
더미
정의
완전한 이진 트리여야 합니다.
완전한 이진 트리에서는 마지막 행만 가득 차지 않도록 허용합니다. 그리고 마지막 행은 왼쪽에서 오른쪽으로 정렬되어야 합니다. 마지막 행의 요소 사이에는 공백이 없어야 합니다.
힙 질서
다겐두이
작은 뿌리 더미
기본 조작
힙 저장
1. 1차원 배열로 표현되는 레이어 순서에 따라 숫자를 순회
부모 노드는 i, 왼쪽 자식 노드의 첨자는 2i 1, 오른쪽 자식 노드는 2i 2 (이 규칙은 알고리즘에서 자주 사용됨)
상부 필터
트리의 마지막 요소만 힙 순서를 위반합니다.
주로 힙에 새 요소를 삽입하는 데 사용됩니다.
복잡도: O(logN)
아래로 필터링
루트 노드만 힙 순서를 위반합니다.
루트 노드를 아래쪽으로 조정
복잡도: O(logN)
더미를 쌓다
정렬되지 않은 배열을 힙으로 변환하는 방법은 무엇입니까?
위에서 아래로
힙에 삽입, 필터링
복잡도: O(NlogN)
상향식
먼저 요소를 힙으로 조정하고 두 번째 행부터 마지막 행까지 아래로 필터링하여 상위 노드에서 아래로 필터링 작업을 수행합니다.
복잡도: O(N)
적용: 우선순위 큐
두 가지 작업
대기열 삽입
최소한의 요소 팝업
작은 루트 힙을 사용하여 구현 가능
작은 루트 힙의 루트 노드가 min이므로 팝업 후 나머지 요소를 힙으로 조정합니다. (마지막 요소를 루트 노드에 놓고 필터를 아래로 둡니다)