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

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

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

Δημοσίευσηαπό Star_Light » 12 Οκτ 2011, 03:20

Λοιπόν προσφατα διαπίστωσα πως νήμα για αυτο το θέμα δεν υπάρχει και καλο θα ειναι να δημιουργηθεί ενα καινούργιο στο οποίο οσοι θέλουν θα συζητάνε εδω χωρις να βαραίνουν τα αλλα θρεντς της C τα οποια ειναι καθαρα για κωδικα ας πουμε.

Με την δημιουργία αυτου του θρέντ θα παραθέσω 2-3 βασικα πράγματα (ακριβώς οσα μου επιτρέπει η σύντομη "ερευνα" μου πανω στο συγκεκριμένο θέμα της επιστημης των υπολογιστών το οποιο ειναι τεράστιο και φυσικα δεν μπορει να προσεγγισθεί ολοκληρωτικά απο εναν οδηγο πόσο μαλλον απο μια σύντομη έρευνα για αυτο και όσοι γνωρίζετε κατι παραπάνω απο αυτα που θα παρουσιασθούν εδω , μην ντρέπεστε παιδια!!! Μπειτε να συζητήσουμε και να μοιραστούμε αποψεις και γνώση).

================================================================================================================
Περιεχόμενα

- Τί ειναι η Πολυπλοκότητα

- Τι είναι ενας Αλγόριθμος

- Τι είναι ενας Λογάριθμος

- Βασικές Πολυπλοκότητες

================================================================================================================


Πολυπλοκότητα ειναι ο αριθμός των βημάτων που χρησιμοποιούνται για να λύσει το πρόβλημα ένας αλγόριθμος συναρτήσει της εισόδου του (που έχει σχεδιαστεί για αυτο το πρόβλημα) οταν μιλάμε για χρονική πολυπλοκότητα . Η πολυπλοκότητα διαιρείται σε 2 κύριους αρχικούς τομείς ο ένας προσδιορίζει τον χρόνο που χρειάζεται για να λύσει το πρόβλημα ένας δεδομένος αλγόριθμος οπως προαναφέρεται και αρα μιλάμε για χρονική πολυπλοκότητα ενω ο δε άλλος αναφέρεται στους βασικούς πόρους που χρειάζεται ενας αλγόριθμος (μνήμη) οποτε και μιλάμε για χωρική πολυπλοκότητα και στις 2 περιπτώσεις βεβαια οι υπολογισμοί της πολυπλοκότητας γίνονται συναρτήσει της εισόδου . Η πολυπλοκότητα αναφέρεται είτε σαν υπολογιστική είτε σαν Kolmogorov απο το όνομα του Ρώσου Μαθηματικού Kolmogorov

http://en.wikipedia.org/wiki/Andrey_Kolmogorov

Λίγο πριν ξεκινήσει κάποιος να προγραμματίζει θα ήταν αρκετά χρήσιμο να γνωρίζει και να έχει καταλάβει τι ακριβως είναι ενας αλγόριθμος , τι ειναι ακριβώς αυτο που επιχειρεί να υλοποιήσει μεσω κάποιας γλώσσας προγραμματισμού. Σαν έναν πρώτο απλό αλγόριθμο θα μπορούσαμε να φανταστούμε το Κόσκινο του Ερατοσθένη ο οποίος ορίζει βήματα για την λύση ενος προβλήματος το οποίο έχει να κάνει με την εύρεση των πρώτων αριθμών απο μια δοθείσα λίστα η οποία ξεκινά απο (2 , .... , n) μιας και τα 0 , 1 δεν αποτελούν πρώτους αριθμούς . Ο αλγόριθμος λοιπον ειναι ένα πλήθος απο βήματα που θα ακολουθήσουμε για να λύσουμε ένα δεδομένο πρόβλημα.

Ποια η διαφορά ενος Αλγόριθμου και μιας Υλοποιήσης ?

Ένας Αλγόριθμος ειναι ανεξάρτητος και ξεχωριστός απο την οποιαδήποτε γλώσσα , και μπορεί φυσικά να εκφραστεί και να υλοποιηθεί
με πολλούς διαφορετικούς τρόπους συμπεριλαμβανομενων και του χαρτιου - μολυβιού . Ο αλγόριθμος ειναι ενα "πλάνο" απο το οποίο γράφεις το προγραμμά σου , είπαμε πως ειναι ανεξάρτητος και η ίδια η διαδικασία του ειναι λιγο - πολυ ενα άυλο πράγμα! Ακριβώς και ένας Ψευδοκώδικας ριναι μια περιγραφή ή αναπαράσταση ενος αλγορίθμου που δεν ειναι τυπικά σε θέση να εκτελεστεί απο τις μηχανές στην μορφή στην οποία βρίσκεται.

Μια Υλοποιήση - εκτέλεση (implementation) λοιπον αναφέρεται σε έναν αριθμό απο πιθανές αναπαραστάσεις του αλγοριθμου που μπορεί να εκτελεστεί απο εναν ΗΥ.

Για παράδειγμα η C δεν γνωρίζει τον τρόπο εκτέλεσης του Ψευδοκώδικα ετσι χρειάζεται να γράψεις τον κωδικα σου σε C σύνταξη.

Τι είναι ένας λογάριθμος???

Και εδω αρχίζουν τα ωραία :) , άλλωστε πριν κάποιος επιχειρήσει να διαβάσει πολυπολοκότητες της μορφής -> O(nlogn) θα πρέπει να έχει κατανοήσει τι είναι ενας λογάριθμος . Ένας λογάριθμος είναι η δύναμη στην οποία θα πρέπει να υψωθεί ενας δεδομένος αριθμός (η βάση του η οποία θα δίνεται πάντα) ωστε να παράξει τελικα αυτη την ποσότητα. Για παράδειγμα ο λογάριθμος του 16 με βάση το 2 ποιος είναι? -> log2(16)

Ψάχνω εκείνον τον αριθμό ο οποίος όταν υψωθεί στην βάση (δηλαδη στο 2 εδώ) θα μου δώσει το 16. Έφοσον ψάχνω κατι για να το βρώ θα πρέπει να δημιουργήσω μια εξίσωση και επειδή ο άγνωστος ειναι δύναμη τοτε η εξισωσή αυτη θα είναι εκθετική απο ανθρώπινη λοιπον έκφραση σε μαθηματική αναπαράσταση το παραπανω ειναι :

Κώδικας: Επιλογή όλων
2^x = 16


Το 16 μπορεί να γραφτεί σαν 2^4 επομένως

Κώδικας: Επιλογή όλων
2^x = 2^4


Εφόσον τα 2 μέλη έχουν ίσες βάσεις μπορώ να εξισώσω τους εκθέτες και να βρώ την λύση της εξίσωσης οποτε πράγματι x=4 , αν προσεξει κάποιος την παραπανω εξίσωση άλλωστε το μονο που μένει για να ισχύει η ισότητα ειναι να βάλω το 4 στο αριστερό εκθέτη

Κώδικας: Επιλογή όλων
2^4 = 2^4 => 16=16 // η επαλήθευση της εξίσωσης


http://el.wikipedia.org/wiki/%CE%9B%CE% ... E%BF%CF%82

Οπου το μάτι μου έπεσε πανω σε αυτο ->

Κώδικας: Επιλογή όλων
ln(n!)= ln(1) + ln(2) + .... + ln(n)


στον λογάριθμο δηλαδη του n!

n!=1*2*...*n

σύμφωνα με την ιδιότητα των λογαρίθμων

Κώδικας: Επιλογή όλων
logb(xy) = logb(x)+logb(y) // b ειναι η βάση


τοτε θα έχουμε αρχικά

Κώδικας: Επιλογή όλων
ln(n!)=ln(1*2*...*n) => ln(n!) =ln(1) + ln(2) + ... + ln(n)


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


Και πάμε τωρα να δούμε μερικές βασικές πολυπλοκότητες (μαζι με παράθεση απλων κωδίκων σε C )

- Γραμμική Πολυπλοκότητα Τάξης O(n)
- Τετραγωνική Πολυπλοκότητα Τάξης O(n^2)

Για την γραμμικη πολυπλοκότητα έχουμε τον ακόλουθο κώδικα :

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

#include <stdio.h>
int main ()
{

int array[n];
int i;

printf("Dwste to n: ");
scanf("%d",&n);

for(i=0; i<n; i++)
{
array[i]=i;
printf("\n\t%d",array[i]);
}

return 0;
}


ΠΡΟΣΟΧΗ:
Εδώ η χρονική πολυπλοκότητα στο γέμισμα ενος μονοδιάστατου πίνακα ακεραίων αριθμών είναι ίση με n (Για i=0,1,2,...,n)
αυτο ειναι ένα παράδειγμα γραμμικής πολυπλοκότητας εφοσον για δεδομένο n (είσοδος) απο τον χρήστη έχουμε δεδομένη έξοδο (όσα και τα στοιχεία που δίνει ο χρήστης ή που θα δώσει) . Άν είχαμε σταθερή πολυπλοκότητα τοτε τα βήματα θα ήταν προκαθορισμένα!
Πχ =>

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

#include <stdio.h>
int main ()
{

int array[3];
int i;


for(i=0; i<3; i++)
{
array[i]=i;
printf("\n\t%d",array[i]);
}

return 0;
}


Ακριβώς 3 βήματα δηλαδη.

Ένας ενδεικτικός κωδικας στην συνέχεια για την τετραγωνική πολυπλοκότητα ειναι ο bubble sort :

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


for(i=0; i<n; i++)
{
for(j=0; j<n-1; j++)
{

if(x[j]>x[j+1])
{
tmp1=x[j+1];
x[j+1]=x[j];
x[j]=tmp1;
}

}
}






Τέλος πάμε να δούμε και την λογαριθμική πολυπλοκότητα αλλα αυτη την φορά θα αφήσω στην άκρη την χρονική και θα καταπιαστούμε για λιγο με μια χωρική πολυπλοκότητα .

Οποιοσδήποτε φυσικός αριθμός Ν μπορεί να αναπαρασταθεί σε δυαδική μορφή σε όχι παραπάνω απο log2(N) + 1 bit , θυμηθείτε ή ανατρέξτε στην συζήτηση που έγινε πιο πάνω για τους λογάριθμους!

Έστω οτι θέλω να αποθηκεύσω τον αριθμό 4 σε ενα υπολογιστικό σύστημα , ποσα bit θα χρειαστούν για την αποθηκευση του ?

Σύμφωνα με την παραπάνω πρόταση θα χρειαστούν όχι παραπάνω απο log2(N) + 1 bit . Καταρχήν ψάχνω τον λογάριθμο του 4 με βάση το 2 <=> δηλαδη ψάχνω ΠΟΙΑ ειναι η δύναμη εκείνη στην οποία οταν υψωθεί το 2 (δηλαδή η συγκεκριμένη βάση) θα παράξει τον αριθμό 4 οκ?
Θα χρειαστεί να λύσω την εκθετική εξίσωση
Κώδικας: Επιλογή όλων
2^x=4
ή ακομη πιο απλα να θυμάμαι οτι 2^2=4 :D επομένως 2 . Θα χρειαστούν όχι παραπάνω απο log2(4) + 1 bit δηλαδη μέχρι 3.

Πραγματικά εφοσον η δυαδική αναπαράσταση του 4 σε ένα υπολογιστικό σύστημα ειναι : 100

Έστω τωρα οτι θέλω να αποθηκεύσω τον 8 τότε :

( log2(8) + 1 ) bit = ( 3 + 1 ) bit = 4 bit πράγματι εφοσον η δυαδική αναπαράσταση του 8 ειναι : 1000

To συμπέρασμα που προκύπτει ειναι το ποσό μνήμης που χρειάζεται για την αποθήκευση του φυσικού Ν αυξάνεται λογαριθμικά με αυτον τον Ν.

Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Μη εμπορική χρήση-Παρόμοια διανομή 3.0 Ελλάδα
Τελευταία επεξεργασία από Star_Light και 15 Οκτ 2011, 20:07, έχει επεξεργασθεί 6 φορά/ες συνολικά
Γνώσεις ⇛ 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ΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Δημοσίευσηαπό konnn » 12 Οκτ 2011, 10:00

Πολυπλοκότητα:
Μετρά με δυο όρια (κατώφλια), το άνω και κάτω δηλαδή τον μέγιστο και ελάχιστο, τον χρόνο που χρειάζεται για να εκτελεστεί ένας αλγόριθμος.Είναι ένα συμαντικό κομμάτι της πληροφορικής αν αναλογιστούμε πως η πληροφορική δεν είναι αυτό που κάνουμε εμείς τώρα [να συζητούμε(αν και η επικοινωνία ήταν ένας λόγος εξάπλωσης του διαδικτύου) και να παίζουμε παιχνίδια ] αλλά η επίλυση συμαντικών και μεγάλων προβλημάτων.Οπότε δεν αρκεί να φτιάξω ένα αλγόριθμο για ένα πρόβλημα, πρέπει να είναι και ο βέλτιστος ως προς το χρόνο εκτέλεσης και ως προς τη χρήση πόρων.
Υπάρχουν λοιπόν αλγόριθμοι που θέλουν Γραμμικό,Λογαριθμικό ή Εκθετικό χρόνο για να εκτελεστούν.Αν θυμηθούμε πως περίπου είναι αυτές οι γραφ. παραστάσεις των συναρτήσεων y=x,y=logx, y=e^x θα και καταλάβουμε πόσο μέγιστο χρόνο χρειάζεται ανά περίπτωση;
Off topic:
Συγχωρέστε για πιθανές παραλήψεις....
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

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

Δημοσίευσηαπό lucinos » 12 Οκτ 2011, 10:26

Βασικά εγώ θα πρόσθετα και τον πολυωνυμικό χρόνο (y=x^c) σαν βασική περίπτωση (φυσικά υπάρχουν άπειρες ακόμα περιπτώσεις αλλά αυτές οι τέσσερις είναι κάπως βασικές)
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

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

Δημοσίευσηαπό konnn » 12 Οκτ 2011, 10:29

lucinos έγραψε:Βασικά εγώ θα πρόσθετα και τον πολυωνυμικό χρόνο (y=x^c) σαν βασική περίπτωση (φυσικά υπάρχουν άπειρες ακόμα περιπτώσεις αλλά αυτές οι τέσσερις είναι κάπως βασικές)

Σωστά, θα έλεγα τρεις , πλυωνυμικό ήθελα να πω και είπα γραμμικό.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

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

Δημοσίευσηαπό sokoban4ever » 12 Οκτ 2011, 14:23

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

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

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

Δημοσίευσηαπό lucinos » 12 Οκτ 2011, 14:40

εννοείται ότι ο γραμμικός μπορεί να θεωρηθεί "υποπερίπτωση" τού πολυωνυμικού χρόνου (c=1), από την άλλη είναι τόσο θεμελιώδης που ίσως αξίζει να αναφέρεται ξεχωριστά.

συχνά διαχωρίζεται στις περιπτώσεις c<1, c=1, c>1 (το c γενικότερα δεν είναι απαραίτητο να είναι ακέραιο αν και η έκφραση πολυώνυμο το υπονοεί, το παν είναι τι θέλουμε να εννοούμε :D :D :D )
Τελευταία επεξεργασία από lucinos και 12 Οκτ 2011, 14:57, έχει επεξεργασθεί 1 φορά/ες συνολικά
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 12 Οκτ 2011, 14:57

Για αρχή θα προσθέσω τις 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ΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

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

Έτοιμος ο οδηγός! Διορθώσεις , επισημάνσεις και παρατηρήσεις ευπρόσδεκτα :)
Γνώσεις ⇛ 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ΣΑΓΩΓΗ ΣΤΗΝ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

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

Δεν το είχα σκεφτεί τον οδηγό γτ πάει πιο πολύ προς αλγορίθμους αλλα πολύ ωραία προσθήκη ;) nice..
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

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

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

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

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

Μπορείς να αλλάξεις το παράδειγμα με τον αλγόριθμο bubblesort για ταξινόμηση που είναι Ο(n²).
Tasos09
babeTUX
babeTUX
 
Δημοσιεύσεις: 8
Εγγραφή: 22 Δεκ 2009, 16:32
Εκτύπωση

Επόμενο

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

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

cron