우선순위 대기열: 무더기 무더기 코드 및 응용.
두 갈래 나무의 순서 저장
수조를 사용하여 두 갈래 나무를 보존하는 것은 두 갈래 나무를 층순으로 훑어보는 방식으로 수조에 보존하는 것이다. 이런 방식은 일반적으로 완전한 두 갈래 나무를 나타내는 데 쓰인다.
무더기가 뭐예요?
1. 더미는 완전히 두 갈래 나무이다. 2. 수조에 저장된 3. 큰 뿌리 더미 즉 임의의 결점의 값은 모두 그 자수에 있는 결점의 값보다 크고 큰 무더기 또는 최대 더미라고 한다. 4, 작은 뿌리 더미는 큰 뿌리 더미와 반대로 작은 무더기라고도 하고 가장 작은 무더기라고도 한다.5. 더미는 일반적으로 집합 중의 가장 높은 값을 신속하게 찾는 데 쓰인다.쌓인 코드에 대한 구현:
/**
* @ClassName TestHeap
* @Description TODO
* @Author
* @Date 2019/11/2522:21
* @Version1.0
**/
public class TestHeap {
public int[] elem;
public int usedSize;
public TestHeap(){
this.elem = new int[20];
this.usedSize = 0;
}
public void adjustDown(int root ,int len){
int parent = root;
int child = 2*parent+1;
while(child<len){
if(child+1<len&&elem[child]<elem[child+1]){
child = child+1;
}
if(elem[child]>elem[parent]){
int tmp = elem[child];
elem[child] = elem[parent];
elem[parent] = tmp;
parent = child;
child = 2*parent+1;
}else{
break;
}
}
}
public void createHeap(int[] array) {
for (int i = 0; i < array.length; i++) {
this.elem[i] = array[i];
this.usedSize++;
}
for (int i = (this.usedSize-1-1)/2; i >= 0; i--) {
adjustDown(i,this.usedSize);
}
}
public void adjustUp(int child) {
int parent = (child-1)/2;
while (child > 0) {
if(this.elem[child] > this.elem[parent]) {
int tmp = elem[child];
elem[child] = elem[parent];
elem[parent] = tmp;
child = parent;
parent = (child-1)/2;
}else {
break;
}
}
}
public boolean isFull(){
return this.usedSize == this.elem.length;
}
public void pushHeap(int val) {
if(isFull()) {
this.elem = Arrays.copyOf
(this.elem,this.elem.length*2);
}
this.elem[this.usedSize] = val;
this.usedSize++;//11
adjustUp(usedSize-1);
}
public boolean isEmpty() {
return this.usedSize == 0;
}
public void popHeap() {
//0、
if(isEmpty()) {
return;
}
//1、
int tmp = this.elem[0];
this.elem[0] = this.elem[this.usedSize-1];
this.elem[this.usedSize-1] = tmp;
this.usedSize--;
//2、 , 0
adjustDown(0,this.usedSize);
}
public int getPop() {
if(isEmpty()) {
return -1;
}
return this.elem[0];
}
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.print(this.elem[i] +" ");
}
System.out.println();
}
public void heapSort(){
int end = usedSize-1;
//LinkedList list = new LinkedList<>();
while(end>0){
int tmp = this.elem[0];
this.elem[0] = this.elem[end];
this.elem[end] = tmp;
//list.addFirst(this.elem[end]);
adjustDown(0,end);
end--;
}
//return list;
}
}
TOP-K 문제
더미로 TOP-K 문제를 해결할 때 앞의 K 개의 최대치를 찾아야 할 때: K 길이의 작은 뿌리 더미를 만들고 집합 중의 모든 원소를 두루 훑어보고 더미 원소와 비교한다. 만약에 더미 원소보다 크면 넣고 아래로 조정한다. 다시 한 번 작은 뿌리 더미로 조정한다. 집합을 두루 훑어본 후에 작은 뿌리 더미의 원소는 앞의 K 개의 가장 큰 원소다.반대로 앞의 K개의 최소 원소를 찾으려면 큰 루트를 만들어서 해결해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.