더미 (우선순위 대기열)
public static void shiftDown(int[] array, int size, int index) {
int parent = index;
int child = 2 * parent + 1; // parent
while (child < size) {
// ,
if (child + 1 < size && array[child + 1] < array[child]) {
child = child + 1;
}
if (array[child] < array[parent]) {
int tmp = array[child];
array[child] = array[parent];
array[parent] = tmp;
} else {
break;
}
// parent child, .
parent = child;
child = 2 * parent + 1;
}
}
무더기의 하향 조정 과정:
public static void shiftDown(int[] array, int size, int index) {
int parent = index;
int child = 2 * parent + 1;
while (child < size) {
if (child + 1 < size && array[child + 1] > array[child]) {
child = child + 1;
}
if (array[child] > array[parent]) {
int tmp = array[child];
array[child] = array[parent];
array[parent] = tmp;
} else {
break;
}
parent = child;
child = 2 * parent + 1;
}
}
4 쌓기: 무질서한 수조를 쌓으면 아래로 조정할 수도 있고 위로 조정할 수도 있다.일반적으로 아래로 조정한다.쌓는 과정은 마지막 비잎결점을 찾아 아래로 조정하기 시작하고 뒤에서 앞으로 수조를 옮겨야 한다.시간 복잡도(OlogN)는 아래쪽으로 스몰오버를 조정하는 경우입니다.
// : , , i--
public static void createHeap(int[] array, int size) {
for (int i = (size - 1 - 1) / 2; i >= 0; i--) {
shiftDown(array, size, i);
}
}
public static void main(String[] args) {
int[] array = {9,5,2,7,3,6,8};
createHeap(array, array.length);
System.out.println(Arrays.toString(array));
}
// : [2, 3, 6, 7, 5, 9, 8]
5 상향 조정이라면 뿌리 노드가 바짝 붙어 있는 첫 번째 양친 노드를 시작 위치로 찾아 이동 후 수조를 반복한다.6 구축 더미의 응용: 우선순위 대기열(PriorityQueue)(이것은 하나의 대기열이고 모두 대기열과 관련된 성질임을 주의): 우선순위 상황에 따라 처리 대상을 처리해야 한다. 예를 들어 우선순위가 가장 높은 대상을 먼저 처리한 다음에 우선순위가 높은 대상을 처리해야 한다.작업 -----입력 대기열 (무더기로 예를 들면): (1) 먼저 꼬리에 꽂는 방식으로 그룹을 넣습니다.(2) 양친과의 값의 크기를 비교하고 양친의 값이 크면 무더기의 성질을 만족시켜 끝(3)을 삽입하지 않으면 양친과의 위치의 값을 교환하고 뿌리가 끝날 때까지 2, 3단계를 다시 진행한다.
private static void shiftUp(int[] array, int index) {
int child = index;
int parent = (child - 1) / 2;
while (child > 0) {
if (array[parent] < array[child]) {
int tmp = array[parent];
array[parent] = array[child];
array[child] = tmp;
} else {
// .
break;
}
child = parent;
parent = (child - 1) / 2;
}
}
작업 ----- 대기열 출력 (우선순위가 가장 높음) (무더기로 예를 들면): (1) 아래에 0으로 표시된 요소가 바로 팀의 첫 번째 요소입니다.삭제하는 동시에, 우리도 남은 구조가 여전히 한 무더기가 되기를 바란다.(2) 사실상 마지막 요소로 팀의 첫 번째 요소를 대체한 다음에 마지막 요소를 삭제하고 아래로 조정합니다.
public int poll() {
int oldValue = array[0];
array[0] = array[size - 1];
size--;
shiftDown(array, size, 0);
return oldValue;
}
조작-----취대 첫 원소(우선순위가 가장 높음)(대더미를 예로 들면): 더미 원소로 돌아가면 됩니다.
public int peek() {
return array[0];
}
7 TopK 문제.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.