|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
[java] max-heap
Ciao a tutti,
Sono due ore che sbatto la testa contro questo pezzo di codice. Data una lista di interi, devo restituire una max-heap. Codice:
import java.util.Arrays;
public class MaxHeap {
private int[] m_Heap;
private int m_Size;
// costruttori
public MaxHeap(int[] in)
{
m_Size = in.length;
m_Heap = in;
buildHeap();
}
public void buildHeap() {
for (int i = (int) ((m_Heap.length / 2) ); i >= 0; i--) {
heapify(i);
}
}
private void heapify(int i) {
int l = left(i);
int r = right(i);
int largest = 0;
if ((l < m_Size)&& (m_Heap[l] > m_Heap[i])){
largest = l;
}
else {
largest = i;
}
if ((r < m_Size) && (m_Heap[r] > m_Heap[largest])){
largest = r;
}
if (largest != i){
int swap = m_Heap[i];
m_Heap[i] = m_Heap[largest];
m_Heap[largest] = swap;
heapify(largest);
}
}
private int left(int i) {
return 2 * i;
}
private int right(int i) {
return 2 * i + 1;
}
public String toString() {
return Arrays.toString(m_Heap);
}
public static void main(String[] args) {
MaxHeap myHeap = new MaxHeap(myArray);
System.out.println(myHeap.toString());
}
static int[] myArray = {43,9,68,50,57,51,36,27,89,73,87,57,15,18,55};
... dove 55 ha come figli 50 e 57. Non riesco proprio a vedere l'errore... Vi ringrazio! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: MILANO
Messaggi: 1645
|
mi scusa per la mia niubba niubbaggine...cosa e'un "max-heap"??
__________________
xoooxoooxooox |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
sicuro che per ottenere l'altro figlio fosse 2 * i + 1 e non 2 * (i + 1) ?
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
oggesù, ora che ci faccio caso... hai usato la notazione ungherese in Java...
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
In parole povere è una struttura dati astratta rappresentata da un array (che puo' essere visto come un albero binario) in cui ogni elemento i è maggiore o uguale dell'elemento i*2 e dell'elemento i*2 + 1. "i" è il padre, "i*2" e "i*2 + 1" sono i due figli.
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Diciamo che è come mettere la testa di uno yak sul corpo di una pecora*...
Sarebbe meglio usare lo stile camelCase e le naming convention tipiche di Java * modo di dire tibetano
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
inoltre credo la notazione unghererese si allontani anche dal paradigma oo,cosa starebbe a rappresentare un oggetto di nome "myArray" ad esempio?
__________________
Khelidan Ultima modifica di khelidan1980 : 23-06-2008 alle 09:44. |
|
|
|
|
|
|
#9 | ||
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
Quote:
Quote:
Comunque, non sarà di certo quello ad aver indispettito il compilatore. |
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
Poi è più un discorso generale non focalizzato sue queste poche righe di esempio,dicevo che la notazione ungherese poco ci azzecca con il paradigma OO
__________________
Khelidan |
|
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: Feb 2008
Messaggi: 22
|
Rappresenta la configurazione di non so quanti flip-flop, se è nella memoria centrale, ma non vedo cosa c'entri. Puoi essere un po' più chiaro? Grazie.
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Forse khelidan1980 voleva semplicemente dire che nominare un array di interi col nome "myArray" non dice molto al lettore del codice, dato che lo vede da se che è un array di interi e forse si poteva trovargli un nome più significativo.
Comunque credo anche parlasse in senso più generale, va da se che nel caso uno scriva una piccola porzione di codice per delle prove e uso personale non è necessario che si soffermi ogni volta a spendere 5 min per trovare il nome più sgnificativo possibile per ogni cosa.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:49.




















