Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Edit:
Λοιποοον θα τα λεω με τη σειρα που τα βλεπω
καλο που σας απαγορευει τα public fields, σας προτρεπει να μαθετε encapsulation
δεν βλεπω να παρατηρησε κανεις οτι η κλαση πρεπει να ειναι abstract
δεν ξεκιναμε με κεφαλαιο τις μεταβλητες, και για λογους λογικης μην ονομαζεις τον int array σου λιστα..
-List->array
-Ορισε μια νεα μεταβλητη numOfItems και το top(next θα το ελεγα εγω) για να υπαρχει πληρης πληροφορια σχετικα με την κλαση
-Σβησε το getCapacity και κανε το getNumofItems για την merge,και νομιζω εννοιολογικα αρκει να ειναι package αντι για public, αλλιως χαλαει το encapsulation
-Αφηνουμε την insert προς το παρον
-Το getMax πλεον γραφεται πολυ πιο κατανοητα

int getMax(){
if(numOfItems==0) return -1;
else return array[0];
}

-Το extractMax παει ολο σβησιμο

int extractMax(){
if(numOfItems==0) return -1;
else{
int result=array[0];
array[0]=0;
numOfItems--;
int index=0;
for(int i=1;i<capacity;i++){
if(array[i]>array[index]) index=i;
}
array[0]=array[index];
array[index]=0;
return result;
}
}

-Στο merge εχεις λαθος κατανοησης δεν ειναι το κριτηριο τα capacity αλλα τα numOfItems
Αμα σου δωσω 2 ουρες που χωρανε 100 στοιχεια αλλα εχουν μεσα 5 η καθεμια δεν θα μου τις ενωσει αυτο που εγραψες

bool merge(PriorityQueue B ){
if(numOfItems+B.getNumOfItems()>capacity) return false;
else{....
....
....
}

-Ε στο toString ελεος υπαρχει ετοιμη συναρτηση
Arrays.toString

αυτα μετα βαρεθηκα  :P

  • Απαντ. 48
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Δημοσ.

OFF TOPIC

Ωραίο θέμα...έφτιαξα βέβαια την δική μου Link.png Site: PriorityQueue 

Ο αλγόριθμος όμως πήγε όπως τον σκέφτηκα και το παρουσίασα πιο πριν.

  • Moderators
Δημοσ.

Να ρωτήσω κάτι βρε παιδιά γιατί μάλλον κάτι μου διαφεύγει. Ζητάει ένα priority queue, το οποίο πρέπει να είναι πάντα sorted. Πώς γίνεται αυτό σε σταθερό χρόνο ανεξάρτητα από το μέγεθος της ουράς; Ας πούμε δηλαδή ότι θέλουμε το μεγαλύτερο στοιχείο να είναι πάντα πρώτο. Σε περίπτωση που αυτό που θέλουμε να βάλουμε δεν είναι το μεγαλύτερο, δεν πρέπει να δούμε και η υπόλοιπη ουρά τι έχει;

 

@M2000

Αυτό που έχεις γράψει στο blog σου είναι λάθος. Ένα priority queue είναι, by definition, ταξινομημένο.

Δημοσ.

Δεν είναι  SORTED...ποιος το είπε; (έχω περιγράψει τον αλγόριθμο...αλλά βλέπω...αγρόν αγοράζουμε)

:-D


Όχι δεν είναι και απόδειξη για αυτό είναι ότι όταν σου δίνουν iterator σου λένε ότι δεν θα πάρεις σε σειρά τα μέρη της!

  • Moderators
Δημοσ.

Όχι δεν είναι και απόδειξη για αυτό είναι ότι όταν σου δίνουν iterator σου λένε ότι δεν θα πάρεις σε σειρά τα μέρη της!

 

???

Δημοσ.

Να ρωτήσω κάτι βρε παιδιά γιατί μάλλον κάτι μου διαφεύγει. Ζητάει ένα priority queue

Ζητάει ένα class βαφτίζεται ο δούλος του θεού pq. Βασικά δες το μόνο σα θέμα public interface, όχι αλγοριθμικό.

Δημοσ.

???

Όπως διαβάζουμε (για την java)

 

The Iterator provided in method iterator() is not guaranteed to traverse the elements of the PriorityQueue in any particular order. If you need ordered traversal, consider using Arrays.sort(pq.toArray()).

  • Moderators
Δημοσ.

Αυτό που καταλαβαίνω από τα docs και διάφορα posts στο SO είναι ότι το pq στη Java, εσωτερικά, δεν είναι sorted. Όταν όμως πας να βγάλεις ένα στοιχείο, τότε αυτό είναι το σωστό, βάσει sorting, στοιχείο. Δηλαδή δεν έχει μόνο το μεγαλύτερο και μετά άμα το βγάλεις είναι όλα τα άλλα όπως να 'ναι. Άρα, for all intents and purposes, το pq είναι ένας sorted container, τουλάχιστον για το χρήστη.

 

Και ντροπή σου που με βάζεις να ψάχνω docs της Java.

  • Like 1
Δημοσ.

Ρε φυσικά και είναι sorted to pq, αφού το λέει κιόλας ότι είναι backed από heap. Τι λόγο ύπαρξης θα είχε διαφορετικά;

 

Απλά ο iterator δε δίνει τα περιεχόμενα κατα σειρά, γιατί η δομή του heap δεν επιτρέπει να το κάνεις αυτό χωρίς overhead και χωρίς να καταστρέψεις το heap. Obvious choice there.

 

Edit: προς αποφυγή παρανόησης. "Sorted" ναι, δεν είναι με την έννοια του sorted πίνακα. Αλλά αν δε σε πειράζει να καταστρέψεις το heap, μπορείς να πάρεις τα περιεχόμενα in order.

Δημοσ.

καλο που σας απαγορευει τα public fields, σας προτρεπει να μαθετε encapsulation

επίσης προτρέπει κακές τακτικές προγραμματισμού η ολική απαγόρευση public.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...