101
Ουρά Προτεραιότητας (priority queue) μή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες : Εισαγωγή στοιχείου με δεδομένο κλειδί. οτελεί γενίκευση των δομών της στοίβας και της ουράς. Εξαιρετικά χρήσιμη δομή δεδομένων με πολλές εφαρμογές. Π.χ. ταξινόμηση με χρήση ουράς προτεραιότητας. Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή του από τη δομή.

Ουρά Προτεραιότητας ( priority queue)

  • Upload
    irving

  • View
    42

  • Download
    1

Embed Size (px)

DESCRIPTION

Ουρά Προτεραιότητας ( priority queue). Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες :. Εισαγωγή στοιχείου με δεδομένο κλειδί. Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή του από τη δομή. Αποτελεί γενίκευση των δομών της στοίβας και της ουράς. - PowerPoint PPT Presentation

Citation preview

Page 1: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες

bull Εισαγωγή στοιχείου με δεδομένο κλειδί

Αποτελεί γενίκευση των δομών της στοίβας και της ουράς

Εξαιρετικά χρήσιμη δομή δεδομένων με πολλές εφαρμογές

Πχ ταξινόμηση με χρήση ουράς προτεραιότητας

bull Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή του

από τη δομή

Ουρά Προτεραιότητας (priority queue)

Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες

bull Εισαγωγή στοιχείου με δεδομένο κλειδί

Αποτελεί γενίκευση των δομών της στοίβας και της ουράς

Εξαιρετικά χρήσιμη δομή δεδομένων με πολλές εφαρμογές

Πχ ταξινόμηση με χρήση ουράς προτεραιότητας

bull Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή του

από τη δομή

Σε ορισμένες εφαρμογές χρειαζόμαστε επιπλέον λειτουργίες όπως αλλαγή

κλειδιού ενός στοιχείου διαγραφή στοιχείου ένωση δύο ουρών προτεραιότητας

σε μία νέα ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Μέγιστου υποστηρίζει τις ακόλουθες λειτουργίες

MaxPQ() κατασκευή ουράς προτεραιότητας

MaxPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxΝ κλειδιά

MaxPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key max() επιστροφή του μέγιστου κλειδιού

Key delMax() διαγραφή και επιστροφή του μέγιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Ελάχιστου υποστηρίζει τις ακόλουθες λειτουργίες

MinPQ() κατασκευή ουράς προτεραιότητας

MinPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxN κλειδιά

MinPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key min() επιστροφή του ελάχιστου κλειδιού

Key delMin() διαγραφή και επιστροφή του ελάχιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα

public class NaiumlveMaxPQltKey extends ComparableltKeygtgt

private Key[] pq private int N=0

private boolean less(int i int j) return pq[i]compareTo(pq[j]) lt 0

private void exch(int i int j) Key t=pq[i] pq[i]=pq[j] pq[j]=t

NaiumlveMaxPQ(int maxN) pq = (Key[]) new Comparable[maxN] N = 0

public int size() return N

public boolean isEmpty() return N==0

void insert(Key v) pq[N++]=v

Key delMax() int j max = 0

for (j = 1 j lt N j++) if ( less(maxj) ) max = j

exch(pqmaxN-1) ανταλλαγή pq[max] και pq[N-1]

return pq[--N]

18 12 20 11 15 9 5

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 2: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες

bull Εισαγωγή στοιχείου με δεδομένο κλειδί

Αποτελεί γενίκευση των δομών της στοίβας και της ουράς

Εξαιρετικά χρήσιμη δομή δεδομένων με πολλές εφαρμογές

Πχ ταξινόμηση με χρήση ουράς προτεραιότητας

bull Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή του

από τη δομή

Σε ορισμένες εφαρμογές χρειαζόμαστε επιπλέον λειτουργίες όπως αλλαγή

κλειδιού ενός στοιχείου διαγραφή στοιχείου ένωση δύο ουρών προτεραιότητας

σε μία νέα ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Μέγιστου υποστηρίζει τις ακόλουθες λειτουργίες

MaxPQ() κατασκευή ουράς προτεραιότητας

MaxPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxΝ κλειδιά

MaxPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key max() επιστροφή του μέγιστου κλειδιού

Key delMax() διαγραφή και επιστροφή του μέγιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Ελάχιστου υποστηρίζει τις ακόλουθες λειτουργίες

MinPQ() κατασκευή ουράς προτεραιότητας

MinPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxN κλειδιά

MinPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key min() επιστροφή του ελάχιστου κλειδιού

Key delMin() διαγραφή και επιστροφή του ελάχιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα

public class NaiumlveMaxPQltKey extends ComparableltKeygtgt

private Key[] pq private int N=0

private boolean less(int i int j) return pq[i]compareTo(pq[j]) lt 0

private void exch(int i int j) Key t=pq[i] pq[i]=pq[j] pq[j]=t

NaiumlveMaxPQ(int maxN) pq = (Key[]) new Comparable[maxN] N = 0

public int size() return N

public boolean isEmpty() return N==0

void insert(Key v) pq[N++]=v

Key delMax() int j max = 0

for (j = 1 j lt N j++) if ( less(maxj) ) max = j

exch(pqmaxN-1) ανταλλαγή pq[max] και pq[N-1]

return pq[--N]

18 12 20 11 15 9 5

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 3: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Μέγιστου υποστηρίζει τις ακόλουθες λειτουργίες

MaxPQ() κατασκευή ουράς προτεραιότητας

MaxPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxΝ κλειδιά

MaxPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key max() επιστροφή του μέγιστου κλειδιού

Key delMax() διαγραφή και επιστροφή του μέγιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Ελάχιστου υποστηρίζει τις ακόλουθες λειτουργίες

MinPQ() κατασκευή ουράς προτεραιότητας

MinPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxN κλειδιά

MinPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key min() επιστροφή του ελάχιστου κλειδιού

Key delMin() διαγραφή και επιστροφή του ελάχιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα

public class NaiumlveMaxPQltKey extends ComparableltKeygtgt

private Key[] pq private int N=0

private boolean less(int i int j) return pq[i]compareTo(pq[j]) lt 0

private void exch(int i int j) Key t=pq[i] pq[i]=pq[j] pq[j]=t

NaiumlveMaxPQ(int maxN) pq = (Key[]) new Comparable[maxN] N = 0

public int size() return N

public boolean isEmpty() return N==0

void insert(Key v) pq[N++]=v

Key delMax() int j max = 0

for (j = 1 j lt N j++) if ( less(maxj) ) max = j

exch(pqmaxN-1) ανταλλαγή pq[max] και pq[N-1]

return pq[--N]

18 12 20 11 15 9 5

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 4: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας Ελάχιστου υποστηρίζει τις ακόλουθες λειτουργίες

MinPQ() κατασκευή ουράς προτεραιότητας

MinPQ(int maxΝ) κατασκευή ουράς προτεραιότητας για maxN κλειδιά

MinPQ(Key[] a) κατασκευή ουράς προτεραιότητας από τα κλειδιά του πίνακα a[]

void insert(Key v) εισαγωγή κλειδιού v

Key min() επιστροφή του ελάχιστου κλειδιού

Key delMin() διαγραφή και επιστροφή του ελάχιστου κλειδιού

boolean isEmpty() έλεγχος αν η ουρά προτεραιότητας είναι κενή

int size() αριθμός κλειδιών στην ουρά προτεραιότητας

Ουρά Προτεραιότητας (priority queue)Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα

public class NaiumlveMaxPQltKey extends ComparableltKeygtgt

private Key[] pq private int N=0

private boolean less(int i int j) return pq[i]compareTo(pq[j]) lt 0

private void exch(int i int j) Key t=pq[i] pq[i]=pq[j] pq[j]=t

NaiumlveMaxPQ(int maxN) pq = (Key[]) new Comparable[maxN] N = 0

public int size() return N

public boolean isEmpty() return N==0

void insert(Key v) pq[N++]=v

Key delMax() int j max = 0

for (j = 1 j lt N j++) if ( less(maxj) ) max = j

exch(pqmaxN-1) ανταλλαγή pq[max] και pq[N-1]

return pq[--N]

18 12 20 11 15 9 5

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 5: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα

public class NaiumlveMaxPQltKey extends ComparableltKeygtgt

private Key[] pq private int N=0

private boolean less(int i int j) return pq[i]compareTo(pq[j]) lt 0

private void exch(int i int j) Key t=pq[i] pq[i]=pq[j] pq[j]=t

NaiumlveMaxPQ(int maxN) pq = (Key[]) new Comparable[maxN] N = 0

public int size() return N

public boolean isEmpty() return N==0

void insert(Key v) pq[N++]=v

Key delMax() int j max = 0

for (j = 1 j lt N j++) if ( less(maxj) ) max = j

exch(pqmaxN-1) ανταλλαγή pq[max] και pq[N-1]

return pq[--N]

18 12 20 11 15 9 5

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 6: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)Άλλες στοιχειώδεις υλοποιήσεις

5 9 11 12 15 18 20

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

N maxN-1

bull Διατεταγμένος πίνακας Το μέγιστο στοιχείο στην τελευταία μη κενή θέση

bull Μη διατεταγμένη λίστα

bull Διατεταγμένη λίστα Το μέγιστο στοιχείο στην αρχή της λίστας

18 12 20 11 15 9 5head

20 18 15 12 11 9 5head

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 7: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 8: Ουρά Προτεραιότητας ( priority queue)

Ουρά Προτεραιότητας (priority queue)

εισαγωγή διαγραφήμέγιστου

διαγραφή() εύρεσημέγιστου

αλλαγήπροτεραιότητας

ένωση

διατεταγμένοςπίνακας

διατεταγμένηλίστα

μη διατεταγμένηλίστα

μη διατεταγμένοςπίνακας

σωρός

διωνυμική ουρά

καλύτεροςθεωρητικά

() Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

()

()

()

() Απαιτεί πιο σύνθετη συνδεδεμένη λίστα πχ διπλή λίστα

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 9: Ουρά Προτεραιότητας ( priority queue)

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 10: Ουρά Προτεραιότητας ( priority queue)

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Σωρός μέγιστου κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

2

5 4

11

18

7

20 15

9

13

6

12

σωρός μέγιστου γρήγορη εξαγωγή μέγιστου στοιχείου

σωρός ελάχιστου γρήγορη εξαγωγή ελάχιστου στοιχείου

Σωρός ελάχιστου κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 11: Ουρά Προτεραιότητας ( priority queue)

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

20

18 12

11

2

5

4 13

15

7

9

6

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 12: Ουρά Προτεραιότητας ( priority queue)

Δομή Δεδομένων Σωρού (heap)

Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας

20

18 12

11

2

5

4 13

15

7

9

6

Αναπαράσταση ως πλήρες δυαδικό δένδρο κάθε κόμβος έχει κλειδί μικρότεροή ίσο με το κλειδί του γονέα του

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

20 18 12 11 15 9 5 4 2 7 13 6

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Υλοποίηση με πίνακα το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1

η ρίζα έχει το μέγιστο κλειδί

ύψος lgN

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 13: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 14: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

19

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 15: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

19

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 16: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 17: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μετο γονέα

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 18: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

19 12

11

2

5

4 13

18

15

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixUp(int k) while (kgt1 ampamp less(k2 k)) exch(kk2) k=k2

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 19: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

20

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 20: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

14

18 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

παραβίαση τηςσυνθήκης σωρού

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 21: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

14 12

11

2

5

4 13

15

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 22: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 23: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

αντιμετάθεση μεμεγαλύτερο παιδί

η συνθήκη σωρούαποκαταστάθηκε

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 24: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Συνθήκη σωρού κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

private void fixDown(int k) int j while (2k lt= N) j=2k if (jltN ampamp less(jj+1)) j++ if (less(kj)) break exch(kj) k=j

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 25: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 26: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

18

15 12

11

2

5

4 13

14

7

9

6

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 27: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

6

15 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 28: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

6 12

11

2

5

4 13

14

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 29: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 13

6

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 30: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

διαγραφή μέγιστου

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 31: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ουρά προτεραιότητας βασισμένη σε σωρό

15

14 12

11

2

5

4 6

13

7

9

18

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

διαγραφή μέγιστου

public class MaxPQltKey extends ComparableltKeygtgt private Key[] pq private int N = 0

MaxPQ(int maxN) pq = (Key[]) new Comparable[maxN+1]

public void insert(Key v) pq[++N]=v fixUp(N)

public Key delMax() Key max = pq[1] exch(1N) pq[N--] = null fixDown(1) return max

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 32: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 33: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 34: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με ουρά προτεραιότητας

public static void PQsort(Comparable a[])

int N = alength

MaxPQ pq = new MaxPQ(N)

for (int k=0 kltN k++) pqinsert(a[k])

for (int k=N-1 kgt=0 k--) a[k]=pqdelMax()

Διαδοχική εισαγωγή των στοιχείων στην ουρά O(NlogN) χρόνος

Διαδοχική εξαγωγήμέγιστου στοιχείου O(NlogN) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 35: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Ταξινομεί σε αύξουσα σειρά τα στοιχεία a[1] έως a[Ν] Χρησιμοποιούμε παραλλαγές των μεθόδων fixDown fixUp και exch οι οποίες δέχονται τον πίνακα a[] και το Ν ως ορίσματα

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 36: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 37: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

5

12

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 38: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 39: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 15

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 40: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 41: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 42: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 43: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

4 18

9

2

14

7 13

15

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 44: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 45: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 13

4

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 46: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 47: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

11

15 18

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 48: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 49: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 11

9

2

14

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 50: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 51: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

18

15 14

9

2

11

7 4

13

6

12

5

[1]

[2] [3]

[7][6]

[12][11][10][9][8]

[4] [5]

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 52: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι σε Σωρούς

Ταξινόμηση με σωρό

Απόδειξη για

Ο αριθμός των αντιμεταθέσεων είναι το πολύ

public static void heapsort(Comparable[] a) int N = alength for (int k=N2 kgt=1 k--) fixDown(akN) while (Ngt1) exch(a1N--) fixDown(a1N)

Τακτοποίηση σωρού(αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 53: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

a[i] lt a[j]

NAI

OXI

Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσειςανά δύο των στοιχείων της ακολουθίας

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

Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 54: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 55: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 56: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[123]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 57: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[1]lta[2]

a[1]lta[3]

a[2]lta[3]

a[1]lta[3]

a[2]lta[3]

a[1]lta[2]lta[3]

a[1]lta[3]lta[2]

a[3]lta[1]lta[2]

Πχ για n=3

a[2]lta[1]lta[3]

a[2]lta[3]lta[1]

a[3]lta[2]lta[1]

Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Για a=[213]

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 58: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 59: Ουρά Προτεραιότητας ( priority queue)

Αλγόριθμοι Ταξινόμησης

Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις

Δένδρο απόφασης

a[i]lta[j]

a[b]lta[c]

a[f]lta[g]

a[h]lta[i]

a[d]lta[e]

a[j]lta[k]

a[l]lta[m]

bull Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n φύλλα

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

στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Ύψος δυαδικού δένδρου με n φύλλα =

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 60: Ουρά Προτεραιότητας ( priority queue)

δ-Σωρός

Αποτελεί άμεση γενίκευση του δυαδικού σωρού Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά

2

6 14

15 8 7 9

4

5

[1]

[2] [4]

[9][8][6] [7][5]

[3]

3-σωρός ελάχιστου

Εισαγωγή χρόνος

Διαγραφή χρόνος

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 61: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 62: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 63: Ουρά Προτεραιότητας ( priority queue)

12

Διωνυμικές ουρές (binomial queues)

Υλοποίηση

20

16

12

148 5

18

7

20

16

12 14

8

518

7

20

16

18

578 14

Δυαδικό δένδρο Νοητή αναπαράσταση Διωνυμικό δένδρο διατεταγμένο σε σωρό

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 64: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 65: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμικά δένδρα

Το διωνυμικό δένδρο έχει κόμβους κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 66: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό

20

16

12

148 5

18

7

Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου

Σωρός δύναμης του 2

Δένδρο αριστερά διατεταγμένο σε σωρό στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες

20

16

12 14

8

518

7

Διωνυμικό δένδρο

Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιούαδελφού δίνει σωρό δύναμης του 2

bull Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2bull Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζαςbull Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 67: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

20

16

12

148 5

18

7

20

16

12 14

8

518

7

15

11

9

106 4

13

3

20

15

11

9

106 4

13

3

16

12

148 5

18

7

15

11

9 10

6

413

3

20

16

12 14

8

518

7

15

11

9 10

6

413

3

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 68: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Παράδειγμα διωνυμική ουρά μεγέθους 13 = (1101)2

Μια διωνυμική ουρά με κλειδιά αποτελείται από το πολύ σωρούς

δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 69: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 70: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 71: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 72: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

1101+ 0001 1110

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 73: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

1110 + 0001 1111

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 74: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 75: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13 4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 76: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

15

Εισαγωγή στοιχείου

3

13

4

1111+ 0001 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 77: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 78: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 00

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 79: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

11

9

106

Εισαγωγή στοιχείου

15

3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 80: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 81: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

20

16

12

148 5

18

7

Εισαγωγή στοιχείου

15

11

9

106 3

13

4

1111+ 0001 0000

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 82: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Εισαγωγή στοιχείου

20

15

11

9

106 3

13

4

16

12

148 5

18

7

1111+ 0001 10000

κρατούμενο 0

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 83: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Διαγραφή μέγιστου από σωρό δύναμης του 2

20

15

11

9

106 3

13

4

16

12

148 5

18

7

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 84: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

15

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου από σωρό δύναμης του 2

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 85: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

21

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 86: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

11

9

106 3

13

4

16

12

148 5

18

7

Διαγραφή μέγιστου

Πρέπει να ενώσουμε δύο ουρές

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 87: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011

κρατούμενο 0

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 88: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148 5

18

7

Ένωση δύο διωνυμικών ουρών

11

13

9

111+ 011 0

κρατούμενο 1

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 89: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

18

7

Ένωση δύο διωνυμικών ουρών

13

9

111+ 011 10

κρατούμενο 1

11

5

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 90: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 10

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 91: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

16

12

148

Ένωση δύο διωνυμικών ουρών

111+ 011 010

κρατούμενο 1

11

5

18

13

79

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 92: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Ένωση δύο διωνυμικών ουρών

111+ 011 1010

κρατούμενο 0

11

5

18

16

12

148 7

13

9

Χρόνος =

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 93: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Διωνυμική ουρά

Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της

Κατασκευή διωνυμικής ουράς με κλειδιά

Η κατασκευή μιας διωνυμικής ουράς με διαδοχικές εισαγωγές σε αρχικά κενή

ουρά απαιτεί χρόνο

Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που

αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 94: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 95: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

1ο ψηφίο από το τέλος

αλλάζει με κάθε επαύξηση

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 96: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

2ο ψηφίο από το τέλος

αλλάζει με κάθε δεύτερη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 97: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

3ο ψηφίο από το τέλος

αλλάζει με κάθε τέταρτη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 98: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Επαύξηση δυαδικού μετρητή

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

4ο ψηφίο από το τέλος

αλλάζει με κάθε όγδοη επαύξηση

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

0 1 0 1

0 1 1 0

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

1 0 1 1

1 1 0 0

1 1 0 1

1 1 1 0

1 1 1 1

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 99: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 100: Ουρά Προτεραιότητας ( priority queue)

Διωνυμικές ουρές (binomial queues)

Έστω ένας μετρητής C με k bits μια πράξη επαύξησης θέτει

Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις

Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει

συνολικά φορές

Σύνολο αλλαγών για όλα τα ψηφία =

Επαύξηση δυαδικού μετρητή

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci
Page 101: Ουρά Προτεραιότητας ( priority queue)

Σωρός Fibonacci

Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή

23 7 3

18 52 38

39 41

17

30

24

26 46

35

Αντισταθμιστικοί χρόνοι εκτέλεσης

δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί

πλήθος κόμβων

εισαγωγή ένωση εύρεση ελάχιστου μείωση κλειδιού

διαγραφή εξαγωγή ελάχιστου

  • Ουρά Προτεραιότητας (priority queue)
  • Ουρά Προτεραιότητας (priority queue) (2)
  • Ουρά Προτεραιότητας (priority queue) (3)
  • Ουρά Προτεραιότητας (priority queue) (4)
  • Ουρά Προτεραιότητας (priority queue) (5)
  • Ουρά Προτεραιότητας (priority queue) (6)
  • Ουρά Προτεραιότητας (priority queue) (7)
  • Ουρά Προτεραιότητας (priority queue) (8)
  • Δομή Δεδομένων Σωρού (heap)
  • Δομή Δεδομένων Σωρού (heap) (2)
  • Δομή Δεδομένων Σωρού (heap) (3)
  • Δομή Δεδομένων Σωρού (heap) (4)
  • Αλγόριθμοι σε Σωρούς
  • Αλγόριθμοι σε Σωρούς (2)
  • Αλγόριθμοι σε Σωρούς (3)
  • Αλγόριθμοι σε Σωρούς (4)
  • Αλγόριθμοι σε Σωρούς (5)
  • Αλγόριθμοι σε Σωρούς (6)
  • Αλγόριθμοι σε Σωρούς (7)
  • Αλγόριθμοι σε Σωρούς (8)
  • Αλγόριθμοι σε Σωρούς (9)
  • Αλγόριθμοι σε Σωρούς (10)
  • Αλγόριθμοι σε Σωρούς (11)
  • Αλγόριθμοι σε Σωρούς (12)
  • Αλγόριθμοι σε Σωρούς (13)
  • Αλγόριθμοι σε Σωρούς (14)
  • Αλγόριθμοι σε Σωρούς (15)
  • Αλγόριθμοι σε Σωρούς (16)
  • Αλγόριθμοι σε Σωρούς (17)
  • Αλγόριθμοι σε Σωρούς (18)
  • Αλγόριθμοι σε Σωρούς (19)
  • Αλγόριθμοι σε Σωρούς (20)
  • Αλγόριθμοι σε Σωρούς (21)
  • Αλγόριθμοι σε Σωρούς (22)
  • Αλγόριθμοι σε Σωρούς (23)
  • Αλγόριθμοι σε Σωρούς (24)
  • Αλγόριθμοι σε Σωρούς (25)
  • Αλγόριθμοι σε Σωρούς (26)
  • Αλγόριθμοι σε Σωρούς (27)
  • Αλγόριθμοι σε Σωρούς (28)
  • Αλγόριθμοι σε Σωρούς (29)
  • Αλγόριθμοι σε Σωρούς (30)
  • Αλγόριθμοι σε Σωρούς (31)
  • Αλγόριθμοι σε Σωρούς (32)
  • Αλγόριθμοι σε Σωρούς (33)
  • Αλγόριθμοι σε Σωρούς (34)
  • Αλγόριθμοι σε Σωρούς (35)
  • Αλγόριθμοι σε Σωρούς (36)
  • Αλγόριθμοι σε Σωρούς (37)
  • Αλγόριθμοι σε Σωρούς (38)
  • Αλγόριθμοι σε Σωρούς (39)
  • Αλγόριθμοι σε Σωρούς (40)
  • Αλγόριθμοι Ταξινόμησης
  • Αλγόριθμοι Ταξινόμησης (2)
  • Αλγόριθμοι Ταξινόμησης (3)
  • Αλγόριθμοι Ταξινόμησης (4)
  • Αλγόριθμοι Ταξινόμησης (5)
  • Αλγόριθμοι Ταξινόμησης (6)
  • Αλγόριθμοι Ταξινόμησης (7)
  • δ-Σωρός
  • Διωνυμικές ουρές (binomial queues)
  • Διωνυμικές ουρές (binomial queues) (2)
  • Διωνυμικές ουρές (binomial queues) (3)
  • Διωνυμικές ουρές (binomial queues) (4)
  • Διωνυμικές ουρές (binomial queues) (5)
  • Διωνυμικές ουρές (binomial queues) (6)
  • Διωνυμικές ουρές (binomial queues) (7)
  • Διωνυμικές ουρές (binomial queues) (8)
  • Διωνυμικές ουρές (binomial queues) (9)
  • Διωνυμικές ουρές (binomial queues) (10)
  • Διωνυμικές ουρές (binomial queues) (11)
  • Διωνυμικές ουρές (binomial queues) (12)
  • Διωνυμικές ουρές (binomial queues) (13)
  • Διωνυμικές ουρές (binomial queues) (14)
  • Διωνυμικές ουρές (binomial queues) (15)
  • Διωνυμικές ουρές (binomial queues) (16)
  • Διωνυμικές ουρές (binomial queues) (17)
  • Διωνυμικές ουρές (binomial queues) (18)
  • Διωνυμικές ουρές (binomial queues) (19)
  • Διωνυμικές ουρές (binomial queues) (20)
  • Διωνυμικές ουρές (binomial queues) (21)
  • Διωνυμικές ουρές (binomial queues) (22)
  • Διωνυμικές ουρές (binomial queues) (23)
  • Διωνυμικές ουρές (binomial queues) (24)
  • Διωνυμικές ουρές (binomial queues) (25)
  • Διωνυμικές ουρές (binomial queues) (26)
  • Διωνυμικές ουρές (binomial queues) (27)
  • Διωνυμικές ουρές (binomial queues) (28)
  • Διωνυμικές ουρές (binomial queues) (29)
  • Διωνυμικές ουρές (binomial queues) (30)
  • Διωνυμικές ουρές (binomial queues) (31)
  • Διωνυμικές ουρές (binomial queues) (32)
  • Διωνυμικές ουρές (binomial queues) (33)
  • Διωνυμικές ουρές (binomial queues) (34)
  • Διωνυμικές ουρές (binomial queues) (35)
  • Διωνυμικές ουρές (binomial queues) (36)
  • Διωνυμικές ουρές (binomial queues) (37)
  • Διωνυμικές ουρές (binomial queues) (38)
  • Διωνυμικές ουρές (binomial queues) (39)
  • Διωνυμικές ουρές (binomial queues) (40)
  • Σωρός Fibonacci