EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

...ασύγχρονα μαθήματα γλώσσας C

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 17:08

Tasos09 έγραψε:Μία παρατήρηση για το παράδειγμα της τετραγωνικής πολυπλοκότητας.

Η πολυπλοκότητα για την εκχώρηση στοιχείων σε έναν διδιάστατο πίνακα μπορεί μεν να χρησιμοποιεί 2 for για να επιτευχθεί αλλά αυτό δεν το κάνει να έχει τετραγωνική πολυπλοκότητα. Η πολυπλοκότητα είναι σταθερή ως προς το μέγεθος της εισόδου, αφού ως είσοδος θα υπάρχουν ΝχΝ στοιχεία, και όχι Ν.

Μπορείς να αλλάξεις το παράδειγμα με τον αλγόριθμο bubblesort για ταξινόμηση που είναι Ο(n²).


Nαι ο bubble sort ειναι Ο(n²) αλλα δεν τον έβαλα. Ναι ειχα διαβασει πως η πολυπλοκοτητα βγαινει και συναρτήσει της εισόδου. Για να καταλαβω καλυτερα το προβλημα σε αυτο που έχω βάλει ειναι η δήλωση στατικού πίνακα? Στον bubble sort δεν τον κανει να έχει τετραγωνικη πολυπλοκότητα οι 2 for αλλα το if που έχει ? Εξηγησε λιγο παραπανω γιατι έχει επελθει σύγχυση.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Tasos09 » 15 Οκτ 2011, 17:14

Στη bubblesort έχεις Ν στοιχεία και χρησιμοποιείς τα 2 for για να τα ταξινομήσεις. Άρα έχεις Ν στοιχεία επί Ν φορές που προσπελαύνεις το καθένα. Άρα συνολικά Ν² πράξεις.
Στην εισαγωγή στο διδιάστατο πίνακα έχεις Ν*Ν στοιχεία σαν είσοδο και απλά κάνεις Ν*Ν εμφανίσεις πχ. Άρα αν θέσεις Ν*Ν = n ως είσοδο η πολυπλοκότητά σου θα είναι O(n).
Tasos09
babeTUX
babeTUX
 
Δημοσιεύσεις: 8
Εγγραφή: 22 Δεκ 2009, 16:32
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 17:49

Tasos09 έγραψε:Στη bubblesort έχεις Ν στοιχεία και χρησιμοποιείς τα 2 for για να τα ταξινομήσεις. Άρα έχεις Ν στοιχεία επί Ν φορές που προσπελαύνεις το καθένα. Άρα συνολικά Ν² πράξεις.
Στην εισαγωγή στο διδιάστατο πίνακα έχεις Ν*Ν στοιχεία σαν είσοδο και απλά κάνεις Ν*Ν εμφανίσεις πχ. Άρα αν θέσεις Ν*Ν = n ως είσοδο η πολυπλοκότητά σου θα είναι O(n).


Αχα! Καταλαβα τι εννοεις. Για παράδειγμα αν είχα εναν πίνακα 2 Χ 2 τότε θα είχα :

Κώδικας: Επιλογή όλων


11 12
21 22



4 στοιχεία δεδομένη είσοδος δηλαδη και 4 στοιχεία δεδομένη έξοδος δεν υπάρχει ούτε άυξηση ούτε μείωση αρα σταθερή πολυπλοκότητα
πφφφ ακομη δεν μπορω να καταλαβω 100% παντως τον ακριβη ορισμο της πολυπλοκότητας , ισως βεβαια φταιει οτι δεν υπάρχουν κάποια στανταρ βήματα αλγορίθμου στο γέμισμα ενος δισδιάστατου πίνακα που επιχείρησα να κάνω πιο πάνω ετσι δεν ειναι?

Τωρα σχετικα με τον bubble sort θα τον βάλω αλλα δεν μπορω να καταλάβω το εξής.

ΑΝ εχω πχ την διάταξη 4 3 2 1 και θελω να την ταξινομήσω με χαρτι και μολύβι οι πράξεις που χρειάζονται μου βγήκαν 6!
Kαι κάθε φορα οι συνολικές πράξεις ηταν Ν-1 ... Ν-2 ...κτλπ
ΑΠλα με έχει μπερδέψει το γεγονός οτι έδωσα βάρος στις for για να κατανοήσω την πολυπλοκότητα :/

p.s Βασικα ουτε αυτο που έχω στην 1η περίπτωση ειναι γραμμική πολυπλοκότητα αλλα σταθερή νομιζω .. εφοσον εξαρχης προδικάζω οτι το n=3 αν εβαζα πχ ο χρηστης να επιλέγει ποσα θα είναι τα στοιχεία του πινακα που εχω ορισει εγω εξαρχης στο προγραμμα τοτε δεν θα ηταν γραμμικη ας πουμε???
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Tasos09 » 15 Οκτ 2011, 18:15

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

Τώρα για το bubblesort γίνονται (n-1)+(n-2)+2+1 πράξεις. Άρα συνολικά (n(n-1))/2 πράξεις που ασυμπτωτικά είναι Ο(n²).

Τώρα για την πολυπλοκότητα γενικά.
Ένας απλός ορισμός για την πολυπλοκότητα θα μπορούσε να είναι ο παρακάτω:

Πολυπλοκότητα ενός αλγορίθμου με είσοδο Ν στοιχείων ορίζεται ως ο χρόνος/χώρος (ή γενικα οποιοδήποτε χαρακτηριστικό επιθυμούμε) που χρειαζεται ο αλγόριθμος για να εκτελεστεί συναρτήσει του μεγέθους εισόδου.

Έτσι όταν έχουμε για παράδειγμα τον παρακάτω αλγόριθμο:
Κώδικας: Επιλογή όλων

ΑΛΓΟΡΙΘΜΟΣ Χ (είσοδος Ν στοιχεία)
χ = 1;
υ = 2;
Εμφάνισε χ + υ;

Είναι προφανές ότι ο αλγόριθμος αυτός αν και έχει Ν στοιχεία θα εκτελείτε πάντα σε 3 βήματα, όσες και οι εντολές του αλγορίθμου. Επομένως η πολυπλοκότητά του θα είναι σταθερή αφού δεν εξαρτάται απ το Ν. (Δε να ανακατέψω ακόμα ασυμπτωτικούς συμβολισμούς.)

Ο αλγόριθμος εισαγωγής στοιχείων στον πίνακα είναι όντως γραμμικός, γιατί με είσοδο Ν στοιχεία θα πραγματοποιηθούν Ν πράξεις για την εκτέλεσή του.

Τώρα αν υποθέσουμε ότι έχουμε τον παρακάτω αλγόριθμο:

Κώδικας: Επιλογή όλων

ΑΛΓΟΡΙΘΜΟΣ Υ (είσοδος Ν στοιχεία)
Για i απο 1 μεχρι Ν
Για j από 1 μέχρι Ν
ΕΚΤΕΛΕΣΕ ΚΑΠΟΙΑ ΠΡΑΞΗ ΠΑΝΩ ΣΤΑ ΔΕΔΟΜΕΝΑ ΕΙΣΟΔΟΥ ΜΑΣ.


Είναι προφανές ότι ενώ έχουμε είσοδο Ν στοιχεία ο αλγόριθμός μας θα κάνει Ν² βήματα για να φέρει σε πέρας τον υπολογισμό μας. Είναι δηλαδή τετραγωνικής πολυπλοκότητας ως προς το Ν.

Αν τώρα πάρουμε έναν αλγόριθμου που θα υπολογίζει όλες τις δυνατές μεταθέσεις Ν στοιχείων (οι οποίες είναι Ν!) θα χρειαστούν σίγουρα και τουλάχιστον Ν! βήματα μόνο για την εμφάνιση των μεταθέσεων. Άρα είναι εκθετικής πολυπλοκότητας (και καλύτερα μη δοκιμάσει κανείς να δώσει είσοδο πάνω από 15 στοιχεία. :P).

Για τυχών διευκρινήσεις μη διστάσεις να ρωτήσεις.
Tasos09
babeTUX
babeTUX
 
Δημοσιεύσεις: 8
Εγγραφή: 22 Δεκ 2009, 16:32
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 18:27

Οχι δεν έχω αποριες!!!
Αν καταλαβα καλα δεν έχει σχέση το ποσες for χρησιμοποιεις?
Oσο το πως τις χρησιμοποιείς για να δουλέψεις τα βήματα ενος αλγοριθμου ε?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Tasos09 » 15 Οκτ 2011, 18:30

Κάπως έτσι. Αν χρησιμοποιήσεις 10 φορ για να γεμίσεις πίνακα 10 διαστάσεων δε θα έχει n^10 πολυπλοκότητα για παράδειγμα αλλά γραμμική. Η πολυπλοκότητα εξαρτάται απ τις πράξεις που θα γίνουν πάνω στα στοιχεία που έχεις σαν είσοδο.
Tasos09
babeTUX
babeTUX
 
Δημοσιεύσεις: 8
Εγγραφή: 22 Δεκ 2009, 16:32
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 18:33

Tasos09 έγραψε:Κάπως έτσι. Αν χρησιμοποιήσεις 10 φορ για να γεμίσεις πίνακα 10 διαστάσεων δε θα έχει n^10 πολυπλοκότητα για παράδειγμα αλλά γραμμική. Η πολυπλοκότητα εξαρτάται απ τις πράξεις που θα γίνουν πάνω στα στοιχεία που έχεις σαν είσοδο.


Μαλιστα , αρα εχω κανει και ενα λάθος στo Ο(n^3) που έχω στον οδηγό και πρέπει να το διορθώσω! Γιατι ουσιαστικα συμφωνα με αυτα που λεμε
και αυτο σε γραμμικη αναφερεται.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Tasos09 » 15 Οκτ 2011, 18:35

Βασικά ναι. Βάλε παντού i < N. Και βάλε και για είσοδο Ν στοιχεία σε έναν πίνακα πχ και είσαι οκ. Όπως το παράδειγμα που σου έδωσα παραπάνω.
Tasos09
babeTUX
babeTUX
 
Δημοσιεύσεις: 8
Εγγραφή: 22 Δεκ 2009, 16:32
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 19:00

Tasos09 έγραψε:Βασικά ναι. Βάλε παντού i < N. Και βάλε και για είσοδο Ν στοιχεία σε έναν πίνακα πχ και είσαι οκ. Όπως το παράδειγμα που σου έδωσα παραπάνω.


Εκεινο παντως που δεν έχω ξεδιαλύνει 100% ειναι οτι αν ας πουμε για N ειχαμε το 10
τοτε και πάλι δεν θα είχαμε 10*10? αρα 100 επομενως αν ηθελα να γεμισω εναν πινακα
10χ10 τοτε το γέμισμα και ο αριθμος των φορων που θα έπρεπε να γινει η εκχώρηση δεν θα ήταν 100?
Αρα αυτο δεν ειναι τετραγωνικη ? Βασικα νομιζω τετραγωνικη θα ειναι μονο αν δώσεις 10 στοιχεια και σου κάνει 100 πράξεις
ενω αν δωσεις 100 στοιχεια και σου κανει 100 πραξεις τοτε ειναι γραμμικη ετσι?

Μισο λεπτο κοιταω ξανα τον bubble sort να δω και στην πράξη με μεγαλυτερες λιστες αριθμων (διατάξεις) αυτα που ειπαμε.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: EIΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό Star_Light » 15 Οκτ 2011, 19:13

Λοιπον τα συμπεράσματα μου εχουν ως εξης :

Δεν αρκεί μονο for ειτε ειναι εμφωλιασμένη ειτε το οτιδηποτε για να αποφανθείς αν η πολυπλοκότητα ειναι τετραγωνική ή οχι
γιατι και να έχεις το προβλημα να επιλυσεις με το γέμισμα ενος πινακα δισδιάστατου αν δώσεις NxN = 10 X 10 εισοδο τοτε και παλι ειναι γραμμικη
η πολυπλοκοτητα μιας και δίνεις 100 στοιχεια για να πάρεις 100 στοιχεία σταθερή επισης δεν ειναι γιατι δεν θα παίρνεις παντοτε 100 στοιχεια.... αναλογα με την εισοδο σου οπως εδειξε και στο παραδειγμα του πιο πανω ο Τασος. Τετραγωνικη πολυπλοκοτητα σημαινει πως βάζω 10 στοιχεια και οι πράξεις βγαινουν 100 ας πουμε... οπως στο παράδειγμα της Wikipedia για τον bubble sort εδω => http://en.wikipedia.org/wiki/Bubble_sort που απο το παράδειγμα του μπορεις να πάρεις 8 στοιχεια σαν εισοδο σε εναν πινακα ας πουμε και τελικα n(n-1) / 2 = 8*7 / 2 = 28 πράξεις ... οσο αυξάνει λοιπον η είσοδος n στον αλγόριθμο τοσο αυξάνει και η έξοδος (τετραγωνικά στον συγκεκριμενο αλγοριθμο) και βάσει αυτης της εξόδου θα μπορέσεις να χαρακτηρίσεις αν ειναι βέλτιστος η χάλια απο θέμα επίδοσης (αν σου λύνει γρηγορα το προβλημα ας πουμε).

Περιμενω και τον Τασο να επιβεβαιωσει αυτα που εγραψα για να τα προσθέσω ωστε ο οδηγος να ειναι ακριβης και σαφής.

P.S Υπάρχουν βεβαια μερικές αποριες ακομη σε στυλ... οταν βάλω σαν 10 στοιχεια εισοδο στον Bubble sort παιρνω 45 πράξεις ενω πιο πανω λεω οτι ξερεις τετραγωνικη σημαινει... βαζω 10 παιρνω 100.... αυτο μου ξεφευγει λιγο οτι... πως μπορω να αποφανθω οτι κατι ειναι τετραγωνικο σε αυτη την περιπτωση και οχι εκθετικο ας πουμε...

ειπες οτι η συναρτηση του παραγοντικου δινει εκθετικη αύξηση
δηλαδη

Κώδικας: Επιλογή όλων


3!=6
4!=24
5!=120

κτλπ....


ενω στον bubble sort

Κώδικας: Επιλογή όλων


4 -> 6
5 -> 12
6->15


η αύξηση της εξόδου με πιο μικρο ρυθμό ας το πουμε χαρακτηρίζει αν ο αλγοριθμος έχει τετραγωνική ή εκθετική πολυπλοκότητα?????
Τελευταία επεξεργασία από Star_Light και 17 Οκτ 2011, 15:37, έχει επεξεργασθεί 1 φορά/ες συνολικά
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Μαθήματα C

cron