Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Tu je implementácia Min-Heap, vrátane metód vloženia, extrakcie minimálneho prvku a hereckých operácií:
`` `Java
verejná trieda Minheap {
súkromné int [] halda;
súkromná veľkosť int;
súkromná kapacita;
public Minheap (int kapacita) {
this.capacity =kapacita;
this.Heap =new Int [kapacita + 1]; // index 0 sa nepoužíva
this.Size =0;
}
public boolean isempty () {
veľkosť návratu ==0;
}
public boolean Isfull () {
Veľkosť návratnosti ==kapacita;
}
private int parent (int i) {
návrat I / 2;
}
súkromné int vľavo (int i) {
návrat 2 * i;
}
private int right (int i) {
návrat 2 * i + 1;
}
private void swap (int i, int j) {
int temp =halda [i];
halda [i] =halda [j];
halda [j] =temp;
}
public void insert (int key) {
if (isfull ()) {
Hodiť nový nelegálnyStateException („Halda je plná“);
}
veľkosť ++;
halda [veľkosť] =kľúč;
int i =veľkosť;
while (i> 1 &&heap [parent (i)]> halda [i]) {// Min-heap vlastnosť
swap (i, rodič (i));
i =rodič (i);
}
}
public int extractmin () {
if (isempty ()) {
hodiť nový nelegálnyStateException („Halda je prázdna“);
}
int root =halda [1];
halda [1] =halda [veľkosť];
veľkosť--;
Heapify (1);
návrat koreň;
}
private void heapify (int i) {
int najmenší =i;
int l =vľavo (i);
int r =right (i);
if (l <=size &&heap [l]
}
if (r <=size &&heap [r]
}
if (najmenšie! =i) {
swap (i, najmenší);
Heapify (najmenšie);
}
}
public void tlačep () {
pre (int i =1; i <=veľkosť; i ++) {
System.out.print (heap [i] + "");
}
System.out.println ();
}
public static void main (String [] args) {
Minheap Minheap =New Minheap (10);
Minheap.insert (3);
Minheap.insert (2);
Minheap.insert (15);
Minheap.insert (5);
Minheap.insert (4);
Minheap.insert (45);
System.out.println ("MinHeap Array:");
Minheap.Printheap ();
System.out.println ("Extrakt min:" + minheap.extractmin ());
System.out.println ("Po extrahovaní min:");
Minheap.Printheap ();
}
}
`` `
Tento kód obsahuje:
* konštruktor: Inicializuje pole haldy s danou kapacitou. Všimnite si, že index 0 sa nepoužíva.
* `isEmpty ()` a `isfull ()`: Skontrolujte stav haldy.
* `parent ()`, `left ()`, `right ()`: Pomocné funkcie, aby získali indexy rodičov a detských uzlov.
* `swap ()`: Vymení dva prvky v poli.
* `insert ()`: Vloží nový prvok do hromady, udržiava vlastnosť Min-HEAP.
* `extraktmin ()`: Odstraňuje a vráti minimálny prvok (root), udržiavanie vlastnosti Min-HEAP pomocou `hEAPIFY ()`.
* `heapify ()`: Po odstránení alebo vložení prvku obnoví vlastnosť Min-Heap. Rekurzívne porovnáva prvok so svojimi deťmi av prípade potreby swapy.
* `pretláčko ()`: Pomocná funkcia na demonštráciu.
Nezabudnite zvládnuť potenciálne výnimky, ako napríklad pokus o extrahovanie z prázdnej haldy alebo vložiť do plného. Tento príklad používa celočíselné hodnoty; Môžete ho ľahko prispôsobiť iným typom údajov pomocou generického parametra typu. V prípade väčších haldy zvážte použitie sofistikovanejšej stratégie veľkosti, aby ste zabránili obmedzeniu pevnej kapacity.