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ť ArrayHeap v Java na efektívne ukladanie a získavanie údajov?

Implementácia haldy založenej na poli (v tomto príklade v tomto príklade) v Java zahŕňa použitie jediného poľa na reprezentáciu štruktúry haldy. Tu je návod, ako to môžete urobiť, vrátane metód vloženia, vymazania (extrakcia minimálneho prvku) a Peek (získanie minimálneho prvku bez jeho odstránenia):

`` `Java

verejné triedy ArrayHeap {

súkromné ​​int [] halda;

súkromná veľkosť int;

súkromná kapacita;

public ArrayHeap (int kapacita) {

this.capacity =kapacita;

this.Heap =new Int [kapacita + 1]; // index 0 sa nepoužíva

this.Size =0;

}

// funkcia pomocníka na získanie rodičovského indexu

private int parent (int i) {

návrat I / 2;

}

// Funkcia pomocníka, aby ste získali index ľavého dieťaťa

súkromné ​​int vľavo (int i) {

návrat 2 * i;

}

// funkcia pomocníka, aby ste získali správny index dieťaťa

private int right (int i) {

návrat 2 * i + 1;

}

// Funkcia pomocníka na hromadenie po vložení

private void heapifyup (int i) {

while (i> 1 &&heap [parent (i)]> heap [i]) {

swap (i, rodič (i));

i =rodič (i);

}

}

// funkcia pomocníka na zahrnutie po vymazaní

private void heapifydown (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ší);

Heapifydown (najmenší);

}

}

// funkcia pomocníka na výmenu dvoch prvkov

private void swap (int i, int j) {

int temp =halda [i];

halda [i] =halda [j];

halda [j] =temp;

}

// Vložte nový prvok do hromady

public void insert (int key) {

if (size ==kapacita) {

Hodiť nový nelegálnyStateException („Halda je plná“);

}

veľkosť ++;

halda [veľkosť] =kľúč;

Heapifyup (veľkosť);

}

// extrahovať (a odstrániť) minimálny prvok

public int extractmin () {

if (size ==0) {

hodiť nový nelegálnyStateException („Halda je prázdna“);

}

int min =halda [1];

halda [1] =halda [veľkosť];

veľkosť--;

Heapifydown (1);

návrat min;

}

// Získajte minimálny prvok bez jeho odstránenia

public int peekmin () {

if (size ==0) {

hodiť nový nelegálnyStateException („Halda je prázdna“);

}

návrat halda [1];

}

// Skontrolujte, či je halda prázdna

public boolean isempty () {

veľkosť návratu ==0;

}

public static void main (String [] args) {

ArrayHeap Heap =new ArrayHeap (10);

halda.insert (10);

halda.insert (5);

halda.insert (15);

halda.insert (3);

halda.insert (8);

System.out.println ("Minimálny prvok:" + heap.peekmin ()); // výstup:3

System.out.println ("Extrahovaný minimálny prvok:" + heap.extractmin ()); // výstup:3

System.out.println ("nový minimálny prvok:" + heap.peekmin ()); // výstup:5

}

}

`` `

Táto implementácia poskytuje základné operácie haldy. Pamätajte, že toto je *min-heap *; Aby ste to urobili *max-heap *, musíte zvrátiť porovnávaciu logiku v `heapifyup` a` heapifydown`. V prípade väčších haldy zvážte použitie sofistikovanejšej štruktúry údajov alebo knižnice, ak sa výkon stane kritickým. Môžete to tiež rozšíriť, aby ste spracovali všeobecné generiky pre všestrannejšie typy údajov. Nezabudnite zvládnuť potenciálne výnimky, ako napríklad „NelegalStateException“ pre prázdne alebo plné hromady.

Najnovšie články

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