Maunawaan Kung Paano Magpatupad ng isang Binary Heap sa Java



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman kung paano ipataw ang isang binary heap sa java na may mga halimbawa.

Bibigyan ka ng artikulong ito ng isang kumpletong pangkalahatang ideya ng pagtatrabaho ng uri ng magbunton at sa paglaon ay matutunan naming magpatupad ng isang Binary Heap sa Java.

Narito ang agenda para sa artikulong ito:





  1. Ano ang uri ng magbunton?
  2. Max Heap
  3. Min heap
  4. Pagpapatupad ng magbunton sa Java
    • Diagram
    • Code

Magsimula na tayo!

Ano ang uri ng magbunton?

Tambak ay karaniwang isang istraktura ng data batay sa puno. Mayroon itong mga node. Node comprises ng ilang mga elemento. Ang bawat node ay naglalaman ng isang elemento.



Ang mga node ay maaaring magkaroon ng mga anak. Kung sakaling walang mga bata, ito ay tinatawag na isang Dahon.

Mayroong dalawang mga patakaran na sinusunod:

  • Ang halaga ng bawat node ay dapat na mas mababa o katumbas ng lahat ng mga halagang itinatago sa mga anak nito.
  • Ito ay may pinakamaliit na posibleng taas.

Tambak ay lubos na mahusay sa pagkuha ngpinakamaliit o pinakadakilang elemento.



Lumipat tayo sa min heap ngayon!

Min heap

Ang Min heap ay isang kumpletong puno ng binary kung saan ang halaga ng elemento ng ugat ay mas mababa sa o katumbas ng alinman sa elemento ng bata.

Representasyon ng min heap

pag-uri-uriin ang array sa c ++

Arr [(i-1) / 2]: ibabalik nito ang node ng magulang.

Arr [(2 * i) + 1]: ibabalik nito ang kaliwang node ng bata.

Arr [(2 * i) + 2]: ibabalik nito ang tamang node ng bata.

Mayroong ilang mga pamamaraan ng Min Heap:

  • ipasok (): Ang isang bagong susi sa dulo ng puno ay idinagdag. Kung sakaling ang bagong susi ay mas malaki kaysa sa magulang, kung gayon hindi na kailangang gumawa ng anuman, kung hindi man, kailangan nating dumaan upang ma-set up ang ari-arian ng magbunton.
  • getMin (): ang mga pamamaraang ito ay tumutulong upang maibalik ang root element.
  • extractMin (): ibabalik ng pamamaraang ito ang minimumelemento.

Ang paglipat sa Max heap ngayon.

Max magbunton

Ang Max heap ay isang kumpletong puno ng binary kung saan ang halaga ng elemento ng ugat ay mas malaki kaysa o katumbas ng alinman sa elemento ng bata.

Ang Max heap ay binubuo din ng maraming mga pamamaraan!

  • Ipasok (): maglalagay ito ng isang elemento sa tambak.
  • Tanggalin () : tatanggalin nito ang isang elemento mula sa tambak.
  • FindMax (): mahahanap nito ang maximum na elemento mula sa tambak.
  • printHeap (): I-print nito ang nilalaman ng tumpok

Hayaan mo akong ipakita sa iyo ang pagpapatupad ng magbunton sa pamamagitan ng isang diagram at sa paglaon ng isang Javacode

Pagpapatupad ng magbunton sa Java

Diagram:

Heap

Ipinapakita ng diagram sa itaas ang binary heap sa Java. Tulad ng natutunan mo na mayroong dalawang mga tambak: Min heap at Max heap, narito ang isang diagram:

Ngayon, sa paglipat sa aming susunod na segment, makikita namin kung paano ipatupad ang isang binary heap sa Java.

Code:

pampublikong klase BinaryHeap {pribadong static panghuling int d = 2 pribadong int [] heap pribadong int heapSize / ** * Ipapasimuno nito ang aming bunton na may default na laki. * / public BinaryHeap (int kapasidad) {heapSize = 0 heap = bagong int [kapasidad + 1] Mga arrays.fill (heap, -1)} / ** * Susuriin nito kung ang bunton ay walang laman o hindi * Pagiging kumplikado: O ( 1) * / public boolean isEmpty () {return heapSize == 0} / ** * Susuriin nito kung ang bunton ay puno o hindi * Pagiging kumplikado: O (1) * / pampublikong boolean isFull () {return heapSize == heap .length} pribadong int parent (int i) {return (i-1) / d} pribadong int kthChild (int i, int k) {return d * i + k} / ** * Maglalagay ito ng bagong elemento upang magbunton * Pagiging kumplikado: O (log N) * Bilang pinakapangit na senaryo ng kaso, kailangan naming dumaan hanggang sa root * / public void insert (int x) {kung (isFull ()) magtapon ng bagong NoSuchElementException ('Tambak ay puno, Walang puwang upang ipasok bagong elemento ') heap [heapSize ++] = x heapifyUp (heapSize-1)} / ** * Tatanggalin nito ang elemento sa index x * Pagiging kumplikado: O (log N) * * / publiko int tanggalin (int x) {kung (isEmpty ()) magtapon ng bagong NoSuchElementException ('Walang laman ang bunton, Walang elemento na tatanggalin') int key = heap [x] heap [x] = heap [heapSize -1] heapSize-- heapifyDown (x) retu rn key} / ** * Ginamit ng pamamaraang ito upang mapanatili ang heap na ari-arian habang nagpapasok ng isang elemento. * * / pribadong void heapifyUp (int i) {int temp = heap [i] habang (i> 0 && temp> heap [magulang (i)]) {heap [i] = heap [parent (i)] i = parent (i)} magbunton [i] = temp} / ** * Ginamit ng pamamaraang ito upang mapanatili ang ari-arian ng tambak habang tinatanggal ang isang elemento. * * / pribadong void heapifyDown (int i) {int child int temp = heap [i] habang (kthChild (i, 1)magbunton [rightChild]? leftChild: rightChild} / ** * Ginamit ng pamamaraang ito upang mai-print ang lahat ng elemento ng tambak * * / public void printHeap () {System.out.print ('nHeap =') para sa (int i = 0 i

Sa pamamagitan nito, natapos namin ang artikulong ito sa Binary Heap sa Java. Suriin ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na 'Java ArrayList' at babalikan ka namin sa lalong madaling panahon.