Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako môžem implementovať hromadu založenú na poli v Jave?

Implementácia haldy založenej na poli v Java zahŕňa použitie poľa na reprezentáciu štruktúry haldy. Ako príklad použijeme ministerstvo (najmenší prvok v koreni), ale princípy sú rovnaké pre maximálny hráč.

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] najmenší =l;

}

if (r <=size &&heap [r] najmenší =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.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené