Υπολογισμός χρόνου εκτέλεσης (υπολογισμός αριθμού πράξεων των εντολών)

Ξεκίνησε από ΣΧΟΙΝΑΣ ΚΩΣΤΑΣ, 27 Δεκ 2015, 09:16:35 ΜΜ

« προηγούμενο - επόμενο »

ΣΧΟΙΝΑΣ ΚΩΣΤΑΣ

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


Αλγόριθμος υπολογισμός_αριθμού_πράξεων
i←1
Όσο i< 100 επανάλαβε
   y←i * 2
   Εμφάνισε y
   i←i + 1
Τέλος_επανάληψης
Τέλος υπολογισμός_αριθμού_πράξεων

ΛΥΣΗ


Για την εκχώρηση i←1  Μία πράξη (1)
Για την εντολή  Όσο i< 100 αντιστοιχούν 100 πράξεις για τον έλεγχο του i (100)
Για την εντολή  y←i * 2    αντιστοιχούν 2 Χ 99 πράξεις  δηλαδή (μία για τον τελεστή του πολλαπλασισμού και μία για την εκχώρηση (198)
Για την εντολή  Εμφάνισε y αντιστοιχούν 1 Χ 99 πράξεις (99)
Για την εντολή αύξηση του i  i←i + 1 αντιστοιχούν 2 Χ 99 πράξεις (198)

Συνεπώς το σύνολο πράξεων  είναι 596  συνολικά πράξεις
Καθηγητής πληροφορικής ΠΕ20

echaralampidou

Καλησπέρα και καλή χρονιά!

Το παραπάνω παράδειγμα έχει ληφθεί από το βοήθημα-ΒΙΒΛΟ του Γ. Καρκαμάνη, ωστόσο ως αποτέλεσμα δίνει 496 και όχι 596.
Συμφωνώ με την πρότασή σας και θεωρώ πως πρόκειται για τυπογραφικό λάθος.

tsirkasg

έχω μια απορία για το θέμα.
στο σχολικό λεχει παράδειγμα με ΓΙΑ.
Ας πούμε για παράδειγμα:
Για i απο 1 μεχρι 2

Αναθέτει 1 βασική πράξη στην εκχώρηση i<-1
Αναθέτει 3 πράξεις στον έλεγχο. 2 αληθης και 1 ψευδής
Αναθέτει 2 πράξεις στην αύξηση.
Θεωρώ ότι είναι λαθος. Πρέπει η αύξηση να είναι : όσες φορές γίνει η επανάληψη Χ 2. Γιατί είναι ι<-ι+1 . Δεν γίνεται αύξηση χωρίς εκχώρηση στη μνήμη.
Έχει κανείς άποψη;
φιλικά Τσιρκας Γ.

tsirkasg


SPY

Παράθεση από: tsirkasg στις 15 Ιαν 2016, 03:46:21 ΜΜ
έχω μια απορία για το θέμα.
στο σχολικό λεχει παράδειγμα με ΓΙΑ.
Ας πούμε για παράδειγμα:
Για i απο 1 μεχρι 2

Αναθέτει 1 βασική πράξη στην εκχώρηση i<-1
Αναθέτει 3 πράξεις στον έλεγχο. 2 αληθης και 1 ψευδής
Αναθέτει 2 πράξεις στην αύξηση.
Θεωρώ ότι είναι λαθος. Πρέπει η αύξηση να είναι : όσες φορές γίνει η επανάληψη Χ 2. Γιατί είναι ι<-ι+1 . Δεν γίνεται αύξηση χωρίς εκχώρηση στη μνήμη.

Έχει κανείς άποψη;
φιλικά Τσιρκας Γ.

Το θέμα με είχε απασχολήσει και παλαιότερα. Υπάρχει και σχετική συζήτηση.
Στις οδηγίες του Δεκεμβρίου δεν έγινε καμία αναφορά.
Σκέπτομαι μήπως η μεταβολή της τιμής του μετρητή γίνεται με μια πράξη σε καταχωρητή της ΚΜΕ (στιλ ολίσθηση).
Μπορεί να είναι και χαζομάρα αυτό. Αν κάποιος γνωρίζει περισσότερα ας μας διαφωτίσει.
Πάντως κάτι πρέπει να λέμε στα παιδιά....

SPY

Παράθεση από: echaralampidou στις 05 Ιαν 2016, 03:20:27 ΜΜ
Το παραπάνω παράδειγμα έχει ληφθεί από το βοήθημα-ΒΙΒΛΟ του Γ. Καρκαμάνη, ωστόσο ως αποτέλεσμα δίνει 496 και όχι 596.
Συμφωνώ με την πρότασή σας και θεωρώ πως πρόκειται για τυπογραφικό λάθος.

ΒΙΒΛΙΟ εννοείς ή ΒΙΒΛΟ;;; "Πιστεύω εις έναν Καρκαμάνη, αναπτυξοπατέρα παντοκράτορα...."   :) Αστειεύομαι.

GB

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

Έχουμε την εντολή
Διάβασε α, β

και τις εντολές
Διάβασε α
Διάβασε β

Έχουν διαφορά στον χρόνο εκτέλεσης ή είναι ο ίδιος? Δηλαδή 2 μικροδευτερόλεπτα?

petrosp13

Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής


petrosp13

Φαντάζομαι ότι είναι το ίδιο
Γιατί μόνο με την φαντασία θα μείνουμε σε αυτό το κεφάλαιο
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

odysseas

Στα παραδείγματα του διδακτικού πακέτου φροντίζουν να γράφουν ξεχωριστά τις ΔΙΑΒΑΣΕ, ώστε να τις μετράνε σαν ξεχωριστές στοιχειώδεις πράξεις. Δεν θυμάμαι να έχω δει παράδειγμα στο οποίο να διαβάζονται περισσότερες μεταβλητές από την ίδια ΔΙΑΒΑΣΕ και φαντάζομαι ότι από εκεί πηγάζει και η ερώτηση του συναδέλφου.

Αν όντως δεν υπάρχει σχετικό παράδειγμα στο διδακτικό πακέτο ή στις οδηγίες δεν μπορούμε να απαντήσουμε με σαφήνεια στην ερώτηση. Μπορούμε μόνο να πούμε ότι αν τεθεί σχετικό θέμα τότε οι ΔΙΑΒΑΣΕ θα δίνονται ξεχωριστά για να μετράνε ξεχωριστά.

Πάντως, αν σκεφτεί κανείς ότι μια ΔΙΑΒΑΣΕ που διαβάζει k τιμές θα κάνει προσπέλαση σε k θέσεις μνήμης για να τις καταχωρίσει, όντως είναι πιθανότερο να θεωρήσει κανείς ότι μια τέτοια ΔΙΑΒΑΣΕ αντιστοιχεί σε k στοιχειώδεις πράξεις και όχι σε μία.

itt

Παράθεση από: SPY στις 22 Ιαν 2016, 12:47:05 ΜΜ
Το θέμα με είχε απασχολήσει και παλαιότερα. Υπάρχει και σχετική συζήτηση.
Στις οδηγίες του Δεκεμβρίου δεν έγινε καμία αναφορά.
Σκέπτομαι μήπως η μεταβολή της τιμής του μετρητή γίνεται με μια πράξη σε καταχωρητή της ΚΜΕ (στιλ ολίσθηση).
Μπορεί να είναι και χαζομάρα αυτό. Αν κάποιος γνωρίζει περισσότερα ας μας διαφωτίσει.
Πάντως κάτι πρέπει να λέμε στα παιδιά....

Δεν νομίζω ότι μπορεί να δωθεί σαφής απάντηση. Γενικά υποθέτω δεν μπορείς να απαντήσεις με το τι θα έκανες στον καταχωρητή (που σημειωτέον, ο compiler μπορεί να μην κάνει spill τον μετρητή εαν μπορεί στατικά να κάνει deduce την αρχική τιμή του και αν ισχούν και κάποιες άλλες συνθήκες), δεδομένου ότι δεν έχουμε ούτε compiler ούτε καταχωρητές.

GB

Συνάδελφοι κάπου στις συζητήσεις της θεωρίας το πήρε το μάτι μου αλλά δεν μπορώ να το βρω, οπότε ξαναρωτάω. Το σχολικό βιβλίο λέει:

Μία βασική πράξη μπορεί να είναι:
1.   Ανάθεση τιμής,
2.   Σύγκριση μεταξύ δύο μεταβλητών, ή
3.   Οποιαδήποτε αριθμητική πράξη μεταξύ δύο μεταβλητών.


Τις λογικές πράξεις τις υπολογίζουμε ξεχωριστά? Δηλαδή τι κόστος σε πράξεις έχουν οι παρακάτω περιπτώσεις:
Χ >0 Ή Χ = 0  (3 πράξεις)
Χ >=0             (1 πράξη)
Χ >10 ΚΑΙ Υ <= 20   (3 πράξεις)

Είναι σωστοί αυτοί οι υπολογισμοί?


meteo_xampos

Το βιβλίο πάντως στον αλγόριθμο παράδειγμα στο κεφάλαιο 5.1 έχει λάθος σύμφωνα με αυτά που μας λέει για τις πράξεις... η αύξηση του i πρέπει να είναι 2 πράξεις... Δηλαδή και στον αλγόριθμο ταξινόμησης 1 πράξη είναι η αύξηση του μετρητή σε κάθε επανάληψη;;;;

SPY

Παράθεση από: GB στις 10 Φεβ 2016, 11:38:05 ΠΜ
Συνάδελφοι κάπου στις συζητήσεις της θεωρίας το πήρε το μάτι μου αλλά δεν μπορώ να το βρω, οπότε ξαναρωτάω. Το σχολικό βιβλίο λέει:

Μία βασική πράξη μπορεί να είναι:
1.   Ανάθεση τιμής,
2.   Σύγκριση μεταξύ δύο μεταβλητών, ή
3.   Οποιαδήποτε αριθμητική πράξη μεταξύ δύο μεταβλητών.


Τις λογικές πράξεις τις υπολογίζουμε ξεχωριστά? Δηλαδή τι κόστος σε πράξεις έχουν οι παρακάτω περιπτώσεις:
Χ >0 Ή Χ = 0  (3 πράξεις)
Χ >=0             (1 πράξη)
Χ >10 ΚΑΙ Υ <= 20   (3 πράξεις)

Είναι σωστοί αυτοί οι υπολογισμοί?
Γιατί να μην είναι σωστοί; Λογική πράξη = σύγκριση 2 τιμών (αριθμητικών, αλφαριθμητικών ή λογικών)

SPY

Παράθεση από: meteo_xampos στις 10 Φεβ 2016, 03:44:07 ΜΜ
Το βιβλίο πάντως στον αλγόριθμο παράδειγμα στο κεφάλαιο 5.1 έχει λάθος σύμφωνα με αυτά που μας λέει για τις πράξεις... η αύξηση του i πρέπει να είναι 2 πράξεις... Δηλαδή και στον αλγόριθμο ταξινόμησης 1 πράξη είναι η αύξηση του μετρητή σε κάθε επανάληψη;;;;
Ίσως να είναι λάθος. Το θέμα όμως είναι ότι διδάσκουμε μαθητές-υποψηφίους. Εφόσον λοιπόν εξετάζονται με βάση το σχολικό βιβλίο, η αύξηση του μετρητή μιας ΓΙΑ είναι μια πράξη. Αν ερωτηθούν στις εξετάσεις (ελπίζω να μη συμβεί) αυτό δεν πρέπει να γράψουν;

meteo_xampos

Ναι συμφωνώ, εφόσον το λέει το βιβλίο έτσι πρέπει να το κάνουμε... Όμως για να καταλάβουν οι μαθητές μου πόσες πράξεις κάνει η Για, την μετατρέπω σε Οσο, οπότε στην μετατροπή φανερώνεται η πράξη i<-i+1... Προτιμώ να κατανοούν τι γίνεται τα κοπέλια παρά να παπαγαλίζουν... Τι λες όμως τότε, ότι το βιβλίο λέει μπούρδες, και ότι το i<-i+1 είναι μια πράξη;

annastasios

Επειδή η αύξηση i
ισοδυναμεί με
i<-- 1 +1
πιστεύω αριθμός πράξεων: 2

επομένως θέλει διόρθωση το παράδειγμα 5,1,3

Παρακαλώ πείτε κι υπόλοιποι τη γνώμη σας

annastasios

Επειδή η αύξηση i
ισοδυναμεί με
i<-- 1 +1
πιστεύω αριθμός πράξεων: 2

επομένως θέλει διόρθωση το παράδειγμα 5,1,3


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

Επομένως το παράδειγμα είναι σωστό


petrosp13

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

SPY

Παράθεση από: meteo_xampos στις 12 Φεβ 2016, 03:08:13 ΜΜ
Ναι συμφωνώ, εφόσον το λέει το βιβλίο έτσι πρέπει να το κάνουμε... Όμως για να καταλάβουν οι μαθητές μου πόσες πράξεις κάνει η Για, την μετατρέπω σε Οσο, οπότε στην μετατροπή φανερώνεται η πράξη i<-i+1... Προτιμώ να κατανοούν τι γίνεται τα κοπέλια παρά να παπαγαλίζουν... Τι λες όμως τότε, ότι το βιβλίο λέει μπούρδες, και ότι το i<-i+1 είναι μια πράξη;
Αυτό που σίγουρα κατανοούν τα κοπέλια (και οι κοπελούδες υποθέτω) είναι ότι τα σχολικά βιβλία γράφονται στο πόδι από ανεύθυνους "επιστήμονες" και κανείς δεν ενδιαφέρεται να τα βελτιώσει μετά από 17 χρόνια. "Αυτή είναι η Ελλάδα", που είχε πει και ο μέγας καταστροφέας. Τι να προσθέσεις εσύ βρε συνάδελφε;
Τώρα επί της ουσίας νομίζω ότι καλό είναι να μην μετατρέπεις τη ΓΙΑ στην ισοδύναμη ΟΣΟ για να μετρηθούν οι πράξεις. Άλλωστε σε επίπεδο μεταφραστή δεν είναι σίγουρο ότι η ΓΙΑ και η ισοδύναμη ΟΣΟ παράγουν τον ίδιο κώδικα σε γλώσσα μηχανής. Νομίζω ότι κάπου αναφέρθηκε αυτό από κάποιο συνάδελφο για κάποια Pascal. Επομένως μπορεί να δοθεί μια "ικανοποιητική" απάντηση σε απορία μαθητή.

meteo_xampos

Και οι μετατροπές από Για σε Όσο γιατί γίνονται; Τεσπα... Θα ακολουθήσουμε το σχολικό και έχει ο θεός... Ελπίζω να μη βάλουν κανένα τέτοιο θέμα... Καλή μας συνέχεια!!!

semaphore

Το να ακολουθήσουμε το βιβλίο ως έχει είναι διφορούμενο ως απάντηση. Και αυτό γιατί σελίδα 98 αναφέρει "Για παράδειγμα, μία βασική πράξη μπορεί να είναι:
    ανάθεση τιμής,
    σύγκριση μεταξύ δύο μεταβλητών, ή
    οποιαδήποτε αριθμητική πράξη μεταξύ δύο μεταβλητών."

Έπειτα, στο παράδειγμα (σελ 100)  αυτο-ακυρώνεται το προηγούμενο, με την εν λόγω δικαιολόγηση της απάντησης (αύξηση i --> 5).

Δε συμφωνώ με το επιχείρημα "ας το ακολουθήσουμε και ας ελπίσουμε να μην πέσει κάτι τέτοιο στα φετεινά θέματα".

Γιατί:

1. ΜΠΟΡΕΙ και να πέσει τέτοιο θέμα και μετά θα τρέχουμε να βρούμε ποια είναι η σωστή απάντηση (όπου ΟΛΕΣ θα είναι οι σωστές απαντήσεις).
2. Σε τυχόν απορίες από "καλούς και ψαγμένους" μαθητές , θα κολλήσουμε και εμείς οι ίδιοι , γιατί δε θα ξέρουμε τί να απαντήσουμε.

Προτείνω να απαντήσει σε αυτό το θέμα κάποιος που είναι αρμόδιος για αποφυγή των παραπάνω όσο είναι ακόμα καιρός.

Diotima

Παράθεση από: SPY στις 13 Φεβ 2016, 11:45:16 ΠΜ
Αυτό που σίγουρα κατανοούν τα κοπέλια (και οι κοπελούδες υποθέτω) είναι ότι τα σχολικά βιβλία γράφονται στο πόδι από ανεύθυνους "επιστήμονες" και κανείς δεν ενδιαφέρεται να τα βελτιώσει μετά από 17 χρόνια. "Αυτή είναι η Ελλάδα", που είχε πει και ο μέγας καταστροφέας. Τι να προσθέσεις εσύ βρε συνάδελφε;
Τώρα επί της ουσίας νομίζω ότι καλό είναι να μην μετατρέπεις τη ΓΙΑ στην ισοδύναμη ΟΣΟ για να μετρηθούν οι πράξεις. Άλλωστε σε επίπεδο μεταφραστή δεν είναι σίγουρο ότι η ΓΙΑ και η ισοδύναμη ΟΣΟ παράγουν τον ίδιο κώδικα σε γλώσσα μηχανής. Νομίζω ότι κάπου αναφέρθηκε αυτό από κάποιο συνάδελφο για κάποια Pascal. Επομένως μπορεί να δοθεί μια "ικανοποιητική" απάντηση σε απορία μαθητή.
Συμφωνώ μαζί σου SPY, είχαμε συζητήσει μαζί το θέμα και παλιότερα.
Η συζήτηση που ήδη έχει γίνει εδώ και που δίνεται μια απάντηση μέσω της Pascal βρίσκεται εδώ
https://alkisg.mysch.gr/steki/index.php?topic=6526.0
και είναι πολύ κατατοπιστική.

Επίσης θέλω να προτείνω και το πολύ ωραίο άρθρο του Διονύση Ζήνδρου,
"Μια Εύπεπτη Εισαγωγή στην Ανάλυση Πολυπλοκότητας Αλγορίθμων"
http://discrete.gr/complexity/?el

Θεωρώ ότι είναι πολύ κατατοπιστικό για το θέμα της συζήτησης αλλά και για όλο το 5ο κεφάλαιο.
Στην παράγραφο "Μετρώντας εντολές" ο συγγραφέας δίνει ένα παράδειγμα εύρεσης μέγιστου σε έναν μονοδιάστατο πίνακα με τον κώδικα σε Javascript.
Όπως γράφει, υποθέτει ότι ο επεξεργαστής μπορεί να εκτελέσει την αύξηση μια τιμής ως μία βασική εντολή (πράξη), οπότε η αύξηση του i στο for θεωρείται ως μία βασική εντολή.

Στην παράγραφο "Ασυμπτωτική συμπεριφορά" του ίδιου άρθρου αναφέρεται και το εξής:

"Η πράξη της "εύρεσης στοιχείου πίνακα" μπορεί να μεταγλωττίζεται σε διαφορετικές εντολές σε διαφορετικές γλώσσες προγραμματισμού. Για παράδειγμα, στη C, όταν κάνουμε A[ i ] η γλώσσα δεν ελέγχει ότι το i είναι εντός των δηλωμένων ορίων του πίνακα, ενώ στην Pascal αυτός ο έλεγχος γίνεται. Συνεπώς, ο ακόλουθος κώδικας σε Pascal:
M := A[ i ]

είναι ισοδύναμος με τον ακόλουθο κώδικα σε C:
if ( i >= 0 && i < n ) {
M = A[ i ];
}
Οπότε είναι λογικό να περιμένουμε ότι οι διαφορετικές γλώσσες προγραμματισμού θα οδηγήσουν σε διαφορετικούς συντελεστές όταν μετράμε τις εντολές τους. Στο παράδειγμά μας όπου χρησιμοποιούμε έναν χαζό μεταγλωττιστή για την Pascal ο οποίος δεν ξέρει τίποτα για πιθανές βελτιστοποιήσεις, η Pascal χρειάζεται 3 εντολές για κάθε πρόσβαση σε στοιχείο πίνακα αντί για τη 1 εντολή που χρειάζεται η C. Το ότι πετάμε αυτό το συντελεστή είναι συμβατό με την ιδέα ότι αγνοούμε τις διαφορές ανάμεσα σε συγκεκριμένες γλώσσες προγραμματισμού και μεταγλωττιστές και αναλύουμε μόνο την ιδέα του ίδιου του αλγορίθμου."

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

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

ntzios kostas

Παράθεση από: Diotima στις 16 Φεβ 2016, 04:28:58 ΜΜ

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

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

Συμφωνώ απόλυτα.

Παρ' όλα αυτά θα ήθελα να πω και την δικιά μου άποψη σε αυτό που γράφει το σχολικό περί αριθμού βημάτων.

Σύμφωνα με το σχολικό η εντολή χ<-χ+1 θεωρείται μία πράξη ενώ η χ<-α+1 θεωρούνται δύο. Πριν το καταδικάσουμε δείτε τι γίνεται στην X86 Assembly.
x<-x+1 { ADD x,1 ή αλλιώς inc x} που σημαίνει αύξησε το x κατά 1 (μία πράξη)
x<-x*2 {mult x,2} διπλασίασε το x (μία πράξη)
x<-x-1 {dec x} μείωσε το x κατά 1 (μία πράξη)
Όλες οι παραπάνω θεωρούνται μία πράξη- η πράξη της αύξησης, του διπλασιασμού ή της μείωσης. Μάλιστα η πράξη inc x θεωρείται και πιο γρήγορη από το ADD x, 1
Αντίθετα
x<- a+1 {Add a,1,x} που σημαίνει πρόσθεσε το a με το 1 (μία πράξη) και καταχώρισε το αποτέλεσμα στο x (δεύτερη πράξη).
z<-a*b κάνε την πράξη και καταχώρησε το αποτέλεσμα στο z. (Η  bold πρόταση είναι που λείπει στις αυξήσεις μεταβλητών και θεωρούνται  μία πράξη λιγότερη.)

Προσωπικά λοιπόν στους μαθητές θα πω για να είμαι και σύμφωνος με το σχολικό ότι οι αυξήσεις- μειώσεις μίας μεταβλητής κατά μία ποσότητα (απλά πράγματα όχι παραδείγματα της μορφής x<-x^2+1/2)να την θεωρούν μία πράξη ενώ πράξεις τις μορφής z<-a+b δύο.

Βέβαια επαναλαμβάνω ότι και να γίνει λάθος στη θεώρηση μιας εντολής εκχώρησης ως προς το πόσες πράξεις είναι δεν αλλάζει την τάξη του αλγόριθμου.
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

Γιάννης Αναγνωστάκης

Παράθεση από: ntzios kostas στις 23 Φεβ 2016, 10:36:26 ΜΜ
Συμφωνώ απόλυτα.

Παρ' όλα αυτά θα ήθελα να πω και την δικιά μου άποψη σε αυτό που γράφει το σχολικό περί αριθμού βημάτων.

Σύμφωνα με το σχολικό η εντολή χ<-χ+1 θεωρείται μία πράξη ενώ η χ<-α+1 θεωρούνται δύο. Πριν το καταδικάσουμε δείτε τι γίνεται στην X86 Assembly.
x<-x+1 { ADD x,1 ή αλλιώς inc x} που σημαίνει αύξησε το x κατά 1 (μία πράξη)
x<-x*2 {mult x,2} διπλασίασε το x (μία πράξη)
x<-x-1 {dec x} μείωσε το x κατά 1 (μία πράξη)
Όλες οι παραπάνω θεωρούνται μία πράξη- η πράξη της αύξησης, του διπλασιασμού ή της μείωσης. Μάλιστα η πράξη inc x θεωρείται και πιο γρήγορη από το ADD x, 1
Αντίθετα
x<- a+1 {Add a,1,x} που σημαίνει πρόσθεσε το a με το 1 (μία πράξη) και καταχώρισε το αποτέλεσμα στο x (δεύτερη πράξη).
z<-a*b κάνε την πράξη και καταχώρησε το αποτέλεσμα στο z. (Η  bold πρόταση είναι που λείπει στις αυξήσεις μεταβλητών και θεωρούνται  μία πράξη λιγότερη.)

Προσωπικά λοιπόν στους μαθητές θα πω για να είμαι και σύμφωνος με το σχολικό ότι οι αυξήσεις- μειώσεις μίας μεταβλητής κατά μία ποσότητα (απλά πράγματα όχι παραδείγματα της μορφής x<-x^2+1/2)να την θεωρούν μία πράξη ενώ πράξεις τις μορφής z<-a+b δύο.

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

+++++

meteo_xampos

WHo cares about assemply?  :angel: Δηλαδή αν δούμε εντολή x<-x+1 σε μια άσκηση με πράξεις, θα πούμε ότι γίνεται 1 πράξη;;;;  :-\

gthal

Παράθεση από: ntzios kostas στις 23 Φεβ 2016, 10:36:26 ΜΜ
Όλες οι παραπάνω θεωρούνται μία πράξη- η πράξη της αύξησης, του διπλασιασμού ή της μείωσης. Μάλιστα η πράξη inc x θεωρείται και πιο γρήγορη από το ADD x, 1
Κώστα, έχω επιλέξει μόνο ένα μικρό σημείο της τοποθέτησής σου, την οποία βρίσκω σωστή και καλά θεμελιωμένη.

Όμως αν φτάσουμε σε επίπεδο Assembly θα πρέπει να αμφισβητήσουμε έναν άλλο ισχυρισμό του βιβλίου, το ότι κάθε αριθμητική πράξη είναι ακριβώς μία βασική πράξη (και όχι μόνο αυτόν).
Δεν μπορεί δηλαδή το χ<-χ+1 να το δούμε από τη σκοπιά της assembly ενώ την έκφραση α^β (που σε assembly δεν θα ήταν μία πράξη) να το δούμε αλλιώς. Ή παντού ή πουθενά.
Και το βιβλίο έχει διαλέξει το πουθενά, αφού όλα αυτά που ορίζει ως "βασικές πράξεις" δεν απαιτούν σε καμία περίπτωση το ίδιο πλήθος κύκλων μηχανής.

Γενικά εγώ πιστεύω ότι αν ένας μαθητής πει ότι η ι <- ι + 1  είναι 2 βασικές πράξεις, θα πρέπει να θεωρηθεί (και αυτό) σωστό γιατί είναι συνεπής με όσα ορίζει το βιβλίο (αφού έχει μία αριθμ. πράξη και μία εκχώρηση και καθεμιά από αυτές ορίζεται στο βιβλίο ως βασική πράξη), κι ας μην έχει παπαγαλίσει το παράδειγμα (ίσως ακόμα περισσότερο για αυτό το λόγο!  >:D )
Παράλληλα, το βιβλίο δεν δίνει κανένα στήριγμα, στη θεωρία, τού γιατί αυτό είναι μία πράξη, οπότε αυτό που συμβαίνει στο παράδειγμα θα μπορούσε κάλλιστα να εκληφθεί ως τυπογραφικό, σε ένα βιβλίο που βρίθει από τέτοια λάθη, απροσεξίες, ασάφειες και αντιφάσεις.
Αυτή είναι η ταπεινή μου γνώμη   ::)
Φιλικά,
Γιώργος Θαλασσινός

ntzios kostas

Γιώργο προσπαθώ να δικαιολογήσω το σχολικό βιβλίο και να δώσω μία βάση σε αυτά που λέει. Για εμένα σύμφωνα και με το σχολικό το χ<-χ+1 είναι μία πράξη. Τώρα αν έρθει κάποια διαφορετική διευκρίνιση θα το δεχτώ και ως δύο.
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

Diotima

Κάθε φορά που διαβάζω το κεφάλαιο 5 αισθάνομαι σαν τον αρχαιολόγο που προσπαθεί να αποκρυπτογραφήσει την Γραμμική Α και να κατανοήσει τι είχε στο μυαλό του σε κάθε σημείο του κειμένου αυτός που το έγραψε.

Σας γράφω μερικά συμπεράσματα στα οποία έχει καταλήξει αυτή η "αποκρυπτογράφηση" με τα οποία μπορεί να συμφωνήσετε, μπορεί και όχι. Σε κάθε περίπτωση η γνώμη σας είναι σημαντική για μένα. :)

1. Νομίζω ότι κάνουμε λάθος να θεωρούμε ότι το βιβλίο δίνει γενικά και συγκεκριμένα τον ορισμό των "βασικών πράξεων" ενός αλγορίθμου. Και το εξηγώ:

Στην παράγραφο 5.1.1. Χειρότερη περίπτωση ενός αλγορίθμου γράφει:
Η χειρότερη περίπτωση ενός αλγορίθμου αφορά στο μέγιστο κόστος εκτέλεσης του αλγορίθμου, κόστος που μετράται σε υπολογιστικούς πόρους. Το κόστος αυτό πολλές φορές κρίνει την επιλογή και το σχεδιασμό ενός αλγορίθμου. Για να εκφρασθεί αυτή η χειρότερη περίπτωση, χρειάζεται κάποιο μέγεθος σύγκρισης και αναφοράς που να χαρακτηρίζει τον αλγόριθμο. Η πλέον συνηθισμένη πρακτική είναι η μέτρηση του αριθμού των βασικών πράξεων που θα πρέπει να εκτελέσει ο αλγόριθμος στη χειρότερη περίπτωση.
Για παράδειγμα, μία βασική πράξη μπορεί να είναι:
ανάθεση τιμής, σύγκριση μεταξύ δύο μεταβλητών, ή οποιαδήποτε αριθμητική πράξη μεταξύ δύο μεταβλητών.
Η χειρότερη περίπτωση αντιπροσωπεύει τις τιμές εκείνες, που, όταν δίνονται ως είσοδος στον αλγόριθμο, οδηγούν στην εκτέλεση μέγιστου αριθμού βασικών πράξεων.

Τόνισα με bold τις λέξεις που με οδηγούν στο συμπέρασμα ότι εδώ δεν πρόκειται για απόλυτο ορισμό των βασικών πράξεων (ποιες είναι πάντα) αλλά ποια θα μπορούσε να είναι παραδειγματικά μια βασική πράξη με την οποία θέλουμε να μελετήσουμε την επίδοση ενός αλγορίθμου. Δε λέει πουθενά ότι "αυτές είναι οι βασικές πράξεις με τις οποίες μελετάμε αλγορίθμους", δε γράφει "ορίζουμε αυτές τις βασικές πράξεις" αλλά δίνει κάποια παραδείγματα για το ποιες θα μπορούσαν να είναι.
Αυτό δε σημαίνει ότι είναι πάντα μόνο αυτές, μπορεί να είναι κάποια ή κάποιες από αυτές (χρησιμοποιεί το "ή" και όχι το "και"), μπορεί να είναι και κάποια άλλη ή κάποιες άλλες.
Νοηματικά και διαισθητικά καταλαβαίνω (και από το υπογραμμισμένο αρχικά) ότι εδώ μιλάει για την έννοια του πλήθους των βασικών πράξεων ως μέγεθος σύγκρισης και αναφοράς, όμως αυτές οι βασικές πράξεις με τις οποίες μετράμε αυτό το πλήθος δεν είναι  πάντα οι ίδιες για όλους τους αλγορίθμους.
Περισσότερο νομίζω έχει στο μυαλό του ο συγγραφέας εδώ κάποιους γνωστούς αλγορίθμους ταξινόμησης, αναζήτησης κ.τ.λ. και όχι κάποια assembly στην οποία μετράμε με ακρίβεια το πλήθος των πράξεων που κάνει ο επεξεργαστής, άλλωστε μιλάει για αλγορίθμους και όχι για προγράμματα σε συγκεκριμένη γλώσσα προγραμματισμού.

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

3. Στην αμέσως επόμενη παράγραφο 5.1.2 Μέγεθος εισόδου ενός αλγορίθμου γράφει:
Ο πίνακας 5.1 περιλαμβάνει παραδείγματα από συνήθεις κατηγορίες προβλημάτων, με δήλωση του μεγέθους που βασικά εκφράζει την είσοδό τους και των αντίστοιχων βασικών πράξεων:

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

Αλγόριθμος                 Βασική πράξη
ΤΑΞΙΝΟΜΗΣΗ               σύγκριση
ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ     αριθμητικές πράξεις
ΑΝΑΖΗΤΗΣΗ                 σύγκριση

Βέβαια σε έναν αλγόριθμο ταξινόμησης ή αναζήτησης δε γίνονται μόνο συγκρίσεις, αλλά θεωρούμε ως βασικές πράξεις και μετράμε μόνο τις συγκρίσεις κλειδιών, ενώ στον πολλαπλασιασμό μετράμε το πλήθος των αριθμητικών πράξεων που γίνονται. Ορίζουμε λοιπόν ποια θα είναι η βασική πράξη αναλόγως το πρόβλημα και τον αλγόριθμο που θα μελετήσουμε. (Και αυτό μπορεί να απαντήσει και στην απορία ενός μαθητή, γιατί σε αυτούς τους αλγορίθμους μετράμε μόνο αυτές ως βασικές πράξεις και όχι όλες όπως στο παράδειγμα της 5.1.3.)
Στην παράγραφο 5.3.1.Ταξινόμηση ευθείας ανταλλαγής γράφει:
Το πιο βασικό κριτήριο της επίδοσης μίας μεθόδου ταξινόμησης είναι ο αριθμός C, που μετρά τις απαιτούμενες συγκρίσεις κλειδιών (key comparisons), που εκτελούνται μέχρι να τελειώσει η ταξινόμηση. Ένα άλλο κριτήριο είναι ο αριθμός Μ που μετρά τις μετακινήσεις (moves) των στοιχείων.
Θα μπορούσαμε λοιπόν με βάση το βιβλίο να ορίσουμε ως βασική πράξη για την ταξινόμηση τη μετακίνηση ενός στοιχείου.

Το συμπέρασμα μου λοιπόν από όλα αυτά είναι:

Αν θέλεις να μετρήσω το πλήθος των βασικών πράξεων που εκτελεί ένας αλγόριθμος θα πρέπει να μου ορίσεις πρώτα ποιες θα είναι αυτές οι βασικές πράξεις με τις οποίες θα μετρήσω και κάθε φορά που εκτελείται μία τέτοια πράξη θα προσθέτω 1 σε αυτό το πλήθος.
(Εκτός αν πρόκειται για πολύ γνωστούς αλγορίθμους που επιλύουν βασικά προβλήματα, ταξινόμηση, αναζήτηση κ.τ.λ. όπου εκεί γνωρίζω ποια είναι η βασική πράξη με την οποία θα μετρήσω).

Και έρχομαι στην επίμαχη παράγραφο 5.1.3.Χρόνος εκτέλεσης προγράμματος ενός αλγορίθμου. Γράφει:
Θα υπολογισθεί η επίδοσή του με βάση τον αριθμό των πράξεων που θα εκτελεσθούν.

Εδώ αναγκάστηκε ο συγγραφέας να μετρήσει όλες τις πράξεις για να δώσει το παράδειγμα (τις οποίες δεν ονομάζει βασικές, ούτε στον πίνακα που ακολουθεί, τις λέει απλώς πράξεις, γιατί άραγε;).
Ξέχασε όμως να ορίσει, πριν μετρήσει, ποιες θα είναι αυτές οι πράξεις που θα αυξάνουν κατά ένα το πλήθος, ίσως αποφάσισε να χρησιμοποιήσει αυτές που αναφέρονται στην παράγραφο 5.1.1., αλλά όταν έφτασε στην αύξηση του i αποφάσισε να τη θεωρήσει ως μία πράξη. Εδώ πιστεύω ότι όντως σκέφτηκε κάποια assembly, εδώ συμφωνώ με τον Κώστα και την πολύ ωραία εξήγηση που έδωσε μέσω της Χ86 Assembly.

ΥΓ: Αν υπάρχει περίπτωση να μπει τέτοιο θέμα θα πρέπει να ορίζει τις βασικές πράξεις με τις οποίες θα γίνει η μέτρηση, διαφορετικά εγώ το θεωρώ ασαφές και ελλιπές. Ήδη έχω μαθητή που ο καθηγητής στο σχολείο μετατρέπει τη Για σε Όσο και μετράει το i <-- i+1 ως δύο πράξεις. Άλλοι θα το μετράνε ως μία πράξη.
Καταλαβαίνετε τι πρόκειται να γίνει....

gthal

Καταπληκτικό!
Μου άλλαξες τον τρόπο να διαβάζω αυτές τις παραγράφους!
Σ' ευχαριστώ!
Φιλικά,
Γιώργος Θαλασσινός

evry

Ο υπολογισμός της πολυπλοκότητας έχει να κάνει με αυτό που λέμε θεωρητική ανάλυση της επίδοσης ενός αλγορίθμου, άρα δεν είναι δυνατόν να συνδέεται με κάποιο επεξεργαστή. Αναφερόμαστε σε κάποια θεωρητική μηχανή η οποία περιγράφει ένα καθολικό μοντέλο υπολογισμού (π.χ. μηχανή Turing).
Επίσης όπως έχει αναφερθει και από άλλους συναδέλφους δεν μας ενδιαφέρει σε καμία περίπτωση ο ακριβής αριθμός πράξεων διότι πολύ απλά δεν έχει κανένα νόημα.
Το μόνο που μας ενδιαφέρει είναι ο χαρακτηρισμός της πολυπλοκότητας ενός αλγορίθμου ως γραμμικής, τετραγωνικής, λογαριθμικής κλπ έτσι ώστε να μπορεί κάποτε να μπει μια άσκηση που να λέει :
Σχεδιάστε αλγόριθμο λογαριθμικής πολυπλοκότητας που να κάνει αναζήτηση.

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

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

ΥΓ. Κατά τη γνώμη μου ακόμα και όλο το 5 να ήταν στην ύλη δεν ήταν δυνατόν να μπει θέμα που να ζητάει ακριβή υπολογισμό πράξεων , δηλαδή τη συνάρτηση Τ(Ν). Δεν έχει νόημα. Ο σκοπός θα έπρεπε να είναι να μπορεί ο μαθητής να διακρίνει εποπτικά (διαισθητικά) την πολυπλοκότητα του αλγορίθμου, π,χ, διπλή επανάληψη = Ν2 , μέχρι εκεί.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Diotima

Συμφωνώ evry με το γενικό συλλογισμό σου μια και το σημαντικό είναι ο υπολογισμός της τάξης Ο ενός αλγορίθμου γι αυτό και υποστήριξα κι εγώ σε προηγούμενη ανάρτηση μου ότι θεωρώ ανούσια ασχολία τον ακριβή υπολογισμό των πράξεων του αλγορίθμου, πόσο μάλλον όταν μας αποκλείουν από το να διδάξουμε τι είναι και τι συμβολίζει η τάξη Ο (οδηγίες σελ. 10: Για τον συμβολισμό Ο της πολυπλοκότητας, δεν πρέπει να αναλυθεί τι ακριβώς εκφράζει και πως υπολογίζεται σε ένα αλγόριθμο.)

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

Σελ. 2 των οδηγιών:
Η διδασκαλία του κεφαλαίου 5 (Ανάλυση Αλγορίθμων) αποσκοπεί στο να γνωρίσουν και να κατανοήσουν, οι μαθητές, απλά θέματα σχετικά με την πολυπλοκότητα, την επίδοση και την αποδοτικότητα αλγορίθμων, που επιλύουν το ίδιο πρόβλημα.
Ενδεικτικές ασκήσεις αναφέρονται στις παραγράφους 5.1.1 και 5.1.3. του βιβλίου μαθητή και στο τετράδιο μαθητή.

Στην παράγραφο 5.1.3. του σχολικού γίνεται ακριβής υπολογισμός των πράξεων που εκτελεί ένα πρόγραμμα που υλοποιεί τον αλγόριθμο (32 πράξεις).
Ακολουθεί ο πίνακας (Πιν. 5.2) με τους χρόνους εκτέλεσης όταν αυξάνεται το μέγεθος n (πλήθος των επαναλήψεων του βρόχου).

Σελ. 10 των οδηγιών:  23.   &  24. Ενότητες 5.1 & 5.3
Η διαπραγμάτευση των εννοιών να γίνει με βάση το βιβλίο μαθητή και ως επιπλέον παραδείγματα να δοθούν τα παραδείγματα 1 & 2 του Κεφαλαίου 5 του τετραδίου του μαθητή.

Το παράδειγμα 1 (σελ. 45 τετραδίου μαθητή) στο οποίο αναφέρεται η οδηγία, είναι ένας αλγόριθμος με ένα βρόχο (όπως και αυτός της 5.1.3.) και θεωρούμε ένα πρόγραμμα που τον εκτελεί.

Ζητείται πάλι να υπολογισθεί η επίδοσή του με βάση τον αριθμό των πράξεων που θα εκτελεσθούν. Ακολουθεί η λύση όπου γίνεται ακριβής υπολογισμός των πράξεων (506 πράξεις) και το συμπέρασμα:
Με δεδομένο ότι ο βρόχος του προγράμματος θα εκτελεσθεί 100 φορές προκύπτει η παραπάνω ανάλυση, η οποία αποτελεί εκτίμηση και του χρόνου εκτέλεσης του προγράμματος αλγορίθμου.
Είναι χρήσιμο εδώ να καταγραφεί το μέγεθος του προβλήματος και να εκφρασθεί το σύνολο των κριτηρίων επίδοσης σε σχέση με αυτό.

Στο παράδειγμα 2 (σελ. 46 τετραδίου μαθητή) που μας συστήνει πάλι η παραπάνω οδηγία είναι ένα διπλός βρόχος όπου διαβάζονται και εμφανίζονται τα στοιχεία ενός δισδιάστατου πίνακα και ζητείται:
Να υπολογισθεί ο χρόνος εκτέλεσης του αλγορίθμου αυτού και να σχολιασθεί η βαρύτητα των πράξεων επανάληψης σε σχέση με την απόφαση για την πολυπλοκότητα των αλγορίθμων.
Το συμπέρασμα γράφει: Από ό,τι παρατηρούμε υπάρχουν δύο βρόχοι επανάληψης (ένας βρόχος για κάθε διάσταση του πίνακα). Για κάθε στιγμή επανάληψης μέσα στο εσωτερικό των δύο βρόχων γίνονται δύο απλές πράξεις (ανάγνωση και εκτύπωση) μοναδιαίου κόστους n καθεμία. (εδώ αναφέρεται το κόστος των εσωτερικών πράξεων).
Επομένως η πολυπλοκότητα του παραπάνω αλγορίθμου θα εκφράζεται με n * n * 2, δηλαδή ο αλγόριθμος είναι τετραγωνικός. Είναι φανερό ότι οι βρόχοι επανάληψης είναι εκείνοι που καθορίζουν την επιβάρυνση στο κόστος εκτέλεσης του αλγορίθμου.

Εντελώς δικαιολογημένα λοιπόν οι καθηγητές διδάσκουν τέτοιες ασκήσεις υπολογισμού των πράξεων που εκτελεί ένας αλγόριθμος, άσχετα αν εγώ κι εσύ και οι περισσότεροι το θεωρούμε χωρίς νόημα (συμφωνώ απόλυτα με το ΥΓ σου evry). Τέτοιες οδηγίες έχουμε.

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

Ο συγγραφέας που έγραψε στο βιβλίο το παράδειγμα 5.1.3. όφειλε να το κάνει πριν μετρήσει τις πράξεις, μπορεί να το θεώρησε άσκοπο, να το ξέχασε, να σκέφτηκε σε κάποια γλώσσα, σε κάποια assembly ή δεν ξέρω τι άλλο. Το ίδιο θα έπρεπε να γίνει και στα αντίστοιχα παραδείγματα του τετραδίου του μαθητή, οπότε δε θα προσπαθούσαμε να μαντέψουμε γιατί η αύξηση του i είναι μία ή δύο πράξεις και άλλοι να λένε το ένα και άλλοι το άλλο.

Σε αυτό θα ήθελα να μάθω αν συμφωνείς...

pgrontas

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

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

Μου αρέσει επίσης η πρόταση του Κώστα για 'ποιοτική' διαφοροποίηση της γενικής εκχώρησης από την εκχώρηση για αύξηση μετρητή και μας επιτρέπει να μην εκτεθούμε. Επιπλέον έχει αντίστοιχη λογική του με το να θεωρούμε τις αριθμητικές πράξεις ως  βασικες πράξεις  όταν προσθέτουμε ακέραιους σταθερού μεγέθους που χωράνε στους καταχωρήτες πχ., αλλά να προσπαθούμε να βελτιώσουμε την επίδοση των ίδιων πράξεων για n-ψηφιους ακέραιους. Αμφιβάλλω πάντως αν  αυτό είχαν οι συγγραφείς στο μυαλό τους...

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

Σε κάθε περίπτωση συμφωνώ και εγώ με την Diotima και νομίζω ότι σε πιθανές ασκήσεις μέτρησης πράξεων πρέπει να δίνεται ποιες θα είναι οι βασικές πράξεις οι οποίες θα πρέπει καταμετρηθούν.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Καρκαμάνης Γεώργιος

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

Για το σκοπό αυτόν, θα πρέπει να στηριχτούμε στο διδακτικό πακέτο, καθώς είναι και το μοναδικό υλικό που έχουμε στα χέρια, τόσο εμείς οι καθηγητές όσο και οι μαθητές, και είναι αυτό που  θα συμβουλευόμαστε και θα χτίσουμε τη διδασκαλία μας.

Με βάση το διδακτικό πακέτο:
α)  η αύξηση της μεταβλητής στην εντολή ΓΙΑ  αντιστοιχεί σε μία πράξη και αυτό πρέπει όλοι μας να αποδεχθούμε. Δεν καταλαβαίνω το λόγο που  πρέπει να μπούμε στη διαδικασία συζήτησης  για το εάν αυτό είναι σωστή ή όχι, δηλαδή να αμφισβητήσουμε το σχολικό βιβλίο και να διδάξουμε κάτι το οποίο εμείς θεωρούμε σωστό.

β) η  εκχώρηση με πράξη αντιστοιχεί σε δύο πράξεις πχ ( χ <-- α + β)

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





gthal

Παράθεση από: pgrontas στις 01 Μαρ 2016, 09:39:34 ΜΜ
Κάτι μου έχει κάνει εντύπωση και δεν έχει αναφερθεί είναι ότι ενώ στο βιβλίο σωστά αναφέρει ότι η χειρότερη περίπτωση κρίνει τον σχεδιασμό ενός αλγορίθμου, στο αντίστοιχο κεφάλαιο της πολυπλοκοτητας για τη σειριακή αναζήτηση υπολογίζει το πλήθος συγκρίσεων κατά μέσο όρο. Και ρωτάω τόσο δύσκολο θα ήταν να διατηρήσουν οι συγγραφείς συνέπεια με τον εαυτό τους μερικές σελίδες πριν ( ; ) και να υπολογίσουν το πλήθος συγκρίσεων στη χειρότερη περίπτωση (όπου το στοιχείο είναι τελευταίο ή δεν υπάρχει). Και οι μαθητές μόνοι τους το εξάγουν αυτό πολλές φορές.Και σαν μην έφτανε αυτό αυτή η ασυνέπεια πρέπει να διδαχθεί σύμφωνα με τις οδηγίες. Επιπλέον κρίμα, αν σκεφτούμε ότι θα ήταν πολύ ενδιαφέρον να έχουμε ασκήσεις που θα δίνεται  κάποιος αλγόριθμος και θα ζητείται η χειρότερη περίπτωση, αντί να καθόμαστε να μετράμε πράξεις.
Συμφωνώ 100% Παναγιώτη!!

Παράθεση από: Καρκαμάνης Γεώργιος στις 01 Μαρ 2016, 11:41:46 ΜΜ
Με βάση το διδακτικό πακέτο:
α)  η αύξηση της μεταβλητής στην εντολή ΓΙΑ  αντιστοιχεί σε μία πράξη και αυτό πρέπει όλοι μας να αποδεχθούμε. Δεν καταλαβαίνω το λόγο που  πρέπει να μπούμε στη διαδικασία συζήτησης  για το εάν αυτό είναι σωστή ή όχι, δηλαδή να αμφισβητήσουμε το σχολικό βιβλίο και να διδάξουμε κάτι το οποίο εμείς θεωρούμε σωστό.
...
Μέχρι να έρθουν νεότερες οδηγίες νομίζω ότι πρέπει να αποδεχθούμε αυτά που αναφέρονται στο διδακτικό πακέτο.
Γιώργο, και μαζί σου θέλω να συμφωνήσω. Όμως έχω δύο λόγους που με δυσκολεύουν:
Ο ένας είναι... πρακτικός! Το 5ο κεφ. το έχω ήδη διδάξει λίγο καιρό πριν, και όταν είχε ανοίξει το θέμα πριν 1-2 μήνες, είχα την εντύπωση πως όσοι είχαν συμμετάσχει τότε συμφωνούσαν ότι μάλλον πρόκειται για τυπογραφικό του βιβλίου (η αύξηση του ι ως μία πράξη στα παραδείγματα). Έτσι, το δίδαξα ως 2 πράξεις, άρα έχω ήδη εκτεθεί :(

Ο δεύτερος είναι ότι δεν βλέπω με ποιον σαφή τρόπο αναφέρεται στο διδακτικό πακέτο ότι η αύξηση του μετρητή είναι μία πράξη (και άραγε αυτό το δεχόμαστε στη ΓΙΑ μόνο? ή σε οποιαδήποτε τέτοια εκχώρηση, όπως λέει ο Ντζιός? ο καθένας συμπεραίνει ό,τι νομίζει). Το βιβλίο από μόνο του αυτοαναιρείται. Δεν είναι ότι εγώ θέλω να το πω αλλιώς, είναι ότι το βιβλίο το λέει με 2 διαφορετικούς τρόπους (και άρα έπρεπε να διαλέξω, και διάλεξα έναν που είναι απλός για τους μαθητές και συνεπής με όλες τις αρ. πράξεις και εκχωρήσεις). Ενώ απ' όσα έχει πει πριν το παράδειγμα είναι ξεκάθαρο ότι η ι <- ι +1 περιλαμβάνει 2 πράξεις, έρχεται με το παράδειγμα και (χωρίς να το λέει μεν) μας βάζει να εξάγουμε έναν άλλο κανόνα (στον οποίο για να φτάσουμε πρέπει να περάσουμε από συζήτηση για assembly και μεταγλωττιστές!). Άρα αυτό, θέλω να πω,  δεν δηλώνεται καθαρά μέσα στο πακέτο. Συμπέρασμα δικό μας είναι κι αυτό, και δεν έχω κανένα πρόβλημα να συμφωνήσουμε ως κοινότητα ότι θα το δεχθούμε έτσι (πάντως, μυρίσαμε τα νύχια μας για να το βρούμε και δεν είναι αλήθεια ότι όποιος το δίδαξε διαφορετικά, αμφισβητεί κατ' ανάκγη το διδακτικό πακέτο)

Αλλά το καλύτερο σου το έχω για το τέλος κι ελπίζω να έχεις υπομονή:
Ακόμα κι αν το δεχθούμε έτσι το παραπάνω, έρχεται ένα άλλο παράδειγμα να μας αναιρέσει πάλι  !!!!
Είναι το παράδειγμα στην 5.1.3  και ο πίνακας 5.2
Υπολογίζω τις πράξεις γενικεύοντας, θεωρώντας όπου 4 το n, και μετρώντας την αύξηση του ι ως μία πράξη και βρίσκω ότι το πλήθος των πράξεων είναι 5n+12 (δες εικ 1). Για n=4, ο τύπος πράγαμτι επαληθεύει τις 32 πράξεις που υπολογίζει και το βιβλίο λύνοντας το παράδειγμα.
(αν θεωρούσαμε την αύξηση του ι ως 2 πράξεις θα βρίσκαμε 6n+13 πράξεις)
Πάμε όμως στον πίνακα 5.2 που δίνει τους χρόνους εκτέλεσης του συγκεκριμένου αλγορίθμου για διάφορα n.
Για n=5 o τύπος 5n+12 δίνει 37 πράξεις, άρα 37 μικροδευτερόλεπτα ενώ ο πίνακας δίνει 42 !  Ασυμφωνία! Το ίδιο συμβαίνει με κάθε n που δοκιμάζει !!!
Κι έτσι, από περιέργεια, ο τύπος 6n+13 για n=5 δίνει 43 πράξεις !! Πιο κοντά, αν και η τιμή του βιβλίου δε συμφωνεί με καμία από τις δικές μας.
Ομοίως και στα υπόλοιπα n.  :(   (βάζω και την εικ 2 για τις συγκρίσεις)
Ποια θεωρία επιβεβαιώνει λοιπόν; Τι να εμπιστευθώ από το βιβλίο; Αυτά που λέει θεωρητικά ή αυτά που εξάγονται από τα παραδείγματα; (αν εξάγεται κάτι... )   :-\
Είπα τον καημό μου και ησύχασα.
Φιλικά,
Γιώργος Θαλασσινός

Diotima

Παράθεση από: gthal στις 02 Μαρ 2016, 12:38:34 ΜΜ
Είναι το παράδειγμα στην 5.1.3  και ο πίνακας 5.2
Υπολογίζω τις πράξεις γενικεύοντας, θεωρώντας όπου 4 το n, και μετρώντας την αύξηση του ι ως μία πράξη και βρίσκω ότι το πλήθος των πράξεων είναι 5n+12 (δες εικ 1). Για n=4, ο τύπος πράγαμτι επαληθεύει τις 32 πράξεις που υπολογίζει και το βιβλίο λύνοντας το παράδειγμα.
(αν θεωρούσαμε την αύξηση του ι ως 2 πράξεις θα βρίσκαμε 6n+13 πράξεις)
Πάμε όμως στον πίνακα 5.2 που δίνει τους χρόνους εκτέλεσης του συγκεκριμένου αλγορίθμου για διάφορα n.
Για n=5 o τύπος 5n+12 δίνει 37 πράξεις, άρα 37 μικροδευτερόλεπτα ενώ ο πίνακας δίνει 42 !  Ασυμφωνία! Το ίδιο συμβαίνει με κάθε n που δοκιμάζει !!!
Κι έτσι, από περιέργεια, ο τύπος 6n+13 για n=5 δίνει 43 πράξεις !! Πιο κοντά, αν και η τιμή του βιβλίου δε συμφωνεί με καμία από τις δικές μας.
Ομοίως και στα υπόλοιπα n.  :(   (βάζω και την εικ 2 για τις συγκρίσεις)
Ποια θεωρία επιβεβαιώνει λοιπόν; Τι να εμπιστευθώ από το βιβλίο; Αυτά που λέει θεωρητικά ή αυτά που εξάγονται από τα παραδείγματα; (αν εξάγεται κάτι... )   :-\
Είπα τον καημό μου και ησύχασα.
Καλησπέρα σε όλους,

Γιώργο συμφωνώ με όλα όσα λες και σε ευχαριστώ πολύ για τα καλά σου λόγια για τη νοηματική μου ανάλυση στις παραγράφους του βιβλίου.
Στο παραπάνω παράδειγμα ο τύπος βγάζει 5n+7 και όχι 5n+12. Οπότε επαληθεύονται όλες οι τιμές του πίνακα 5.2.
Είχα κάνει την ανάλυση του παραδείγματος τον Αύγουστο και αρχικά έκανα το ίδιο λάθος που κάνεις εσύ και βγάζεις 5n+12. Το λάθος μου το βρήκε ο SPY και διόρθωσα την ανάλυση για να μη μπερδέψω κανένα.
Δες εδώ https://alkisg.mysch.gr/steki/index.php?topic=6275.150
τη διορθωμένη ανάλυση μου και πιο κάτω στην ίδια σελίδα την παρατήρηση που μου έκανε ο SPY και τη διόρθωσα, φαίνεται και η παλιά λάθος ανάλυση.


Diotima

Παράθεση από: Καρκαμάνης Γεώργιος στις 01 Μαρ 2016, 11:41:46 ΜΜ
Το 5ο κεφάλαιο, σίγουρα δεν είναι εύκολο να διδαχθεί στους μαθητές, καθώς υπάρχουν αρκετά κομμάτια του, που μας προβληματίζουν και μας διχάζουν.
Εμείς από την πλευρά μας, ως καθηγητές, θα πρέπει να προσπαθήσουμε να διδάξουμε στα παιδιά αυτά που χρειάζονται για να αντεπεξέλθουν στις πανελλήνιες εξετάσεις, χωρίς υπερβολές.

Για το σκοπό αυτόν, θα πρέπει να στηριχτούμε στο διδακτικό πακέτο, καθώς είναι και το μοναδικό υλικό που έχουμε στα χέρια, τόσο εμείς οι καθηγητές όσο και οι μαθητές, και είναι αυτό που  θα συμβουλευόμαστε και θα χτίσουμε τη διδασκαλία μας.

Με βάση το διδακτικό πακέτο:
α)  η αύξηση της μεταβλητής στην εντολή ΓΙΑ  αντιστοιχεί σε μία πράξη και αυτό πρέπει όλοι μας να αποδεχθούμε. Δεν καταλαβαίνω το λόγο που  πρέπει να μπούμε στη διαδικασία συζήτησης  για το εάν αυτό είναι σωστή ή όχι, δηλαδή να αμφισβητήσουμε το σχολικό βιβλίο και να διδάξουμε κάτι το οποίο εμείς θεωρούμε σωστό.

β) η  εκχώρηση με πράξη αντιστοιχεί σε δύο πράξεις πχ ( χ <-- α + β)

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

Προφανώς όλοι ακολουθούμε το διδακτικό πακέτο και θέλουμε να προετοιμάσουμε σωστά τους μαθητές μας για τις πανελλήνιες, χωρίς να τους επιβαρύνουμε με περιττό βάρος και μέχρι τώρα στη συζήτηση που έχουμε κάνει εγώ δε βλέπω καμία υπερβολή από κάποιον.
Το να προσπαθούμε να εξηγήσουμε νοηματικά τις παραγράφους του βιβλίου, να μπούμε στο πνεύμα των συγγραφέων, να καταλάβουμε τα παραδείγματα και να κατανοήσουμε όσα πρέπει να διδάξουμε νομίζω ότι από μόνο του δείχνει την ανάγκη μας να τηρήσουμε τους κανόνες που πρέπει.
Για τα α) και β):
Δεν έχω κανένα πρόβλημα να δεχτώ ότι η αύξηση του μετρητή  στη ΓΙΑ είναι μία στοιχειώδης πράξη (μοναδιαίου κόστους). Μπορώ να δεχτώ ότι είναι και δύο και τρεις, αρκεί το διδακτικό πακέτο να μου το ορίσει και δε θα το ψάξω παραπέρα. Βλέπω όμως, επειδή έχω μαθητές από διαφορετικά σχολεία, ότι πολλοί καθηγητές το διδάσκουν ως δύο πράξεις αυτήν τη στιγμή και εγώ δεν τους κατηγορώ καθόλου γι αυτό, ούτε μπορώ να πω ότι δεν ακολουθούν το διδακτικό πακέτο. Κι αυτό γιατί το διδακτικό πακέτο δεν έχει ορίσει πουθενά τις στοιχειώδεις πράξεις με τις οποίες θα μετράμε τις εντολές.
Γιατί, για να πω ότι μία εντολή π.χ. έχει κόστος 3 πράξεις πρέπει να κάνω 3=1+1+1, άρα πρέπει να ξέρω ποιες είναι αυτές οι στοιχειώδεις πράξεις (με κόστος 1) που αυξάνουν αυτό το πλήθος. Από 2 παραδείγματα δε μπορεί να παραχθεί αυτός ο βασικός ορισμός των στοιχειωδών πράξεων, τα 2 παραδείγματα δε μπορεί να καλύπτουν το γενικό ορισμό τους, ούτε όλες τις περιπτώσεις εντολών ενός αλγορίθμου.

Και κατανοώ και τον καθηγητή που θέλει να ελέγξει και τα παραδείγματα μήπως έχουν και κανένα τυπογραφικό ή αριθμητικό λάθος, όλα τα συγγράμματα μπορεί να έχουν τέτοια λάθη. Ρωτάω λοιπόν, που είναι ο βασικός κανόνας με τον οποίο ένας καθηγητής μπορεί να ελέγξει τα αριθμητικά παραδείγματα; Αυτό δε σημαίνει αμφισβήτηση του συγγράμματος, είναι μια υγιής διαδικασία που δίνει ασφάλεια και κατανόηση στον καθένα που θα διδάξει.

Κάποιοι καθηγητές έχουν κατανοήσει λάθος την αναφορά παραδειγμάτων βασικών πράξεων στην παράγραφο 5.1.1., έχουν μεταφράσει αυτά τα παραδείγματα ως ορισμό των στοιχειωδών πράξεων και γι αυτό μετατρέπουν τη ΓΙΑ σε ΟΣΟ, για να εκφράσουν τη ΓΙΑ με αυτές τις πράξεις και ύστερα να τη μετρήσουν. Οπότε κάνουν i<-- i+1 και μετράνε 2 πράξεις. Η παράγραφος αυτή μιλάει για εντελώς άλλο πράγμα και όχι για τις στοιχειώδεις μοναδιαίου κόστους πράξεις. Μιλάει για την έκφραση της χειρότερης περίπτωσης ενός αλγορίθμου και για το μέγεθος αναφοράς που χρειαζόμαστε για να την εκφράσουμε, που είναι το πλήθος των βασικών πράξεων που έχουμε ορίσει γι αυτόν τον αλγόριθμο.
Π.χ. στην ταξινόμηση και αναζήτηση το πλήθος των συγκρίσεων που γίνονται στη χειρότερη περίπτωση, γι αυτό και αναφέρει και το επόμενο παράδειγμα χειρότερης περίπτωσης. Οπότε, αναφέρει μερικά συνήθη παραδείγματα βασικής πράξης για την έκφραση της χειρότερης περίπτωσης.

Όταν μετράμε τους χρόνους εκτέλεσης των εντολών ενός αλγορίθμου (κόστος) οι βασικές πράξεις γι αυτή τη διαδικασία είναι οι στοιχειώδεις (μοναδιαίου κόστους) πράξεις και όπως ορίζεται για την αναζήτηση η σύγκριση, εδώ πρέπει να ορίζονται ποιες είναι αυτές.
(Στη σελίδα 10 των οδηγιών μας τονίζεται και το εξής:
"Στην παράγραφο 5.1.3 δεν προκύπτει άμεσα ότι ο χρόνος εκτέλεσης ενός προγράμματος είναι το άθροισμα των χρόνων εκτέλεσης των επιμέρους τμημάτων του και θα πρέπει να γίνει σχετική αναφορά.")

Κατά τη γνώμη μου υπάρχουν δύο λύσεις:

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

ΥΓ: Δεν ξέρω αν φαίνομαι υπερβολική σε κάτι που καλούμαστε να διδάξουμε και που δεν έχει και τόσο νόημα, αλλά αφού πρέπει, τουλάχιστον να γίνει σωστά ώστε να νοιώθουμε κι εμείς καλυμμένοι και οι μαθητές μας που θα γράψουν.

Diotima

Καλημέρα σε όλους,

έχω μια ιδέα, που δεν ξέρω κατά πόσο μπορεί να είναι σωστή, όσον αφορά των ορισμό των στοιχειωδών μοναδιαίου κόστους πράξεων που εκτελεί ένας αλγόριθμος, όταν θεωρείται πρόγραμμα που εκτελείται.
Υπάρχει περίπτωση οι συγγραφείς να έχουν θεωρήσει ως στοιχειώδεις, μοναδιαίου κόστους πράξεις, τις λειτουργίες που αναφέρονται στο 1ο κεφάλαιο (εκτός ύλης φέτος), στη σελίδα 28 του βιβλίου; Γράφει:

"Όσο και αν τυχόν ξαφνιάζει, ο υπολογιστής δεν μπορεί να εκτελεί παρά μόνο τρεις λειτουργίες:

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

σύγκριση, η οποία συνιστά τη βασική λειτουργία για την επιτέλεση όλων των λογικών πράξεων,

μεταφορά δεδομένων, λειτουργία που προηγείται και έπεται της επεξεργασίας δεδομένων.

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

Οπότε στην πρόσθεση ανάγεται οποιαδήποτε αριθμητική πράξη.
Στην εντολή i<-- i+1 γίνεται μία πρόσθεση στην τιμή μιας μεταβλητής i αλλά όχι μεταφορά σε άλλη μεταβλητή (1 πράξη), ενώ στην εντολή χ <-- α+β γίνεται μία πρόσθεση και μεταφορά της τιμής στη μεταβλητή χ (2 πράξεις).
χ <-- χ^2 (1 πράξη),  Α[ι] <-- Α[ι]+1 (1 πράξη), χ<-- χ mod 2 (1 πράξη) κ.τ.λ.

Γράψε χ (1 πράξη, μεταφορά της τιμής της χ από τη μνήμη στη μονάδα εξόδου)
Διάβασε χ (1 πράξη, μεταφορά της τιμής της χ από τη μονάδα εισόδου στη μνήμη)
Γράψε χ, ψ (2 πράξεις), Διάβασε χ, ψ, ζ (3 πράξεις) κ.τ.λ.

Α<-- Α και Β (1 πράξη), Α<-- Β και Γ (2 πράξεις) κ.τ.λ.

Υπάρχει περίπτωση να ισχύει; Περιμένω τη γνώμη σας........

nick_papag

Χμμμ... εμένα μου φαίνεται πολύ ενδιαφέρουσα αυτή η προσέγγιση!
Δε θα είχα καμιά διαφωνία με το παραπάνω. Όπως και να'χει όμως ο μαθητής θέλει χειροπιαστά πράγματα τα οποία όπως μπήκε φέτος σφήνα αυτό το κεφάλαιο, αδυνατούμε να τα ξεκαθαρίσουμε 100%. Θα εξεταστεί μόνο ως θεωρία μεν, αλλά σε ένα θέμα α ή β που θα δίνει πιθανόν ένα αλγόριθμο για να υπολογιστούν πράξεις θα γίνει χαμός από διαφορετικές ---με "σωστά???" διδαγμένους τρόπους--- λύσεις.
Ας ελπίσουμε μόνο να το έχουμε ανάγει μόνο εμείς σε τέτοιο επίπεδο και να μη χρειαστεί να κλάψουν μανούλες.

Diotima

Έκανα μια έρευνα στο internet για να δω τι λέει και ο υπόλοιπος πλανήτης για το θέμα (την έχω αυτήν την τάση όταν μου προκύψει θέμα που δεν είναι ξεκάθαρο, τα γράφω για όσους ενδιαφέρονται και όχι για να κουράσω).
Λίγα πράγματα βρήκα, γιατί ποιος κάθεται ν' ασχοληθεί με αυτό. Αυτά όμως είναι υπέρ αρκετά και μου επιβεβαίωσαν αυτά που ήθελα.

Εδώ είναι ένα εισαγωγικό κεφάλαιο στην ανάλυση αλγορίθμων από ένα σύγγραμμα του Πανεπιστημίου της Νέας Υόρκης:
https://cs.nyu.edu/courses/fall02/V22.0310-002/chapters/chapter-01.html

Ο συγγραφέας παρουσιάζει ένα παράδειγμα αλγορίθμου σε ψευδογλώσσα, με ένα for, με σκοπό να μετρήσει τις στοιχειώδεις πράξεις (primitive operations).
Στην παράγραφο 1.1.2, πριν κάνει τη μέτρηση, όχι μόνο ορίζει ποιες είναι οι στοιχειώδεις πράξεις αλλά ορίζει ακόμα και το μοντέλο που θεωρεί ότι εκτελείται ο αλγόριθμος, μια μη απόλυτα ρεαλιστική RAM, όπου εξηγεί ακόμα και τη διαφορά της με μια πραγματική RAM και τι θα αγνοήσει στη μέτρηση, προφανώς για λόγους απλούστευσης (θεωρεί την αύξηση του i στο for 2 πράξεις, πρόσθεση και ανάθεση).

Δείτε πώς παρουσιάζει τη μέτρηση στη συνέχεια (1.1.3) και συγκρίνετε................

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

for i:=0 to n do
  print test
end

http://stackoverflow.com/questions/5069840/how-many-primitive-operations-in-a-simple-loop

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

@K.K: There are many different thoughts on what is considered a primitive operation. As described in a previous comment, the definition of "primitive operation" depends a lot on the language, the compiler, and the architecture. Or on the rules set forth in whatever text you're reading. – Jim Mischel Sep 3 '15 at 7:47

ether

Απλώς και μόνο για να δούμε, όπως λέει και η Diotima, τι λέει και ο υπόλοιπος πλανήτης για το θέμα, παραθέτω μερικά links σχετικά με το θέμα, όπως το παρουσιάζει ο Robert Sedgewick, ο οποίος ασχολείται αρκετά με την ανάλυση αλγορίθμων:

1.
Ένα απόσπασμα από το
Robert Sedgewick, Philippe Flajolet, An Introduction to the Analysis of Algorithms (2nd Edition, 2013), Addison-Wesley Professional, p. 4-5
"
...
The term analysis of algorithms has been used to describe two quite different general approaches to putting the study of the performance of computer programs on a scientific basis. We consider these two in turn.

The first, popularized by Aho, Hopcroft, and Ullman [2] and Cormen, Leiserson, Rivest, and Stein [6], concentrates on  determining the growth of the worst-case performance of the algorithm (an "upper bound"). A prime goal in such analyses is to determine which algorithms are optimal in the sense that a matching "lower bound" can be proved on the worst-case performance of any algorithm for the same problem. We use the term theory of algorithms to refer to this type of analysis. It is a special case of computational complexity, the general study of relationships between problems, algorithms, languages, and machines. The emergence of the theory of algorithms unleashed an Age of Design where multitudes of new algorithms with ever-improving worstcase performance bounds have been developed for multitudes of important problems. To establish the practical utility of such algorithms, however, more detailed analysis is needed, perhaps using the tools described in this book.

The second approach to the analysis of algorithms, popularized by Knuth [17][18][19][20][22], concentrates on precise characterizations of the bestcase, worst-case, and average-case performance of algorithms, using a methodology that can be refined to produce increasingly precise answers when desired. A prime goal in such analyses is to be able to accurately predict the performance characteristics of particular algorithms when run on particular computers, in order to be able to predict resource usage, set parameters, and compare algorithms. This approach is scientific: we build mathematical models to describe the performance of real-world algorithm implementations, then use these models to develop hypotheses that we validate through experimentation.

We may view both these approaches as necessary stages in the design and analysis of efficient algorithms. When faced with a new algorithm to solve a new problem, we are interested in developing a rough idea of how well it might be expected to perform and how it might compare to other algorithms for the same problem, even the best possible. The theory of algorithms can provide this. However, so much precision is typically sacrificed in such an analysis that it provides little specific information that would allow us to predict performance for an actual implementation or to properly compare one algorithm to another. To be able to do so, we need details on the implementation, the computer to be used, and, as we see in this book, mathematical properties of the structures manipulated by the algorithm. The theory of algorithms may be viewed as the first step in an ongoing process of developing a more refined, more accurate analysis; we prefer to use the term analysis of algorithms to refer to the whole process, with the goal of providing answers with as much accuracy as necessary.
...
"

2.
https://www.youtube.com/watch?v=ZCgnwo0bRDI

https://www.youtube.com/watch?v=SQ-DHCAy1E4

https://www.youtube.com/watch?v=7pYU2H2XwCI

https://www.youtube.com/watch?v=RPsajyxCBVQ

https://www.youtube.com/watch?v=oVT8eYqY8pc

https://www.youtube.com/watch?v=MQCa0G7xXbk

Οι σχετικές διαφάνειες υπάρχουν στο
http://algs4.cs.princeton.edu/lectures/14AnalysisOfAlgorithms.pdf

3.
Μερικές ακόμα διαφάνειες σχετικές με την ανάλυση αλγορίθμων
http://aofa.cs.princeton.edu/lectures/lectures13/AA01-AofA.pdf

Diotima

Καταπληκτικές οι παραπομπές σου ether, για βαθιά επιστημονική μελέτη!
Πρόλαβα να δω μόνο τις διαφάνειες, υπέροχες!
Σε ευχαριστώ πολύ που τις ανάρτησες!

Θα ήθελα να μάθω, τι προτείνεις να γίνει;
Αλλά αν δε θες να απαντήσεις, μπορώ να το καταλάβω.....

ether

Παράθεση από: Diotima στις 05 Μαρ 2016, 04:54:43 ΜΜ
Καταπληκτικές οι παραπομπές σου ether, για βαθιά επιστημονική μελέτη!
Πρόλαβα να δω μόνο τις διαφάνειες, υπέροχες!
Σε ευχαριστώ πολύ που τις ανάρτησες!

Θα ήθελα να μάθω, τι προτείνεις να γίνει;
Αλλά αν δε θες να απαντήσεις, μπορώ να το καταλάβω.....
Με την πρώτη ευκαιρία δες και τα βίντεο (με τη σειρά). Αξίζουν.

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

Όπως και να 'χει, από το μοντέλο κόστους (cost model), το κόστος κάθε εντολής (που εξαρτάται από την υλοποίηση (compiler, H/W, λειτουργικό))  δεν πρέπει να μας απασχολεί σε επίπεδο εξετάσεων. Μας απασχολεί η συχνότητα εκτέλεσης κάθε εντολής, η οποία εξαρτάται από τον αλγόριθμο και ενδεχομένως και από το μοντέλο δεδομένων (input model) (κι όταν μελετάμε τη χειρότερη περίπτωση, εξαρτάται μόνο από τον αλγόριθμο). Το ποιες εντολές θέλουμε να μετρήσουμε (π.χ. συγκρίσεις, προσπελάσεις πίνακα κτλ) θα πρέπει να δηλώνεται στην εκφώνηση μια άσκησης.

Diotima

Φυσικά και θα δω και τα video ether, είμαι σίγουρη ότι αξίζουν...
Συμφωνώ και με τις απαντήσεις σου, σε ευχαριστώ.

petrosp13

Εσείς κάνετε την απαιτούμενη δουλειά πάνω στην οποία θα βασιστούν οι αυριανές οδηγίες του μαθήματος. Κλασική ΑΕΠΠ δηλαδή, να βγάζει το φίδι από την τρύπα πάντα ο καθηγητής και όχι οι υπεύθυνοι. Αλήθεια, ΟΙ συγγραφείς τι έχουν απογίνει;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

theoni

Καλησπέρα για να βρώ το χρόνο εκτέλεσης σε μικροδευτερόλεπτα πρεπει να υπολογίσω τις βασικές πράξεις και το άθροισμα τους να το πολ/σω  επί ένα ή με 0.1 ?????

din_os

Μια εντολή σε assembly δεν είναι απαραίτητα μια πράξη. Θα δεχόμουν ώς μια πράξη την ολίσθηση (χ <- χ * 2, χ <- χ div 2) αλλά για το +-1 πολύ πιθανό να χρησιμοποιεί βοηθητική θέση μνήμης για την πρόσθεση. Καλές οι διατυπώσεις όμως του συναδέλφου και βοηθούν σε περαιτέρω συζήτηση.

Το θέμα βέβαια δεν ειναι πόσο ακριβής είναι ο υπολογισμός του παραδείγματος του βιβλίου. Ας μην ξεχνάμε οτι 99% των βιβλίων είναι μεταφράσεις των αγγλικών (π.χ. Knuth*) στα ελληνικά. Ίσως το ένα βιβλίο να θεωρούσε οτι η αύξηση κατα ένα είναι μία πράξη, το άλλο όχι, όταν τα ενώνεις (μια παράγραφο απο ενα βιβλίο μια παράγραφο απο άλλο) και δεν καταλαβαίνεις το περιεχόμενο έχεις ένα μπάχαλο.

Δυστυχώς κατα τη γνώμη μου, αν πέσει η ίδια ακριβώς άσκηση ο μαθητής πρέπει να βρει σύνολο 32 ενώ για άλλα παραδείγματα πρέπει να κάνει χρήση των τριών βασικών κανόνων στην αρχή του 5.1.1, όπου και θα έβρισκε π.χ. σύνολο 37.  :-\. Θέλω να πιστεύω όμως, όπως προαναφέρθηκε, οτι στις πανελλήνιες αν πέσει τέτοιου είδους άσκηση θα υπάρχει διευκρίνιση στην εκφώνηση.

* Οι πηγές επίσης είναι παλιές (ο ίδιος ο Knuth έχει αναφέρει οτι θέλει να ξαναγράψει το 1ο βιβλίο).

pgrontas

Παράθεση από: din_os στις 07 Μαρ 2016, 11:54:17 ΠΜ
Ας μην ξεχνάμε οτι 99% των βιβλίων είναι μεταφράσεις των αγγλικών (π.χ. Knuth*) στα ελληνικά.Ίσως το ένα βιβλίο να θεωρούσε οτι η αύξηση κατα ένα είναι μία πράξη, το άλλο όχι, όταν τα ενώνεις (μια παράγραφο απο ενα βιβλίο μια παράγραφο απο άλλο) και δεν καταλαβαίνεις το περιεχόμενο έχεις ένα μπάχαλο.
Μπινγκο!
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

theoni

Χαίρεται έχω διαβάσει με προσόχη όλα τα παραπάνω αλλά δεν μπορώ να καταλάβω που καταλήξαμε τελικά στην για η αύξηση του ι θα μετράει για μια πράξη στην όσο θα μετράει κανονικά για δυο?????

GB

Παράθεση από: theoni στις 08 Μαρ 2016, 01:40:40 ΜΜ
Χαίρεται έχω διαβάσει με προσόχη όλα τα παραπάνω αλλά δεν μπορώ να καταλάβω που καταλήξαμε τελικά στην για η αύξηση του ι θα μετράει για μια πράξη στην όσο θα μετράει κανονικά για δυο?????

Ναι με βάση το βιβλίο 1 πράξη είναι η αύξηση του μετρητή της ΓΙΑ, και 2 πράξεις το Ι<--Ι+1

Diotima

Παράθεση από: ether στις 05 Μαρ 2016, 04:59:38 ΜΜ
Με την πρώτη ευκαιρία δες και τα βίντεο (με τη σειρά). Αξίζουν.
Είδα τα βίντεο, υπέροχη επιστημονική παρουσίαση από τον Robert Sedgewick, πάρα πολύ αναλυτική και πολύ λεπτομερής για τα θέματα που συζητάμε.
Έκανες πολύ καλά που ανάρτησες τα links, ether.
Είδα και το βιογραφικό του, έκανε το διδακτορικό του με τον Knuth.

anta_113

Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης

evry

Ο(M*N)

Παράθεση από: anta_113 στις 12 Μαρ 2016, 03:49:50 ΜΜ
Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Πέτρος Κ.

Παράθεση από: anta_113 στις 12 Μαρ 2016, 03:49:50 ΜΜ
Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης

O(n2) αν θες να αναφέρεις κάποια από τις πολυπλοκότητες του βιβλίου.

evry

Δεν είναι σωστό αυτό διότι αν υποθέσουμε ότι m = n2, τότε η πολυπλοκότητα γίνεται O(n3) που δεν είναι O(n2),
ενώ για παράδειγμα το O(n) είναι και O(n2) αν και όπως το γράφω είναι λίγο αδόκιμο αφού μιλάμε για σύνολα συναρτήσεων οπότε οι σχέσεις που έχουμε είναι αυτές του υποσυνόλου.

Παράθεση από: Πέτρος Κ. στις 14 Μαρ 2016, 07:57:17 ΜΜ
O(n2) αν θες να αναφέρεις κάποια από τις πολυπλοκότητες του βιβλίου.

Τέτοιο παράδειγμα φυσικά λίγο δύσκολο να ζητηθεί , ωστόσο η πολυπλοκότητα της συγχώνευσης που είναι στο τετράδιο του μαθητή και στις σημειώσεις είναι O(m+n)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Πέτρος Κ.

Παράθεση από: evry στις 14 Μαρ 2016, 09:55:40 ΜΜ
Δεν είναι σωστό αυτό διότι αν υποθέσουμε ότι m = n2, τότε η πολυπλοκότητα γίνεται O(n3) που δεν είναι O(n2),
ενώ για παράδειγμα το O(n) είναι και O(n2) αν και όπως το γράφω είναι λίγο αδόκιμο αφού μιλάμε για σύνολα συναρτήσεων οπότε οι σχέσεις που έχουμε είναι αυτές του υποσυνόλου.

Τέτοιο παράδειγμα φυσικά λίγο δύσκολο να ζητηθεί , ωστόσο η πολυπλοκότητα της συγχώνευσης που είναι στο τετράδιο του μαθητή και στις σημειώσεις είναι O(m+n)

Ναι. Σωστά. Εξάλλου, τώρα που το ξανασκέφτομαι, στο  O(n2) δεν φαίνεται καν ότι η πολυπλοκότητα εξαρτάται και από το m.

pgrontas

Κατά τη γνώμη μου τέτοιες ερωτήσεις που δεν καθορίζεται ρητά η είσοδος θέλουν προσοχή.
Αν υποθέσουμε ότι η είσοδος είναι τα στοιχεία του πίνακα, ναι μεν γίνονται m*n επαναλήψεις, αλλά τόσα είναι τα στοιχεία έτσι κι αλλιώς. Για κάθε στοιχείο γίνεται μόνο δύο πράξεις διάβασμα και προσπέλαση. Άρα ο αλγόριθμος είναι γραμμικός (ως προς το mn όμως)
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Diotima

Παράθεση από: pgrontas στις 15 Μαρ 2016, 10:51:57 ΠΜ
Κατά τη γνώμη μου τέτοιες ερωτήσεις που δεν καθορίζεται ρητά η είσοδος θέλουν προσοχή.
Αν υποθέσουμε ότι οι είσοδος είναι τα στοιχεία του πίνακα, ναι μεν γίνονται m*n επαναλήψεις, αλλά τόσα είναι τα στοιχεία έτσι κι αλλιώς. Για κάθε στοιχείο γίνεται μόνο δύο πράξεις διάβασμα και προσπέλαση. Άρα ο αλγόριθμος είναι γραμμικός (ως προς το mn όμως)
Συμφωνώ απόλυτα. Θα πρέπει να καθορίζεται από την εκφώνηση το μέγεθος του προβλήματος. Π.χ. σε έναν τετραγωνικό πίνακα nxn μπορείς να θεωρήσεις ως μέγεθος εισόδου τη διάσταση n, οπότε ο παραπάνω αλγόριθμος έχει τάξη Ο(n2), ενώ αν θεωρήσεις ως μέγεθος εισόδου  το πλήθος των στοιχείων του n2, τότε είναι γραμμικός ως προς αυτό. Συνηθίζεται όμως για λόγους κατανόησης και αποφυγής παρεξηγήσεων με μονοδιάστατους πίνακες, να θεωρούμε ως μέγεθος εισόδου στους δισδιάστατους πίνακες τις διαστάσεις τους και όχι το πλήθος των στοιχείων τους. Είναι θέμα επιλογής ανεξάρτητης μεταβλητής ως μέγεθος εισόδου, γι αυτό όταν ζητείται συγκεκριμένη απάντηση αυτό θα πρέπει να καθορίζεται απ' την εκφώνηση.
Όταν δεν καθορίζεται, τότε αυτός που απαντά θα πρέπει να αναφέρει τι θεωρεί μέγεθος εισόδου με το οποίο θα εκφράσει την τάξη του αλγορίθμου.

Παράθεση από: Πέτρος Κ. στις 15 Μαρ 2016, 08:29:58 ΠΜ
Ναι. Σωστά. Εξάλλου, τώρα που το ξανασκέφτομαι, στο  O(n2) δεν φαίνεται καν ότι η πολυπλοκότητα εξαρτάται και από το m.
Σωστά, το μέγεθος του προβλήματος εδώ εξαρτάται από δύο ανεξάρτητες μεταβλητές, θεωρώντας ότι ο αλγόριθμος επιλύει το πρόβλημα γεμίσματος ενός τυχαίου δισδιάστατου πίνακα nxm, οπότε έχει τάξη Ο(n*m).
Το Ο(n2) θα ίσχυε σε ένα υποσύνολο τέτοιων πινάκων όπου θα ξέραμε ότι οι διαστάσεις τους διατηρούν μια γραμμική σχέση μεταξύ τους, π.χ. m=c1*n + c2, όπου c1, c2 κατάλληλοι σταθεροί ακέραιοι (για c1=0, c2>1 θα είχαμε Ο(n)).

Λαμπράκης Μανώλης

Καλημερα σε όλους

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

1) τελικά η παράγραφος 5.3 είναι μέχρι τον ορισμό της πολυπλοκότητας ?? δηλαδή τις σελίδες 105 κάτω από τον ορισμό μέχρι  την 108 δεν θα τη διδάξουμε ??   αν δεν τα διδάξουμε, το παράδειγμα 2 σελίδα 48 του ΤΜ που προτείνεται από τις οδηγίες αναφέρει την τετραγωνική πολυπλοκότητα αν δεν κάνω λάθος, που έρχεται σε αντίθεση με αυτό 

2)  """ Για τον συμβολισμό Ο της πολυπλοκότητας, δεν πρέπει να αναλυθεί τι ακριβώς εκφράζει και πως υπολογίζεται σε ένα αλγόριθμο.  """ ... ξανά το παραπάνω παράδειγμα του ΤΜ σε αυτό δεν αναφέρεται ??

3) και ένα τρίτο από άλλο κεφάλαιο, αναφέρεται κάπου στις οδηγίες πως η συνάρτηση δεν μπορεί να καλέσει διαδικασία ?? λίγο που έψαξα δεν το βρήκα

πάντως εγώ θεωρώ πως από το κεφάλαιο 5 θα μπεί κάποια θεωρία μέσα από το βιβλίο ή ένας πίνακας υπολογισμός πράξεων ίδιος με αυτόν του βιβλίου

Λαμπράκης Μανώλης

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

NiColas1957

Ουπς λάθος.
Άλλη άσκηση έβλεπα :)


NiColas1957

Παράθεση από: anta_113 στις 12 Μαρ 2016, 03:49:50 ΜΜ
Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης



Μα αφού στις οδηγίες λένε ότι οι μαθητές ΔΕΝ πρέπει να ασχοληθούν με τον υπολογισμό της Πολυπλοκότητας Ο
Γιατί να το ρωτήσουν αυτό ?    ???

Diotima

Παράθεση από: Λαμπράκης Μανώλης στις 15 Μαρ 2016, 12:43:55 ΜΜ
Καλημερα σε όλους

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

1) τελικά η παράγραφος 5.3 είναι μέχρι τον ορισμό της πολυπλοκότητας ?? δηλαδή τις σελίδες 105 κάτω από τον ορισμό μέχρι  την 108 δεν θα τη διδάξουμε ??   αν δεν τα διδάξουμε, το παράδειγμα 2 σελίδα 48 του ΤΜ που προτείνεται από τις οδηγίες αναφέρει την τετραγωνική πολυπλοκότητα αν δεν κάνω λάθος, που έρχεται σε αντίθεση με αυτό 

2)  """ Για τον συμβολισμό Ο της πολυπλοκότητας, δεν πρέπει να αναλυθεί τι ακριβώς εκφράζει και πως υπολογίζεται σε ένα αλγόριθμο.  """ ... ξανά το παραπάνω παράδειγμα του ΤΜ σε αυτό δεν αναφέρεται ??

3) και ένα τρίτο από άλλο κεφάλαιο, αναφέρεται κάπου στις οδηγίες πως η συνάρτηση δεν μπορεί να καλέσει διαδικασία ?? λίγο που έψαξα δεν το βρήκα

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

Η 5.3 στο επίσημο ΦΕΚ της ύλης είναι όλη μέσα, στις οδηγίες όχι.
Το παράδειγμα 2 σελ. 48 του ΤΜ βρίσκεται σε ασυμβατότητα με τις οδηγίες, έχεις δίκιο.

Επίσης στη σελ.2 των οδηγιών:
"Η πολυπλοκότητα αλγορίθμων να διδαχθεί θεωρητικά με παραδείγματα και σε σύνδεση με την επίδοση, χωρίς οι μαθητές να εμπλακούν σε ασκήσεις υπολογισμού της τάξης Ο ενός αλγορίθμου."
Μπορείς εσύ να καταλάβεις τι σημαίνει αυτό που υπογράμμισα; Εγώ όχι.
Δηλαδή θα γράψουμε έναν αλγόριθμο στον πίνακα ως παράδειγμα και μετά θα πούμε θεωρητικά, παιδιά, αυτός ο αλγόριθμος έχει πολυπλοκότητα Ο(n);
Και φυσικά τα παιδιά θα ρωτήσουν τι είναι η πολυπλοκότητα και τι είναι το Ο, αλλά εγώ θα τους πω ότι είναι εκτός ύλης και δε θα τα εξηγήσω, έτσι; Διαφορετικά αγνοώ την οδηγία, έτσι δεν είναι;
Ή θα τους πω να μάθουν παπαγαλία τα περί περιπλοκότητας χωρίς να γράψω ούτε ένα παράδειγμα αλγορίθμου; Πάλι αγνοώ την οδηγία.

Επίσης στη σελ. 2: "Ενδεικτικές ασκήσεις αναφέρονται στις παραγράφους 5.1.1 και 5.1.3. του βιβλίου μαθητή και στο τετράδιο μαθητή."
Όλες οι ασκήσεις του τετραδίου του μαθητή ζητάνε υπολογισμό της πολυπλοκότητας.

Επειδή Μανώλη μου πλέον κουράστηκα καταβάλλοντας κάθε δυνατή προσπάθεια να καταλάβω τις οδηγίες και το βιβλίο, να τα συμβιβάσω και να είμαι συνεπής σου δίνω τη συμβουλή: Μην προσπαθείς να συμβιβάσεις τις οδηγίες και να καταλάβεις.
Αυτό που πρέπει να κάνεις είναι: follow your heart....

Εγώ αυτό θα κάνω και σου λέω συγκεκριμένα:
Φυσικά και θα κάνω παραδείγματα με αλγορίθμους και θα δείξω στα παιδιά πώς υπολογίζεται η συνάρτηση πολυπλοκότητας. Και για το μέγεθος εισόδου θα τους πω και για την τάξη Ο. Θα επικεντρωθώ σε απλά παραδείγματα με ένα βρόχο ή εμφωλευμένους βρόχους. Και στους νέους αλγορίθμους που έχουμε για φέτος.
Και θα τους εξηγήσω ότι τα κάνω όλα αυτά για να κατανοήσουν το κεφάλαιο, ότι δε θα εξεταστούν με βάση τις οδηγίες.
Η γνώμη μου είναι ότι το κεφάλαιο της πολυπλοκότητας δε διδάσκεται με παπαγαλία και με μπλα-μπλα μόνο, εγώ αυτό αδυνατώ να το κάνω. Η συνάρτηση πολυπλοκότητας και η τάξη ενός αλγορίθμου είναι μετρήσιμα μεγέθη, δε διδάσκονται χωρίς υπολογισμό.
Ποτέ δε δίδαξα κάτι στην ΑΕΠΠ μόνο με παπαγαλία, πάντα έδινα παραδείγματα, πάντα εξηγούσα, ακόμα και τη θεωρία, ακόμα και τους ορισμούς. Πάντα μ' ενδιέφερε να κατανοούν τα παιδιά και για να κατανοήσουν το κεφάλαιο αυτό θα κάνω τα παραπάνω που είπα.
Δε σου λέω να κάνεις τα ίδια που θα κάνω εγώ, αυτό που σου λέω είναι:
Ρώτα τον εαυτό σου, τι θα ήθελες να καταλάβουν και να μάθουν οι μαθητές σου από αυτά που θα τους πεις και κάνε ότι σου πει.
Ελπίζω να βοήθησα λίγο.



Λαμπράκης Μανώλης

Καλημέρα σε όλους

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

κάτι ακόμη, συγνώμη αν ρωτάω ξανά το ίδιο ...τις σελίδες 105 κάτω από τον αρισμό τις διδάσκουμε, έστω θεωρητικά ??? πχ θεωρείτε μπορεί να πέσει ερώτηση πχ "εξηγείστε την πολυπλοκότητα Ο(1) ή Ο(Ν)"  ?? η πλάκα είναι εδώ ότι έχουμε την πολυπλοκότητα, χωρίς όμως το Ο, αλλά με παράδειγμα, αλλά χωρίς άσκηση, αλλα μπορεί να μπει, αλλά δεν θα μπει , σύμφωνα με την ύλη και τις οδηγίες .... τι πω, ή εγώ είμαι τόσο ### και δεν καταλαβαίνω η κάτι δεν πάει καλά

ευχαριστώ

Diotima

Παράθεση από: Λαμπράκης Μανώλης στις 16 Μαρ 2016, 10:30:58 ΠΜ
κάτι ακόμη, συγνώμη αν ρωτάω ξανά το ίδιο ...τις σελίδες 105 κάτω από τον αρισμό τις διδάσκουμε, έστω θεωρητικά ??? πχ θεωρείτε μπορεί να πέσει ερώτηση πχ "εξηγείστε την πολυπλοκότητα Ο(1) ή Ο(Ν)"  ?? η πλάκα είναι εδώ ότι έχουμε την πολυπλοκότητα, χωρίς όμως το Ο, αλλά με παράδειγμα, αλλά χωρίς άσκηση, αλλα μπορεί να μπει, αλλά δεν θα μπει , σύμφωνα με την ύλη και τις οδηγίες .... τι πω, ή εγώ είμαι τόσο ### και δεν καταλαβαίνω η κάτι δεν πάει καλά

ευχαριστώ
Η εκτίμηση μου γι αυτό είναι ότι από την παράγραφο 5.3 είχαν σκοπό να εξαιρέσουν κυρίως το παράδειγμα μετά τον ορισμό επειδή γίνεται υπολογισμός της τάξης ενός αλγορίθμου μέσω της f(n). Τώρα αν εννοούν παραδείγματα τις κατηγορίες της πολυπλοκότητας, τι να πω.....; Καθόλου απίθανο.
Πάντως οι οδηγίες λένε "να δείξουμε τον πίνακα 2.2 και την εικόνα 2.10 από την παράγραφο 2.2.3 του βιβλίου της Β' ΓΕΛ".
Ο πίνακας 2.2 έχει τις ίδιες κατηγορίες πολυπλοκότητας χωρίς όμως να τις εξηγεί (εκτός από την Ο(1)).
Έχει όμως ένα παράδειγμα για κάθε κατηγορία.
Π.χ. O(logn)-δυαδική αναζήτηση, O(n)-σειριακή αναζήτηση κ.τ.λ. Ίσως να εννοούν αυτά ως παραδείγματα, who knows??? Νομίζω, αφού έτσι κι αλλιώς πρέπει να αναφέρουμε τις κατηγορίες από τον πίνακα 2.2 με τα παραδείγματα ας αναφέρουμε και την εξήγηση της κάθε μιας από την 5.3, αφού τα πράγματα δεν είναι σαφή και ακριβώς καθορισμένα.

P.Tsiotakis

#66
Πριν 5 λεπτά έλαβα στο mail μου (σε λίστα αποδεκτών) το κείμενο "Οδηγίες – διευκρινήσεις για την διδασκαλία του 5ου κεφ. ΑΕΠΠ"
Σχολικού Συμβούλου, που περιέχει προτάσεις και όχι επίσημες οδηγίες, αλλά ορθή πρακτική για την κοινή αντιμετώπιση του ζητήματος

ΠαράθεσηΑγαπητοί συνάδελφοι

Μετά από ερωτήματα συναδέλφων από άλλες Εκπαιδευτικές Περιφέρειες για τη διδασκαλία του κεφαλαίου 5 (Πολυπλοκότητα) στο μάθημα Ανάπτυξη Εφαρμογών σε Προγραμματιστικό περιβάλλον  (ΑΕΠΠ), σας στέλνω προτάσεις, οι οποίες έχουν συζητηθεί και με άλλο συνάδελφο Σχολ. Σύμβουλο (μέλος της ομάδας σύνταξης των οδηγιών για το ΑΕΠΠ),  σχετικά με την προσέγγιση  της  διδασκαλίας αυτού του κεφαλαίου.

Υπενθυμίζεται ότι οδηγίες για το μάθημα ΑΕΠΠ  καθορίζονται από το Υπουργείο Παιδείας καθώς και από το Ινστιτούτο Εκπαιδευτικής Πολιτικής (ΙΕΠ), ως εκ τούτου είναι προφανές ότι οι προτάσεις αυτές  δεν είναι επίσημες και δεν δεσμεύουν ούτε το Υπουργείο ούτε φυσικά την Κεντρική Επιτροπή Γενικών Εξετάσεων.

Προτεινόμενη διδακτική προσέγγιση - επεξηγήσεις:

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

" Για παράδειγμα μια βασική πράξη μπορεί να είναι

·       ανάθεση τιμής
·       σύγκριση 2 μεταβλητών
·       αριθμητική πράξη μεταξύ 2 μεταβλητών"


Παρατηρούμε ότι οι συγγραφείς δεν ορίζουν με αυστηρότητα ποιες πράξεις θεωρούνται "βασικές" Για παράδειγμα δεν αναφέρεται ως βασική η πράξη της εκχώρησης. Αυτό όμως δεν είναι λάθος διότι οι βασικές πράξεις σχετίζονται άμεσα με την αρχιτεκτονική που χρησιμοποιεί ο ΗΥ, με τον  compiler  καθώς και με τη γλώσσα με την οποία  θα υλοποιηθεί ο αλγόριθμος.   Αφού τονιστεί το ανωτέρω, ο εκπαιδευτικός μπορεί να συμπληρώσει ότι για το βιβλίο βασικές πράξεις είναι και οι :

·       Εκχώρηση τιμής σε μια μεταβλητή
·       Πρόσβαση στην τιμή ενός  συγκεκριμένου κελιού ενός πίνακα
·       Αύξηση (ή μείωση) της τιμής μιας μεταβλητής

Η τελευταία αναφερόμενη πράξη συνάγεται από το παράδειγμα μέτρησης των πράξεων που αναφέρεται στην παράγραφο 5.1.3, όπου η θεωρητική έκφραση i ßi +1  υπολογίζεται ως μια πράξη.

Συνεπώς η αύξηση (ή μείωση) της τιμής οποιασδήποτε μεταβλητής (π.χ  x ß x+1) υπολογίζεται ως μια πράξη ενώ αν εμπλέκονται και άλλες μεταβλητές (x ß y+1), υπολογίζεται ως δύο.

Ως αιτιολόγηση  των ανωτέρω μπορούν να χρησιμοποιηθούν τα παρακάτω: Στην αρχή του βιβλίου (παράγραφος 1.6) αναφέρεται σε επίπεδο αρχιτεκτονικής " Όσο και αν τυχόν ξαφνιάζει, ο υπολογιστής δεν μπορεί να εκτελεί παρά μόνο τρεις λειτουργίες:  πρόσθεση, ..... σύγκριση,.... μεταφορά δεδομένων, .....".  Συνεπώς η x ß y+1 εκτελεί δύο λειτουργίες μια πρόσθεση και μια μεταφορά δεδομένων σε άλλη θέση μνήμης.  Στην x ß x+1 δεν υπάρχει η μεταφορά δεδομένων σε άλλη θέση μνήμης.  Σε επίπεδο γλώσσας , για παράδειγμα στη γλώσσα assembly,  υπάρχει η εντολή ADD x, 1   (μια πράξη), ενώ η μεταφορά είναι διαφορετική πράξη.   Θεωρείται αυτονόητο ότι τουλάχιστον η τελευταία  αιτιολόγηση απευθύνεται στους εκπαιδευτικούς πληροφορικής και όχι για χρήση σε  μαθητές.

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

Οι υπολογισμοί του πίνακα 5.2 για τον αλγόριθμο της παραγράφου 5.1.3 ισχύουν αν  υποτεθεί ότι η εντολή "Για"  εκτελείται Ν-φορές και κάθε  βασική πράξη θέλει 1 μs.

Για τις εντολές που εκτελούνται μόνο μια φορά x ß123, y ß 234, εκτύπωσε x, εκτύπωσε y. Εκτύπωσε z : 5 πράξεις  (5 μs)

Οι εντολές μέσα στο βρόχο Για εκτελούνται:

Αρχική τιμή i  : 1 πράξη
Έλεγχος i  :        Ν+1 πράξεις
Αύξηση    :        Ν πράξεις
Εκτύπωση   :     Ν πράξεις
Υπολογισμός (z ß x*y) :  2N πράξεις

Συνολικές πράξεις

5+1+Ν+1+Ν+Ν+2Ν= 5Ν+7

Ο ανωτέρω τύπος για Ν=5 δίνει  32μs, για Ν=10 δίνει 57 μs και Ν=1.000.000 βγάζει (περίπου 5.000.000 πράξεις δηλαδή 5.000.000 μs = 5 sec   (1 sec = 1.000.000 μs).

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

Για το σκοπό αυτό να αξιοποιηθεί το παράδειγμα 2 της παραγράφου 5.2 από το τετράδιο του μαθητή το οποίο υπολογίζει σε N πράξεις κάθε εντολή επανάληψης  και απλά υπολογίζει ότι  ο αλγόριθμος είναι τετραγωνικός.

Υπενθυμίζω την αναλυτική διδακτική προσέγγιση του κεφαλαίου 5, που είχε προταθεί τον Νοέμβριο (και από την οποία προέκυψαν και οι τελικές  αποσταλείσες οδηγίες):

"Από την παράγραφο 5.3 διδάσκεται το τμήμα μέχρι τον ορισμό της πολυπλοκότητας. Ο Ορισμός  της πολυπλοκότητας διδάσκεται από το βιβλίο της  Β΄ ΓΕΛ.  "Η πολυπλοκότητα ενός αλγορίθμου δίνει ένα μέτρο της χρονικής καθυστέρησης του αλγορίθμου για την επίλυση ενός προβλήματος " 'η ισοδύναμα "Η πολυπλοκότητα ενός  αλγορίθμου  δίνει ένα μέτρο  της ταχύτητας εκτέλεσης του αλγορίθμου".

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











Στοιχεία  ΝΣυγκρίσεις
1007
1.00010
10.00014
100.00017
1.000.00020
10.000.00024
100.000.00027
1.000.000.00030


Για τον συμβολισμό Ο της πολυπλοκότητας δεν πρέπει να αναλυθεί τι ακριβώς εκφράζει και πως υπολογίζεται σε ένα αλγόριθμο. Προτείνεται ο εκπαιδευτικός  να δείξει τον πίνακα 2.2 και την εικόνα 2.10 από τη σελίδα 24 του βιβλίου της Β' ΓΕΛ, καθώς και τον πίνακα 5.4 του βιβλίου της Γ΄ τάξης και να συζητήσει με τους  μαθητές,  για την αύξηση του χρόνου ολοκλήρωσης που απαιτεί ένας  αλγόριθμος, καθώς αυξάνεται η πολυπλοκότητά του.

Τέλος μπορεί να αναφερθεί ότι  πρακτικά τα απλά προγράμματα μπορούν να αναλυθούν μετρώντας τους φωλιασμένους βρόχους που υπάρχουν στο πρόγραμμα. Ένας απλός βρόχος, που διασχίζει Ν στοιχεία, δίνει  πολυπλοκότητα  Ν,  ένας βρόχος μέσα σ᾽ ένα βρόχο δίνει n2, ένας βρόχος μέσα  μέσα  σ᾽ ένα βροχο δίνει n3 κ.λπ

veni

Όσον αφορά το Κεφάλαιο 5, από ότι φαίνεται είναι πολύ δύσκολο να ερμηνεύσεις συνδυαστικά την επίσημη ύλη(ΦΕΚ) σε σχέση με τις διευκρινιστικές ( ; ) οδηγίες.
Ο ρόλος του εκπαιδευτικού που καλείται να υλοποιήσει τα παραπάνω είναι ΚΑΤΑΛΥΤΙΚΟΣ.

Σε αυτή την κατεύθυνση επισυνάπτω κάποιες στοιχειώδεις σημειώσεις (ένα μπούσουλα).
Βενιέρης Γεώργιος
Καθηγητής Πληροφορικής
Πιλοτικό (R.I.P.)  Γυμνάσιο

petrosp13

Παράθεση από: Παναγιώτης Τσιωτάκης στις 17 Μαρ 2016, 10:30:57 ΠΜ
Υπενθυμίζεται ότι οδηγίες για το μάθημα ΑΕΠΠ  καθορίζονται από το Υπουργείο Παιδείας καθώς και από το Ινστιτούτο Εκπαιδευτικής Πολιτικής (ΙΕΠ), ως εκ τούτου είναι προφανές ότι οι προτάσεις αυτές  δεν είναι επίσημες και δεν δεσμεύουν ούτε το Υπουργείο ούτε φυσικά την Κεντρική Επιτροπή Γενικών Εξετάσεων.

Δηλαδή το ΙΕΠ θα εκδώσει οδηγίες χωρίς να τις λάβει πρώτα από τους σχολικούς συμβούλους Πληροφορικής;
Τι εννοούμε ότι οι προτάσεις αυτές δεν είναι επίσημες;
Το ΙΕΠ τις αποφασίζει ή απλά τις εκδίδει με βάση τα προτεινόμενα κάθε κλάδου;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

P.Tsiotakis

Έλαβα το mail σε λίστα, όχι προσωπικά
Νομιζω το κειμενο είναι σαφές

Diotima

Παράθεση από: Παναγιώτης Τσιωτάκης στις 17 Μαρ 2016, 10:30:57 ΠΜ
Πριν 5 λεπτά έλαβα στο mail μου (σε λίστα αποδεκτών) το κείμενο "Οδηγίες – διευκρινήσεις για την διδασκαλία του 5ου κεφ. ΑΕΠΠ"
Σχολικού Συμβούλου, που περιέχει προτάσεις και όχι επίσημες οδηγίες, αλλά ορθή πρακτική για την κοινή αντιμετώπιση του ζητήματος
Παναγιώτη σε ευχαριστώ προσωπικά για την ανάρτηση του mail.
Ανήκω στον ιδιωτικό τομέα και δε θα μπορούσα να έχω επαφή ώστε να ξέρω αν κάποιες ιδέες που ανέπτυξα εδώ, εγώ, ή κάποιος άλλος, είναι αποδεκτές από τους συμβούλους.
Δε με πειράζει όμως αυτό, το σημαντικό για μένα είναι ότι υπάρχει το ΣΤΕΚΙ, στο οποίο είμαι αποδεκτή και στο οποίο μπορούμε να επικοινωνούμε χωρίς οποιουδήποτε τύπου "διαχωρισμούς".
Έχω δει την καρδιά του στις 30 πρώτες σελίδες του νήματος "Η επόμενη μέρα", που τις έχω διαβάσει 3 φορές.
Το ΣΤΕΚΙ θα πρέπει να μείνει για πάντα...

Η κοινή αντιμετώπιση είναι το πιο σημαντικό, κανείς από μας που αγαπάμε την ΑΕΠΠ και την Πληροφορική δε θέλει να πάει κάτι στραβά, ειδικά φέτος.

Παράθεση από: veni στις 17 Μαρ 2016, 11:09:06 ΠΜ
Όσον αφορά το Κεφάλαιο 5, από ότι φαίνεται είναι πολύ δύσκολο να ερμηνεύσεις συνδυαστικά την επίσημη ύλη(ΦΕΚ) σε σχέση με τις διευκρινιστικές ( ; ) οδηγίες.
Ο ρόλος του εκπαιδευτικού που καλείται να υλοποιήσει τα παραπάνω είναι ΚΑΤΑΛΥΤΙΚΟΣ.

Σε αυτή την κατεύθυνση επισυνάπτω κάποιες στοιχειώδεις σημειώσεις (ένα μπούσουλα).
Σε ευχαριστούμε Γιώργο για το "μπούσουλα". Το Σαββατοκύριακο θα φτιάξω τις σημειώσεις μου στο 5ο κεφ. με τις οποίες θα το διδάξω και θα βοηθήσει.

P.Tsiotakis

 
Και πράγματι, όπως είχα υποθέσει, όπως είναι ορατό στο έγγραφο, τις προτάσεις δημοσίευσε ο μόνος .... που θα μπορούσε/απέμεινε για να το κάνει.

Καλή συνέχεια

theoni

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

ολγα

Παράθεση από: Παναγιώτης Τσιωτάκης στις 18 Μαρ 2016, 07:16:43 ΜΜ

Και πράγματι, όπως είχα υποθέσει, όπως είναι ορατό στο έγγραφο, τις προτάσεις δημοσίευσε ο μόνος .... που θα μπορούσε/απέμεινε για να το κάνει.

Καλή συνέχεια

Πολύ βοηθητικό. Μια μικρή "ένσταση" - πείτε μου αν έχω δίκιο.
Στο έγγραφο αναφέρεται:

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

Στοιχεία  Ν   Συγκρίσεις
100                     7
1.000                10
10.000              14
100.000            17
1.000.000         20
10.000.000       24
100.000.000     27
1.000.000.000  30


Όμως, οι συγκρίσεις του παραπάνω πίνακα για τη δυαδική αναζήτηση αναφέρονται στο μέγιστο αριθμό συγκρίσεων και όχι στο μέσο αριθμό συγκρίσεων.
Γιατί να συγκρίνουμε ανόμοια πράγματα δηλ. το μέσο αριθμό συγκρίσεων της γραμμικής με το μέγιστο αριθμό συγκρίσεων της δυαδικής;

petrosp13

Εύκολα αποδεικνύεται ότι η μέση περίπτωση της δυαδικής αναζήτησης είναι ίδια με την χειρότερη
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

theoni

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

petrosp13

Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

theoni

Εννοώ πως θα γίνει η σύγκριση μετάξυ δυαδικής και σειριακής ;;;;θα υπολογίσουμε πόσες πράξεις εκτελεί η σειριακή για ν=5 ας πουμε  θα υπολογίσουμε και τις πραξείς της δυαδικής και θα δούμε ποιά απο τις δυο εκτελεί περισσότερες πράξεις;;;

gpapargi

Η δυαδική στη χειρότερη περίπτωση είναι ασύγκριτα ταχύτερη από τη σειριακή στη μέση περίπτωση. Συγκρίνεις το ν/2 με το log2ν
Γιώργος Παπαργύρης

GB

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

Λαμπράκης Μανώλης

Καλημέρα σε όλους

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

Αν χ>0 τότε, και όχι Αν χ>=0 τότε .... άραγε ο τελεστής >= πόσες πράξεις είναι ??

1) μία πράξη ??
2) δύο πράξεις  (μία κάθε συγκριτικός τελεστής) ??
3) τρεις πράξεις (μία κάθε συγκριτικός τελεστής και μία το Η που γίνεται), όπως παρατήρησε κάποιος μαθητής μου (εύστοχη παρατήρηση)???

καμιά ιδέα ??

ευχαριστώ
κάποια ιδέα

Diotima

Παράθεση από: Λαμπράκης Μανώλης στις 27 Μαρ 2016, 11:34:47 ΠΜ
Καλημέρα σε όλους

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

Αν χ>0 τότε, και όχι Αν χ>=0 τότε .... άραγε ο τελεστής >= πόσες πράξεις είναι ??

1) μία πράξη ??
2) δύο πράξεις  (μία κάθε συγκριτικός τελεστής) ??
3) τρεις πράξεις (μία κάθε συγκριτικός τελεστής και μία το Η που γίνεται), όπως παρατήρησε κάποιος μαθητής μου (εύστοχη παρατήρηση)???

καμιά ιδέα ??

ευχαριστώ
κάποια ιδέα

Εγώ θα θεωρήσω ότι γίνεται μία σύγκριση μεταξύ της τιμής μιας μεταβλητής και μιας σταθεράς και θα το υπολογίσω ως μία πράξη. Όταν λένε οι οδηγίες "σύγκριση 2 μεταβλητών" χωρίς άλλη διευκρίνηση, καταλαβαίνω ότι ισχύει για οποιοδήποτε συγκριτικό τελεστή.Τώρα το πώς μεταγλωττίζεται το >= δε μας ενδιαφέρει.

Για παράδειγμα, ακόμα κι αν γίνεται η σύγκριση χ > ψ, που φανερά θα τη θεωρήσουμε μία πράξη, μπορεί ο μεταγλωττιστής να βρίσκει τη διαφορά χ-ψ και να τη συγκρίνει με το 0 για να ελέγξει αν είναι >0. Οπότε κάνει και μία αφαίρεση, στην πραγματικότητα 2 πράξεις. Μπορεί αυτό να ισχύει και για τη συνθήκη χ>=ψ. Αυτό δεν το ξέρουμε.

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

Λαμπράκης Μανώλης

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

Diotima

Παράθεση από: Λαμπράκης Μανώλης στις 27 Μαρ 2016, 03:14:13 ΜΜ
Και πάλι όμως πρέπει να υποθέσουμε, αυτό είναι που δεν μου αρέσει σε όλο τι κεφάλιάιο 5... αν δεν βάλουν κάτι ακριβώς μέσα από το βιβλίο τότε θα έχουμε μεγάλο θέμα...αν κάτι δεν οριζεται σαφώς στο βιβλίο τότε δεν μπορούμε να το αποδείξουμε...ας ελπίσουμε να πάνε όλα καλά με αυτό το θέμα

Δε χρειάζεται να υποθέσουμε τίποτα. Βλέπουμε μία σύγκριση, άρα είναι μία πράξη.
Όπως όταν δούμε την πράξη χ*ψ θα πούμε ότι είναι μία πράξη, άσχετα αν διδάσκουμε ότι εκτελείται ο αλγόριθμος του Πολλαπλασιασμού αλά Ρωσικά στο low level.
Πρέπει να ξεφύγουμε από το επίπεδο της assembly.

Λαμπράκης Μανώλης

Συνάδελφε επέτρεψέ μου να διαφωνίσω λίγο στο γεγονός ότι αυτό το κεφάλαιο εξ άναγκης υποθέτουμε πράγματα ..
αν ήταν έτσι θα γνωρίζαμε σαφώς πόσες πράξεις θεωρείται η εντολή κ<--κ+1 και η πόσες εντολή κ<--λ+α .. εγώ επιμένω, μακάρι να μην πέσει κάτι περίεργο από το κεφάλαιο αυτό, γιατί τότε δεν θα ξέρουμε τι να λέμε πάλι ...

Diotima

Παράθεση από: Λαμπράκης Μανώλης στις 27 Μαρ 2016, 07:41:13 ΜΜ
Συνάδελφε επέτρεψέ μου να διαφωνίσω λίγο στο γεγονός ότι αυτό το κεφάλαιο εξ άναγκης υποθέτουμε πράγματα ..
αν ήταν έτσι θα γνωρίζαμε σαφώς πόσες πράξεις θεωρείται η εντολή κ<--κ+1 και η πόσες εντολή κ<--λ+α .. εγώ επιμένω, μακάρι να μην πέσει κάτι περίεργο από το κεφάλαιο αυτό, γιατί τότε δεν θα ξέρουμε τι να λέμε πάλι ...

Νομίζω Μανώλη ότι έχεις παρακολουθήσει τις συζητήσεις όπως εξελίχθηκαν σε αυτό το νήμα και μάλλον θα έχεις διαβάσει όσα έγραψαν όσοι συμμετείχαν και τα σεντόνια που έχω γράψει εγώ στην προσπάθεια μου να ξεδιαλύνω όσο μπορώ αυτό το κεφάλαιο.
Υποστήριξα εξ' αρχής ότι υπάρχουν κενά, ασάφειες και ελλείψεις ορισμών.
Και δε γράφω κι όλα όσα θέλω... Κανονικά δεν πρέπει να πέσει τίποτα, το έχω ξαναπεί...
Πρότεινα να χρησιμοποιηθεί απόσπασμα απ' το πρώτο κεφάλαιο γι αυτά που λες και να δοθούν οι ορισμοί που λείπουν.
Το πράγμα κατέληξε σε κάποιες οδηγίες από τον κ. Κανίδη, που όσο και ανεπίσημες κι αν είναι δίνουν ένα μπούσουλα πλέον.
Προς τιμήν του τις ανάρτησε ο Παναγιώτης Τσιωτάκης. Εγώ θα τις ακολουθήσω στο θέμα που ρωτάς. Νομίζω θα ήταν καλό να τις ακολουθήσουμε για να υπάρξει μια κοινή αντιμετώπιση, τι άλλο μπορεί να γίνει; Είμαστε λιγότερο από 2 μήνες πριν τις Πανελλαδικές. Με βάση αυτά σου απάντησα.

ολγα

Σύμφωνα με τις οδηγίες του κ. Κανίδη:
"Συνεπώς η αύξηση (ή μείωση) της τιμής οποιασδήποτε μεταβλητής (π.χ  x <-- x+1) υπολογίζεται ως μια πράξη ενώ αν εμπλέκονται και άλλες μεταβλητές (x <-- y+1), υπολογίζεται ως δύο."

Ερώτηση:
Το παρακάτω υπολογίζεται ως μία πράξη. Σωστά;
i<--i+5

Άρα και η αύξηση του i στην παρακάτω "Για" επίσης  υπολογίζεται ως μία πράξη;
Για i από 5 μέχρι 100 με_βήμα 5

ολγα

Μήπως θα μπορούσε να απαντήσει κάποιος στην ερώτησή μου;

Λαμπράκης Μανώλης

Παράθεση από: ολγα στις 29 Μαρ 2016, 08:52:57 ΜΜ
Σύμφωνα με τις οδηγίες του κ. Κανίδη:
"Συνεπώς η αύξηση (ή μείωση) της τιμής οποιασδήποτε μεταβλητής (π.χ  x <-- x+1) υπολογίζεται ως μια πράξη ενώ αν εμπλέκονται και άλλες μεταβλητές (x <-- y+1), υπολογίζεται ως δύο."

Ερώτηση:
Το παρακάτω υπολογίζεται ως μία πράξη. Σωστά;
i<--i+5

Άρα και η αύξηση του i στην παρακάτω "Για" επίσης  υπολογίζεται ως μία πράξη;
Για i από 5 μέχρι 100 με_βήμα 5

Καλησπέρα...έχω την εντύπωση είναι σωστές και οι δύο ερωτήσεις σου...μία πράξη και τα δύο

lsourtzo

Παράθεση από: anta_113 στις 12 Μαρ 2016, 03:49:50 ΜΜ
Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης


Παράθεση από: NiColas1957 στις 15 Μαρ 2016, 06:33:16 ΜΜ

Μα αφού στις οδηγίες λένε ότι οι μαθητές ΔΕΝ πρέπει να ασχοληθούν με τον υπολογισμό της Πολυπλοκότητας Ο
Γιατί να το ρωτήσουν αυτό ?    ???


τελικά θα απαντήσει κανείς σε αυτό ???


lsourtzo

Παράθεση από: andreas_p στις 05 Απρ 2016, 10:56:57 ΠΜ
O(n*m)

Μα αφού στις οδηγίες λένε ότι οι μαθητές ΔΕΝ πρέπει να ασχοληθούν με τον υπολογισμό της Πολυπλοκότητας Ο
Γιατί να το ρωτήσουν αυτό ?

Vangelis

Παράθεση από: anta_113 στις 12 Μαρ 2016, 03:49:50 ΜΜ
Καλησπέρα.
Θα ήθελα να ρωτήσω ποια είναι η σωστή απάντηση στην ερώτηση: Ποια είναι η πολυπλοκότητα του τμήματος αλγορίθμου
Για i από 1 μέχρι n
   Για j από 1 μέχρι m
       διάβασε Α[i,j]
   Τέλος_επανάληψης
Τέλος_επανάληψης


Παράθεση από: NiColas1957 στις 15 Μαρ 2016, 06:33:16 ΜΜ

Μα αφού στις οδηγίες λένε ότι οι μαθητές ΔΕΝ πρέπει να ασχοληθούν με τον υπολογισμό της Πολυπλοκότητας Ο
Γιατί να το ρωτήσουν αυτό ?    ???



Παράθεση από: lsourtzo στις 04 Απρ 2016, 01:35:36 ΜΜ
τελικά θα απαντήσει κανείς σε αυτό ???


Φυσικά και δεν θα το ρωτήσουν
(το ρωτάμε εμείς για να γίνεται συζήτηση, το κακό είναι ότι μπορεί αν τα διαβάζουν και μαθητές και να τρελαίνονται)

twisted

Καλησπέρα στην κοινότητα....

Να κάνω και εγώ μια ερώτηση. Αν έχουμε τη συνθήκη: x <> y ΚΑΙ x >= w + 10 πόσες πράξεις είναι;;;

theoni

Βαση των συζητήσεων που έχουν γίνει  είναι 4πράξεις μια το <> μια το και  μια το >= και μια το +

twisted

Μάλιστα, το λογικό λοιπόν.... απλά έλεγα μήπως πρέπει να θεωρήσουμε κάτι διαφορετικό για το >=.... :-\

nikolasmer

Αν δε γίνεται πλήρης αποτίμηση λογικών τελεστών; Τι κάνουμε; Με το σύνολο των πράξεων εννοώ .
Μερεντίτης Νικόλαος
Πληροφορικός

Λάμπρος Παπαδόπουλος

Δεν αναφέρεται πουθενά η μερική αποτίμηση των λογικών εκφράσεων.
Η αποτίμηση των λογικών εκφράσεων είναι πάντα πλήρης.

Γιάννης Αναγνωστάκης

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

Στο http://ebooks.edu.gr/new/classcoursespdf.php?classcode=DSGL-C υπάρχει το διδακτικό πακέτο της ΑΕΠΠ
Μέσα σε αυτό υπάρχει το βιβλίο καθηγητή λπν, που για την ΔΣ1/Σελ. 52/1η άσκηση δίνει ως απάντηση ότι η πολυπλοκότητα ειναι Ο(n)....
Αυτό δεν είναι εντελώς λάθος επιστημονικά; (Δεν αναφέρομαι στο οτι λείπει η αρχική τιμή του i και η εντολή για το βήμα, αλλά στο πως αντιμετωπίζουμε την τάξη πολυπλοκότητας του)

Diotima

Φυσικά και είναι λάθος η απάντηση. Η πολυπλοκότητα του αλγορίθμου είναι της τάξης Ο(1) και όχι Ο(n).

evry

Αν μιλάμε για την ΔΣ1 , σελ. 52 , το 1, κατά τη γνώμη μου οι παρακάτω πιθανές απαντήσεις έχουν νόημα:

1) Δεν ορίζεται πολυπλοκότητα διότι δεν είναι αλγόριθμος αφού περιέχει ατέρμων βρόχο.

2) Είναι O( N ) , όπου Ν είναι το πλήθος των επαναλήψεων, το οποίο όμως τείνει στο άπειρο.
Η λογική εδώ είναι ότι αν διπλασιάσουμε το Ν θα διπλασιαστεί και η απόδοση άρα είναι γραμμική η σχέση της απόδοσης με το Ν

Λογικά στο βιβλίο καθηγητή έδωσαν τη 2η απάντηση.

Ο(1) δεν είναι σε καμία περίπτωση αφού δεν μπορούμε να βρούμε σταθερά C στον ορισμό την οποία να θέσουμε ίση με άπειρο, κάτι που είναι μαθηματικά λάθος.

Σε τέτοιες περιπτώσεις που είναι "ακραίες" , ο ορισμός μπορεί να μας βοηθήσει να βγάλουμε άκρη.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Diotima

Γράφω τον αλγόριθμο που δίνει η άσκηση:

Όσο i<100 επανάλαβε
  a ← 2*i
Τέλος_επανάληψης

Στην απάντηση στο βιβλίο του καθηγητή (σελ. 140) γράφει:

"Το κομμάτι του αλγορίθμου είναι ένας απλός βρόχος η = 100 επαναλήψεων.
Άρα, η πολυπλοκότητα είναι γραμμική O(n)."

Οπότε υποθέτω ότι έχει ξεχάσει την αύξηση του i, i<-- i+1 μέσα στο βρόχο, όπως και την αρχική τιμή του i.

Με βάση λοιπόν τον ορισμό του βιβλίου για την Ο(1) (σελ.96):

"Ο(1). Κάθε εντολή του προγράμματος εκτελείται μία φορά ή το πολύ μερικές μόνο φορές. Στην περίπτωση αυτή λέγεται ότι ο αλγόριθμος είναι σταθερής πολυπλοκότητας."

και τα παραπάνω ο αλγόριθμος έχει τάξη Ο(1).

Αν παραβλέψουμε την απάντηση στο βιβλίο του καθηγητή, δηλαδή ότι εκτελεί 100 επαναλήψεις και κρίνουμε τον αλγόριθμο όπως δίνεται, τότε θα κάνει είτε καμία είτε άπειρες επαναλήψεις και συμφωνώ με την απάντηση 1) που δίνεις.

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

Η απάντηση όμως που έδωσαν, το να γράφουν ότι ο αλγόριθμος κάνει 100 επαναλήψεις, άρα έχει πολυπλοκότητα Ο(n) είναι επιστημονικό λάθος.

evry

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

Πάντως όταν έλεγα για ορισμό δεν εννοούσα αυτούς του βιβλίου. Εννοώ τον αυστηρό μαθηματικό ορισμό του Ο. Με αυτό δεν υπάρχουν περιθώρια για παρερμηνείες.
Επίσης η απόδοση πολυπλοκότητας σε έναν βρόχο που δεν τερματίζει ποτέ έχει ενδιαφέρον από θεωρητικής πλευράς. Εδώ θα πρέπει να δούμε τον ορισμό.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Diotima

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

Με απασχόλησε κι εμένα κάποια στιγμή η πολυπλοκότητα βρόχων που δεν τερματίζουν, από μικρή έρευνα που έκανα, στο λίγο χρόνο που είχα, η επικρατούσα άποψη που έχω συμπεράνει προς το παρόν είναι αυτή που γράφεις στο 1), ότι αναιρείται ο ορισμός του αλγορίθμου όταν έχουμε ατέρμονα βρόχο, οπότε δεν ορίζεται η πολυπλοκότητα. Το ερώτημα που με οδήγησε σε αυτήν την έρευνα είναι τι πολυπλοκότητα θα είχε ένας έλεγχος εγκυρότητας ενός δεδομένου εισόδου, ως προς το πλήθος των επαναλήψεων που μπορεί να εκτελέσει.

Λάμπρος Παπαδόπουλος

#104
Στην ΔΤ1  στο βιβλίο του καθηγητή (σελ 138) γράφει :
"Γενικά, ισχύει ότι κάθε απλός βρόχος έχει γραμμική πολυπλοκότητα,
κάθε διπλός βρόχος έχει τετραγωνική πολυπλοκότητα κοκ."

Οπότε ο/η συγγραφέας των ασκήσεων (και των απαντήσεων) ακολουθούν αυτή την
πρόταση που μπορούμε να χρησιμοποιήσουμε για να υπολογίσουμε "γρήγορα και βρώμικα"
μια πολυπλοκότητα αλλά στη συγκεκριμένη περίπτωση (ΔΣ1) τη χρησιμοποιούν λάθος.
Επίσης δεν καταλαβαίνω γιατί στην απάντηση του ΔΤ2 (σελ 139) χρησιμοποιούν πίνακα με
30 θέσεις.
Επειδή όμως διαβάζουν και μαθητές να διευκρινίσουμε ότι ο υπολογισμός της τάξης ενός αλγορίθμου είναι
εκτός ύλης

Diotima

Ο κανόνας "Γενικά, ισχύει ότι κάθε απλός βρόχος έχει γραμμική πολυπλοκότητα, κάθε διπλός βρόχος έχει τετραγωνική πολυπλοκότητα κοκ." δεν ισχύει όμως όταν οι βρόχοι έχουν σταθερό αριθμό επαναλήψεων. Την απάντηση στη ΔΤ2 δεν την είχα προσέξει, έχει σταθερό βρόχο με 30 επαναλήψεις και απαντά λάθος ότι η πολυπλοκότητα είναι Ο(n) ενώ είναι Ο(1). Η εκφώνηση της άσκησης δε αναφέρει κάποιο σταθερό πλήθος μαθητών, αναφέρει "τους μαθητές της τάξης σας" οπότε σου λέει αποκλείεται να είναι πάνω από 30, αυτό νομίζω ότι σκέφτηκε. Ένας μαθητής θα την έλυνε ίσως με το πραγματικό πλήθος των μαθητών της τάξης του.

Πάντως το συμπέρασμα που βγάζω από τις απαντήσεις της ΔΣ1 και της ΔΤ2 είναι ότι όποιος ή όποιοι απάντησαν εφαρμόζουν λάθος τον παραπάνω κανόνα σε βρόχους με σταθερό πλήθος επαναλήψεων.

Λάμπρος Παπαδόπουλος

Παράθεση από: Diotima στις 10 Μαΐου 2016, 01:10:01 ΜΜ
Ο κανόνας "Γενικά, ισχύει ότι κάθε απλός βρόχος έχει γραμμική πολυπλοκότητα, κάθε διπλός βρόχος έχει τετραγωνική πολυπλοκότητα κοκ." δεν ισχύει όμως όταν οι βρόχοι έχουν σταθερό αριθμό επαναλήψεων.

Σωστά. Γι΄αυτό είπα ότι τον χρησιμοποιούν λανθασμένα.
Όσο για το ΔΤ2 η απάντηση είναι σωστή. Η αντίρρησή μου είναι οτι στην απάντηση χρησιμοποιεί ένα στιγμιότυπο του προβλήματος (30 μαθητές) για να απαντήσει για τη γενική περίπτωση ( n μαθητές ).

 

gpapargi

Η συζήτηση για την πολυπλοκότητα και την τάξη θα πρέπει να ξεκινάει από το ποια είναι η είσοδος. Στη συνέχεια πρέπει να ξεκαθαρίσουμε ποιο είναι το μέγεθος της εισόδου. Αυτό κανονικά είναι το πλήθος των bits. Μπορεί όμως να είναι κάποιο πολλαπλάσιό του όπως είναι το πλήθος των bytes ή το πλήθος των χαρακτήρων. Το να πάρεις κάποιο πολλαπλάσιο δεν αλλάζει την τάξη του αλγορίθμου, απλά αλλάζει το συντελεστή του μεγιστοβάθμιου όρου. Σαν να αλλάζεις μονάδα μετρήσεως δηλαδή.
Το μέγεθος της εισόδου  θα είναι η ανεξάρτητη μεταβλητή μας. Η πολυπλοκότητα είναι μια συνάρτηση με ανεξάρτητη μεταβλητή το μέγεθος της εισόδου και εξαρτημένη το πλήθος των βημάτων.
Στη ΔΤ2 από ότι καταλαβαίνω είσοδος είναι το πλήθος των στοιχείων του πίνακα (που είναι πολλαπλάσιο των χαρακτήρων που χρειαζόμαστε για να κωδικοποιήσουμε τον ένα αριθμό). Αν είναι λοιπόν το πλήθος των στοιχείων εισόδου είναι ν, η πολυπλοκότητα είναι Ο(ν)
Βέβαια θα έπρεπε να το γράψει
//Δεδομένα donation,ν//
Για ι από 1 μέχρι ν
...

Αλλά δεν μπορεί να εννοεί κάτι άλλο αφού αν έδινε πχ 50 στοιχεία δε θα ήταν σωστό το
«Για ι από 1 μέχρι 30». Σε αυτή την περίπτωση θα έγραφε τότε «Για ι από 1 μέχρι 50».

Αυτό που λέει το βιβλίο ότι  διπλός βρόχος = τετραγωνική πολυπλοκότητα και μονός βρόχος = γραμμική πολυπλοκότητα, είναι κάπως ελαφρύ. Πχ μπορώ να διαβάσω  100 στοιχεία και να τα αποθηκεύσω σε δισδιάστατο πίνακα 10Χ10 ή σε μονοδιάστατο πίνακα 100 θέσεων. Δεν μπορεί να κάνω τα ίδια βήματα και στη μια να έχω τετραγωνική και στην άλλη γραμμική πολυπλοκότητα. Δεν έχει ληφθεί υπόψη η είσοδος και το μέγεθος εισόδου δηλαδή η ανεξάρτητη μεταβλητή μου. Η συζήτηση χωρίς αυτό είναι στον αέρα.
Αυτό που λέει το βιβλίο ισχύει για το πλήθος των επαναλήψεων. Αυτό δεν έχει να κάνει απαραίτητα με το μέγεθος εισόδου αφού μπορεί ένας διπλός βρόχος να μην επεξεργάζεται στοιχεία εισόδου.
Γιώργος Παπαργύρης

kpapad13

Καλησπέρα συνάδελφοι θα ήθελα τη γνώμη σας,

Στην εντολή Γράψε α, β + γ πόσες πράξεις έχουμε;  Είναι 2 (1 για την πρόσθεση και 1 για την έξοδο ) ή 3 (1 για την πρόσθεση , 1 για την έξοδο του α και 1 για την έξοδο του β+γ ); Ελπίζω αν πέσει κάτι τέτοιο να γίνεται η έξοδος κάθε πληροφορίας με διαφορετική εντολή...

Αθανάσιος Πέρδος

Παράθεση από: gpapargi στις 10 Μαΐου 2016, 03:27:13 ΜΜ
Αυτό που λέει το βιβλίο ότι  διπλός βρόχος = τετραγωνική πολυπλοκότητα και μονός βρόχος = γραμμική πολυπλοκότητα, είναι κάπως ελαφρύ. Πχ μπορώ να διαβάσω  100 στοιχεία και να τα αποθηκεύσω σε δισδιάστατο πίνακα 10Χ10 ή σε μονοδιάστατο πίνακα 100 θέσεων. Δεν μπορεί να κάνω τα ίδια βήματα και στη μια να έχω τετραγωνική και στην άλλη γραμμική πολυπλοκότητα. Δεν έχει ληφθεί υπόψη η είσοδος και το μέγεθος εισόδου δηλαδή η ανεξάρτητη μεταβλητή μου. Η συζήτηση χωρίς αυτό είναι στον αέρα.
Αυτό που λέει το βιβλίο ισχύει για το πλήθος των επαναλήψεων. Αυτό δεν έχει να κάνει απαραίτητα με το μέγεθος εισόδου αφού μπορεί ένας διπλός βρόχος να μην επεξεργάζεται στοιχεία εισόδου.

Επειδή δεν μπορώ να το βρω, σε ποιο σημείο αναφέρεται αυτό στο σχολικό βιβλίο;

dpa2006

Παράθεση από: Αθανάσιος Πέρδος στις 11 Μαΐου 2016, 11:35:00 ΜΜ
Επειδή δεν μπορώ να το βρω, σε ποιο σημείο αναφέρεται αυτό στο σχολικό βιβλίο;
Βιβλίο Εκπαιδευτικού σελ 132 (138)
ΔΤ1
ΠαράθεσηΓενικά, ισχύει ότι κάθε απλός βρόχος έχει γραμμική πολυπλοκότητα, κάθε διπλός βρόχος έχει τετραγωνική πολυπλοκότητα κοκ.
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

Αθανάσιος Πέρδος

Παράθεση από: dpa2006 στις 11 Μαΐου 2016, 11:54:39 ΜΜ
Βιβλίο Εκπαιδευτικού σελ 132 (138)
ΔΤ1
Ευχαριστώ πολύ, κοίταξα μόνο το βιβλίο μαθητή και το τετράδιο. Βέβαια λέει γενικά άρα δεν είναι απόλυτο αλλά πράγματι δεν καλύπτει όλες τις περιπτώσεις.  Είναι όμως στην εξεταστέα ύλη ο υπολογισμός αυτός;
Επίσης δεν είχα διαβάσει όλη την συζήτηση όπου προφανώς υπάρχει η απάντηση στο ερώτημα μου.

gpapargi

Το εφαρμόζει πάντως και στο παράδειγμα 2 (σελ 46) στο τετράδιο μαθητή. Βγάζει τετραγωνικό τον αλγόριθμο ενώ είναι γραμμικός.
Γιώργος Παπαργύρης

Λάμπρος Παπαδόπουλος

Παράθεση από: gpapargi στις 12 Μαΐου 2016, 11:48:17 ΠΜ
Το εφαρμόζει πάντως και στο παράδειγμα 2 (σελ 46) στο τετράδιο μαθητή. Βγάζει τετραγωνικό τον αλγόριθμο ενώ είναι γραμμικός.

Το εφαρμόζει σωστά. Ο αλγόριθμος είναι τετραγωνικός.  Αν μέτρησα σωστά οι πράξεις είναι 2n2+4n+4 <=10n2.
Άρα Ο(n2)

gpapargi

Παράθεση από: Λάμπρος Παπαδόπουλος στις 12 Μαΐου 2016, 12:14:59 ΜΜ
Το εφαρμόζει σωστά. Ο αλγόριθμος είναι τετραγωνικός.  Αν μέτρησα σωστά οι πράξεις είναι 2n2+4n+4 <=10n2.
Άρα Ο(n2)

Ποιο είναι το μέγεθος της εισόδου;
Γιώργος Παπαργύρης


gpapargi

Γι αυτό υπάρχει η διαφωνία. Διαβάζει n^2 στοιχεία οπότε το μέγεθος της εισόδου κατά τη γνώμη μου είναι n^2. Η συνάρτηση f(n^2)=2n^2+4n+4 είναι γραμμική.
Το μέγεθος της εισόδου είναι το πόσα στοιχεία διαβάζει (δες και αυτά που έγραψα στις 10/5 για τα bits και τους χαρακτήρες)
Γιώργος Παπαργύρης

Λάμπρος Παπαδόπουλος

Καταλαβαίνω τι λες αλλά το θέμα είναι καθαρά μαθηματικό και ο μαθηματικός ορισμός βγάζει Ο(n2)
Βρίσκουμε μια συνάρτηση που φράσσει απο πάνω αυτή που έχουμε (ενδεχομένως απο κάποιο σημείο και μετά)

και η f(n2)=2n2+4n+4 δεν είναι γραμμική

gpapargi

Παράθεση από: Λάμπρος Παπαδόπουλος στις 12 Μαΐου 2016, 12:47:08 ΜΜ
και η f(n2)=2n2+4n+4 δεν είναι γραμμική

Προφανώς είναι μαθηματικό το θέμα. Η f(n^2) είναι σύνθετη συνάρτηση. Ποιος είναι ο τύπος για το f(n);
Γιώργος Παπαργύρης

Λάμπρος Παπαδόπουλος

 f(n)=2n2+4n+4 και για c=3 και n>=5 ισχύει πάντα |f(n)|<=cn2. Αρα η τάξη του αλγορίθμου είναι Ο(n2)

alkisg

Νομίζω ότι η διαφωνία είναι στο "ποιο είναι το ερώτημα", όχι "ποια είναι η απάντηση"...
Να αλλάξω ελαφρώς την άσκηση για να γίνει πιο σαφής η διαφωνία;

Έχουμε έναν αλγόριθμο που διαβάζει έναν δισδιάστατο, αλλά όχι τετραγωνικό, πίνακα k*m.

Πόσα στοιχεία διαβάζονται από το πληκτρολόγιο; k*m
Ποιο είναι το μέγεθος της εισόδου; k*m
Πόσες "βασικές πράξεις" ή πόσο χρόνο θα κάνει ο αλγόριθμος; σταθερά*k*m

Ποια είναι η πολυπλοκότητα του αλγορίθμου;
Ωπ, εδώ είμαστε. Πολυπλοκότητα ως προς τι;

1) Η απλή και διαισθητική απάντηση είναι ότι η πολυπλοκότητα είναι O(k*m), επειδή με τα ίδια νούμερα μετρήσαμε και τις πράξεις και το χρόνο εκτέλεσης.
Άρα μετρώντας την πολυπλοκότητα σε σχέση με τις διαστάσεις k, m του πίνακα, είναι O(k*m).
Αυτό νομίζω είναι και το πνεύμα της άσκησης του τετραδίου μαθητή, και γι' αυτό στον τετραγωνικό πίνακα που χρησιμοποιεί, λέει ότι η πολυπλοκότητα είναι O(n*n) = O(n²).

2) Η άλλη τακτική είναι να εκφράσουμε την πολυπλοκότητα σε σχέση με το μέγεθος της εισόδου.
Πόσο είναι το μέγεθος της εισόδου; k*m.
Αυτό θα το βαφτίσουμε n, δηλαδή θα ορίσουμε ότι είσοδος n = k*m
Ποια είναι η πολυπλοκότητα του αλγορίθμου σε σχέση με το μέγεθος της εισόδου n;
Προφανώς είναι γραμμικός αφού κάνει μόνο μία πράξη για κάθε στοιχείο της εισόδου, και επομένως η πολυπλοκότητά του είναι O(n).

Το πρόβλημα λοιπόν είναι αν ρωτάμε το (1) (το οποίο νομίζω ότι λέει ο Λάμπρος), ή το (2) (το οποίο νομίζω ότι λέει ο Γιώργος).

Νομίζω ότι το συγκεκριμένο παράδειγμα του βιβλίου ρωτάει το (1), δηλαδή ζητάει το χρόνο εκτέλεσης (και απαντάει) με βάση τις διαστάσεις του πίνακα, όχι με βάση μια νέα μεταβλητή n που θα αποτελούσε το μέγεθος της εισόδου.

gpapargi

Λάμπρο αν ισχύει ότι f(n)=2n2+4n+4 δεν μπορεί ταυτόχρονα να ισχύει και f(n2)=2n2+4n+4. Αυτό που θα ισχύει είναι f(n2)=2n4+4n2+4 (σύμφωνα με τη σύνθεση συναρτήσεων)

Άλκη αυτό που λέω εγώ το κατάλαβες. Θεωρώ ότι όταν μιλάς για πολυπλοκότητα μιλάς για συνάρτηση με ανεξάρτητη μεταβλητή το μέγεθος εισόδου (ή κάποιο σταθερό πολλαπλάσιο).

Ο Λάμπρος λέει ότι το μέγεθος εισόδου είναι n και ότι η f(n2)=2n2+4n+4 είναι γραμμικής τάξης με τα οποία διαφωνώ. Για αυτό και ρώτησα ποιο θεωρεί μέγεθος εισόδου (και απάντησε n και όχι n2 )
Γιώργος Παπαργύρης

dpa2006

Παράθεση από: Αθανάσιος Πέρδος στις 12 Μαΐου 2016, 10:40:13 ΠΜ
Ευχαριστώ πολύ, κοίταξα μόνο το βιβλίο μαθητή και το τετράδιο. Βέβαια λέει γενικά άρα δεν είναι απόλυτο αλλά πράγματι δεν καλύπτει όλες τις περιπτώσεις.  Είναι όμως στην εξεταστέα ύλη ο υπολογισμός αυτός;
Επίσης δεν είχα διαβάσει όλη την συζήτηση όπου προφανώς υπάρχει η απάντηση στο ερώτημα μου.

Αν θυμάμαι καλά ως την παράγραφος 5.1.4
http://edu.klimaka.gr/arxeio/nomothesia-fek/fek-1186-2015-exetastea-ylh-lykeio-klimaka.pdf
είναι η ύλη
Το συγκεκριμένο κομμάτι είναι η 5.3 Πολυπλοκότητα αλγορίθμων,άρα εκτός ύλης (διορθώστε με αν κάνω λάθος)
Είναι καθαρά Μαθηματικό Αντικείμενο,
Algorithms and Complexity Hermbet wilf
Pennsylvania University
https://www.math.upenn.edu/~wilf/AlgoComp.pdf

Αλγόριθμοι και Πολυπλοκότητα Φωτάκης Δημήτρης ΣΗΜΜΥ ΕΜΠ
http://www.corelab.ece.ntua.gr/courses/algorithms/

Ασυμπτωτικός Συμβολισμός
http://www.corelab.ece.ntua.gr/courses/algorithms/slides/03_AsymptoticNotation.pdf

Ασκήσεις στον Ασυμπτωτικό Συμβολισμό
http://www.corelab.ece.ntua.gr/courses/algorithms/problemsets/set01.pdf

Μερικές επιπλέον ασκήσεις (λυμένες) σε Αλγόριθμους και Πολυπλοκότητα

https://www.cs.auckland.ac.nz/courses/compsci220s1t/lectures/lecturenotes/GG-lectures/220exercises1.pdf

Σελ 4 έχει λυμένα παραδείγματα σε Big O notation

http://www.csc.kth.se/utbildning/kth/kurser/DD2354/algokomp10/Ovningar/Exercise1_Sol.pdf

A Gentle Introduction to Algorithms and Complexity
http://discrete.gr/complexity/

Ελπίζω να βοηθήσουν 

Όσον αφορά το βιβλίο και τις ασκήσεις δεν νομίζω πως μπορούμε να χρησιμοποιήσουμε Big O συμβολισμό ή οποιονδήποτε άλλον συμβολισμό σε μαθητές γιατί ξεπερνά κατά πολύ την ύλη και τη φιλοσοφία του μαθήματος και είναι εκτός ύλης.
Η προσέγγιση με τις πράξεις (καταμέτρηση) είναι η πιο ενδεδειγμένη.
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

Λάμπρος Παπαδόπουλος

Άλκη ευχαριστώ για την παρέμβαση ήταν αρκετά διαφωτιστική.
Όντως δεν απάντησα σωστά στο Γιώργο. Γιώργο με ρώτησες για το μέγεθος εισόδου κι εγώ σου απάντησα για
τη μεταβλητή που εξαρτάται από το μέγεθος εισόδου.

Στην ανάλυση που ανέφερα χρησιμοποίησα το πλήθος των βασικών πράξεων και έτσι προκύπτει η συνάρτηση f(n)=2n2+4n+4
Αυτό είναι και το συνηθισμένο. Προσωπικά δεν έχω συναντήσει ανάλυση με το ακριβές μέγεθος εισόδου αν και σε αυτά που έχω διαβάσει υπονοείται οτι υπάρχουν και άλλοι τρόποι. Προφανώς ένας θα είναι και αυτός που γράφεις αλλά σχολιάζοντας τη λύση μιας άσκησης νομίζω οτι θα πρέπει να κινηθούμε και σε όμοιο τρόπο ανάλυσης.

Η συνάρτηση που θα προκύψει με μεταβλητή το ακριβές μέγεθος εισόδου σίγουρα δεν θα έχει το ίδιο τύπο (δεν είμαι σίγουρος για το ποιος είναι μοιάζει να είναι  f(n)=2n+4n1/2+4 ) αλλά μου έγραψες ότι η συνάρτηση f(n2)=2n2+4n+4 είναι γραμμική και εγώ σου απάντησα ότι δεν είναι. Απ' ότι κατάλαβα όμως από το επόμενο σχόλιό σου εννοούσες γραμμικής τάξης που όντως είναι.

Πάντως ο συμβολισμός Ο δεν αποτελεί αυστηρό όριο οπότε κάθε συνάρτηση Ο(n) είναι και Ο(n2)  (Cormen)

@dpa2006 πολύ ενδιαφέρων κατάλογος.

Παράθεση από: dpa2006 στις 12 Μαΐου 2016, 05:21:26 ΜΜ
Όσον αφορά το βιβλίο και τις ασκήσεις δεν νομίζω πως μπορούμε να χρησιμοποιήσουμε Big O συμβολισμό ή οποιονδήποτε άλλον συμβολισμό σε μαθητές γιατί ξεπερνά κατά πολύ την ύλη και τη φιλοσοφία του μαθήματος και είναι εκτός ύλης.

Δυστυχώς εδώ υπάρχει μια ασάφεια στο κείμενο του Δεκεμβρίου. Αρχικά είπαν οτι οι μαθητές δεν θα πρέπει να εμπλακούν σε υπολογισμό της τάξης ενός αλγορίθμου. Αλλά τι σημαίνει η πρόταση:
"Τέλος, μπορεί να αναφερθεί ότι τα απλά προγράμματα, πρακτικά, μπορούν να αναλυθούν μετρώντας τους φωλιασμένους βρόγχους που υπάρχουν στο πρόγραμμα."



evry

Πράγματι, όμως έτσι καταστρέφουμε όλο το μάθημα, διότι αν ρωτήσουμε έναν μαθητή τι πολυπλοκότητα έχει η σειριακή αναζήτηση και αυτός απαντήσει εκθετική ή τετραγωνική ή κυβική θα είναι σωστός. Μπορεί να χρησιμοποιούμε το σύμβολο big-O , αλλά στην πραγματικότητα εννοούμε το Θ, δεν εννοούμε το Ο.
Αυτό έχει επικρατήσει γενικά στην πληροφορική, όλοι χρησιμοποιούν το Ο αλλά στην πραγματικότητα εννοούν το Θ, ή για να είμαι ακριβής το ελάχιστο άνω φράγμα (supremum) αφού σε κάποιες περιπτώσεις το Θ δεν ορίζεται (βλέπε σειριακή αναζήτηση ως το πιο κλασικό παράδειγμα που είναι O(n) και Ω(1)), αφού δεν υπάρχει πάντα tight bound.
Εμείς αυτό που ψάχνουμε είναι το Θ στην χειρότερη περίπτωση.

Παράθεση από: Λάμπρος Παπαδόπουλος στις 13 Μαΐου 2016, 12:30:17 ΠΜ
Πάντως ο συμβολισμός Ο δεν αποτελεί αυστηρό όριο οπότε κάθε συνάρτηση Ο(n) είναι και Ο(n2)  (Cormen)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Παράθεση από: gpapargi στις 12 Μαΐου 2016, 04:52:58 ΜΜ
Θεωρώ ότι όταν μιλάς για πολυπλοκότητα μιλάς για συνάρτηση με ανεξάρτητη μεταβλητή το μέγεθος εισόδου (ή κάποιο σταθερό πολλαπλάσιο).

Γιώργο αυτό δεν ισχύει πάντα, π.χ. ο υπολογισμός του ν-οστού δεκαδικού ψηφίου του αριθμού π σίγουρα δεν έχει πολυπλοκότητα Ο(1), όπου 1 η είσοδος. Εκεί θα εκφράσουμε την πολυπλοκότητα με βάση τον αριθμό των ενδιάμεσων δεκαδικών ψηφίων που πρέπει να υπολογίσουμε για να φτάσουμε τελικά στο ν-οστό.

Άλλοτε η πολυπλοκότητα εκφράζεται σε σχέση με το μέγεθος της εισόδου, άλλοτε με τις διαστάσεις πινάκων, άλλοτε σε σχέση με οποιαδήποτε "ν" και "μ" μεγέθη αντιστοιχούν στα for loops που κάνουμε κλπ. Δεν είναι αυτονόητο το τι χρησιμοποιούμε, γι' αυτό και αν ζητηθεί από εξετάσεις θα πρέπει να ξεκαθαρίζεται ως προς τι θα εκφραστεί.

Λάμπρος Παπαδόπουλος

Παράθεση από: evry στις 13 Μαΐου 2016, 01:58:48 ΠΜ
Πράγματι, όμως έτσι καταστρέφουμε όλο το μάθημα, διότι αν ρωτήσουμε έναν μαθητή τι πολυπλοκότητα έχει η σειριακή αναζήτηση και αυτός απαντήσει εκθετική ή τετραγωνική ή κυβική θα είναι σωστός. Μπορεί να χρησιμοποιούμε το σύμβολο big-O , αλλά στην πραγματικότητα εννοούμε το Θ, δεν εννοούμε το Ο.

Συμφωνούμε αλλά εξαρτάται τι ψάχνουμε κάθε φορά και τι ορισμός μας επιτρέπει. Αν υποθετικά μιλώντας χρειαζόμαστε έναν αλγόριθμο Ο(n2) και βρούμε έναν Ο(n) τότε είναι και Ο(n2) οπότε μας κάνει. Φυσικά όλα αυτά δεν αφορούν στο μάθημα στην τάξη.

VAIOS

Τελικά είναι μέσα στην ύλη οι ασκήσεις για τον υπολογισμό της πολυπλοκότητας ενός αλγορίθμου;  :-\

dpa2006

Παράθεση από: Λάμπρος Παπαδόπουλος στις 13 Μαΐου 2016, 12:30:17 ΠΜ
Άλκη ευχαριστώ για την παρέμβαση ήταν αρκετά διαφωτιστική.
Όντως δεν απάντησα σωστά στο Γιώργο. Γιώργο με ρώτησες για το μέγεθος εισόδου κι εγώ σου απάντησα για
τη μεταβλητή που εξαρτάται από το μέγεθος εισόδου.

Στην ανάλυση που ανέφερα χρησιμοποίησα το πλήθος των βασικών πράξεων και έτσι προκύπτει η συνάρτηση f(n)=2n2+4n+4
Αυτό είναι και το συνηθισμένο. Προσωπικά δεν έχω συναντήσει ανάλυση με το ακριβές μέγεθος εισόδου αν και σε αυτά που έχω διαβάσει υπονοείται οτι υπάρχουν και άλλοι τρόποι. Προφανώς ένας θα είναι και αυτός που γράφεις αλλά σχολιάζοντας τη λύση μιας άσκησης νομίζω οτι θα πρέπει να κινηθούμε και σε όμοιο τρόπο ανάλυσης.

Η συνάρτηση που θα προκύψει με μεταβλητή το ακριβές μέγεθος εισόδου σίγουρα δεν θα έχει το ίδιο τύπο (δεν είμαι σίγουρος για το ποιος είναι μοιάζει να είναι  f(n)=2n+4n1/2+4 ) αλλά μου έγραψες ότι η συνάρτηση f(n2)=2n2+4n+4 είναι γραμμική και εγώ σου απάντησα ότι δεν είναι. Απ' ότι κατάλαβα όμως από το επόμενο σχόλιό σου εννοούσες γραμμικής τάξης που όντως είναι.

Πάντως ο συμβολισμός Ο δεν αποτελεί αυστηρό όριο οπότε κάθε συνάρτηση Ο(n) είναι και Ο(n2)  (Cormen)

@dpa2006 πολύ ενδιαφέρων κατάλογος.

Δυστυχώς εδώ υπάρχει μια ασάφεια στο κείμενο του Δεκεμβρίου. Αρχικά είπαν οτι οι μαθητές δεν θα πρέπει να εμπλακούν σε υπολογισμό της τάξης ενός αλγορίθμου. Αλλά τι σημαίνει η πρόταση:
"Τέλος, μπορεί να αναφερθεί ότι τα απλά προγράμματα, πρακτικά, μπορούν να αναλυθούν μετρώντας τους φωλιασμένους βρόγχους που υπάρχουν στο πρόγραμμα."



Παράθεση
Δυστυχώς εδώ υπάρχει μια ασάφεια στο κείμενο του Δεκεμβρίου. Αρχικά είπαν οτι οι μαθητές δεν θα πρέπει να εμπλακούν σε υπολογισμό της τάξης ενός αλγορίθμου. Αλλά τι σημαίνει η πρόταση:
"Τέλος, μπορεί να αναφερθεί ότι τα απλά προγράμματα, πρακτικά, μπορούν να αναλυθούν μετρώντας τους φωλιασμένους βρόγχους που υπάρχουν στο πρόγραμμα."

Έχεις δίκιο,όπως το θέτεις.
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

dpa2006

Παράθεση από: evry στις 13 Μαΐου 2016, 01:58:48 ΠΜ
Πράγματι, όμως έτσι καταστρέφουμε όλο το μάθημα, διότι αν ρωτήσουμε έναν μαθητή τι πολυπλοκότητα έχει η σειριακή αναζήτηση και αυτός απαντήσει εκθετική ή τετραγωνική ή κυβική θα είναι σωστός. Μπορεί να χρησιμοποιούμε το σύμβολο big-O , αλλά στην πραγματικότητα εννοούμε το Θ, δεν εννοούμε το Ο.
Αυτό έχει επικρατήσει γενικά στην πληροφορική, όλοι χρησιμοποιούν το Ο αλλά στην πραγματικότητα εννοούν το Θ, ή για να είμαι ακριβής το ελάχιστο άνω φράγμα (supremum) αφού σε κάποιες περιπτώσεις το Θ δεν ορίζεται (βλέπε σειριακή αναζήτηση ως το πιο κλασικό παράδειγμα που είναι O(n) και Ω(1)), αφού δεν υπάρχει πάντα tight bound.
Εμείς αυτό που ψάχνουμε είναι το Θ στην χειρότερη περίπτωση.

Πολύ σωστή τοποθέτηση!!!
Οι Μαθητές δεν γνωρίζουν τους υπόλοιπους συμβολισμούς,και δεν χρειάζεται...
Αλλά η ύπαρξη και μόνο εντός ύλης του συγκεκριμένου ορισμού και της Θεωρίας δεν είναι προβληματική;
Εκτός αν κάνουμε απλοποιήσεις με σαφείς κανόνες.
Συνήθως όταν μπαίνει νέα ύλη σε ένα μάθημα στις Πανελλαδικές,το βάζουν για να αλλάξουν την θεματοδοσία και μπορεί να πέσει και θέμα.
Με όλα αυτά που συμβαίνουν μήπως τελικά κάνουν απλά  κακό...;;;!!! :( Ηθελημένα ή μη... :(
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

gpapargi

Παράθεση από: alkisg στις 13 Μαΐου 2016, 08:25:45 ΠΜ
Γιώργο αυτό δεν ισχύει πάντα, π.χ. ο υπολογισμός του ν-οστού δεκαδικού ψηφίου του αριθμού π σίγουρα δεν έχει πολυπλοκότητα Ο(1), όπου 1 η είσοδος. Εκεί θα εκφράσουμε την πολυπλοκότητα με βάση τον αριθμό των ενδιάμεσων δεκαδικών ψηφίων που πρέπει να υπολογίσουμε για να φτάσουμε τελικά στο ν-οστό.

Άλλοτε η πολυπλοκότητα εκφράζεται σε σχέση με το μέγεθος της εισόδου, άλλοτε με τις διαστάσεις πινάκων, άλλοτε σε σχέση με οποιαδήποτε "ν" και "μ" μεγέθη αντιστοιχούν στα for loops που κάνουμε κλπ. Δεν είναι αυτονόητο το τι χρησιμοποιούμε, γι' αυτό και αν ζητηθεί από εξετάσεις θα πρέπει να ξεκαθαρίζεται ως προς τι θα εκφραστεί.

Είναι περίεργο και ενδιαφέρον το θέμα Άλκη. Δεν είναι 1 το μέγεθος εισόδου στον αριθμό. Είναι το πλήθος των ψηφίων. Οπότε έτσι δε βγαίνει Ο(1).
Πχ ο αλγόριθμος
Διάβασε ν
Για ι από 1 μέχρι ν
   Γράψε ι
Τέλος_επανάληψης
Έχει εκθετική πολυπλοκότητα. Το μέγεθος εισόδου είναι το πλήθος των ψηφίων δηλαδή log(ν). Έτσι έχω f(log(ν))=ν που είναι εκθετική (αν θέλεις όπου log(ν) το x θα βγει το εκθετικό).

Το ερώτημα είναι γιατί ψάχνεις να βρεις αν ένας αριθμός είναι πρώτος , το μέγεθος εισόδου είναι το πλήθος των ψηφίων ενώ όταν έχεις πίνακα αριθμών προς ταξινόμηση μέγεθος εισόδου είναι το πλήθος των αριθμών.
Αυτό έχει να κάνει με το τι εννοούμε όταν λέμε ότι το μέγεθος εισόδου τείνει στο άπειρο. Στον έλεγχο πχ αν είναι πρώτος εννοούμε ότι μεγαλώνει απεριόριστα ο αριθμός δηλαδή το πλήθος των ψηφίων του. Στον πίνακα αριθμών προς ταξινόμηση όμως εννοούμε ότι μεγαλώνει το πλήθος των αριθμών και όχι το μέγεθος του καθενός από αυτούς. Σιωπηλά δηλαδή υποθέτεις ένα άνω όριο μεγέθους στους αριθμούς προς ταξινόμηση.
Στην πραγματικότητα μέγεθος εισόδου είναι το πλήθος των bits εισόδου. Το πλήθος των ψηφίων του αριθμού είναι ανάλογο (αριθμητικό πολλαπλάσιο) προς αυτό έτσι μπορούμε να το θεωρήσουμε σαν μέγεθος εισόδου για τι δεν αλλάζει την τάξη. Στο πλήθος των στοιχείων του πίνακα προς ταξινόμηση, (με στοιχεία φραγμένα άνω), το πλήθος των στοιχείων του πίνακα είναι ανάλογο των bits εισόδου έτσι μπορείς να χρησιμοποιήσεις αυτό σαν μέγεθος εισόδου.
Παίζοντας με τα μαθηματικά μπορούμε να εκφράσουμε το πλήθος των βημάτων σα συνάρτηση είτε του ν, είτε του ν^2 είτε της ρίζας του, ότι θέλουμε κάνουμε, πράγμα που θα μπορούσε να καταλήξει σε οποιαδήποτε πολυπλοκότητα.  Αλλά νομίζω ότι το παιχνίδι αυτό έχει ένα κανόνα και δεν είναι ανεξέλεγκτο. Πρέπει πάντα να έχουμε μεταβλητή που να είναι αριθμητικό πολλαπλάσιο των bits εισόδου. Αυτό δεν τηρείται  όταν έχω n^2 στοιχεία και θεωρήσω μέγεθος εισόδου το n. Αν το κάνω θα αλλοιώσω την τάξη. Εκεί εστιάζω τη διαφορά
Γιώργος Παπαργύρης

alkisg

Γιώργο δεν νομίζω ότι θα βρεις κάπου στη βιβλιογραφία να αναφέρουν ότι η σειριακή αναζήτηση έχει εκθετική πολυπλοκότητα... κι αυτό επειδή ως βασική μονάδα εισόδου αριθμητικών δεδομένων θεωρούμε τη λέξη (word) του επεξεργαστή, όχι το bit.
Κι αυτό με τη σειρά του γίνεται επειδή τα bit κάθε λέξης επεξεργάζονται παράλληλα από την CPU σε Ο(1) με τις αντίστοιχες εντολές assembly, είτε αυτός είναι ακέραιος είτε πραγματικός.
Βέβαια για να γίνουν οι παραπάνω πολύ λογικές παραδοχές, κατά την μελέτη της πολυπλοκότητας θεωρούμε ότι τα δεδομένα μας δεν υπερβαίνουν το μέγεθος της λέξης του επεξεργαστή, και επίσης ότι δεν χρειάζεται βιβλιοθήκη αριθμών άπειρης ακρίβειας.
Επιτρέπεται όμως ο compiler να κάνει emulation λέξης μεγέθους π.χ. 64 bit σε επεξεργαστή 32 bit, δηλαδή τεχνητή αύξηση του μεγέθους λέξης, χωρίς να μας επηρεάζει στη μελέτη της πολυπλοκότητας, αφού το emulation γίνεται σε σταθερό χρόνο, άρα πάλι Ο(1).

Στη συνέχεια θέτεις ένα παραπλήσιο, αλλά διακριτό θέμα, την μελέτη των αλγορίθμων όταν η είσοδος τείνει στο άπειρο. Αυτό συνήθως δεν αναφέρεται στο μέγεθος των αριθμών της εισόδου (που θα αφορούσε μέγεθος λέξης ή βιβλιοθήκη αριθμών άπειρης ακρίβειας), αλλά στο πλήθος των αριθμών της εισόδου (που αφορά το μέγεθος της RAM). Δηλαδή θεωρούμε ότι αυξάνουμε το μέγεθος του προβλήματος δίνοντας περισσότερους αριθμούς, όχι μεγαλύτερους (που να μην χωράνε σε μια λέξη).
Θεωρώ ότι κατά τη μελέτη πολυπλοκότητας αλγορίθμων, και το μέγεθος της λέξης και το μέγεθος της RAM τα θεωρούμε "επαρκή" για το πρόβλημα που έχουμε να λύσουμε, σταθερά και όσο μεγάλα χρειαζόμαστε αλλά όχι άπειρα, με κόστος χρήσης τους Ο(1).

Επίσης μια τελευταία παρατήρηση είναι ότι αν για κάποιο τραβηγμένο λόγο επιμέναμε ότι θέλουμε να αγνοήσουμε την αρχιτεκτονική των επεξεργαστών που είναι οργανωμένη σε λέξεις, και να αρχίσουμε να τα μετράμε όλα σε bit, τότε αυτό θα ήταν παραπλήσιο με τη χρήση βιβλιοθήκης αριθμών άπειρης ακρίβειας, και θα είχε σαν αποτέλεσμα ούτε οι βασικές πράξεις ούτε η προσπέλαση πινάκων να γίνεται πια σε Ο(1). Ούτε καν η προσπέλαση της RAM δεν θα γινόταν σε Ο(1), αφού δεν θα ήταν πια οργανωμένη σε λέξεις περιορισμένων bits. Ο απόλυτος χαμός. Θα χρειαζόμασταν διδακτορικό μόνο και μόνο για να μελετήσουμε την πολυπλοκότητα της σειριακής αναζήτησης... α πα πα! :)

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

Υ.Γ. ήθελα να αναφέρω ότι αντίστοιχες παραδοχές ισχύουν και για characters και για σταθερού μεγέθους strings και για structs/records, μιας και δεν αφορούν αριθμούς όλα τα προβλήματα, αλλά δεν ήμουν σίγουρος αν θα πρόσφερε ή θα έμπλεκε τη συζήτηση.

pgrontas

Δεν νομίζω ότι έχει σχέση οποιαδήποτε αναπαράσταση σε λέξεις κτλ. γιατί θα είναι πάντα σταθερό πολλαπλάσιο του πλήθους των bit.
Τυπικά, ο υπολογισμός της πολυπλοκότητας ενός αλγορίθμου γίνεται με βάση τον κοινά αποδεκτό φορμαλισμό του, δηλ. τις μηχανές Turing. Όταν λοιπόν λέμε μέγεθος της εισόδου εννοούμε πόσα κελιά της ταινίας θα χρειαστούν για να γράψουμε την είσοδο, όπου κάθε κελί δέχεται 1 bit.

Στην σειριακή αναζήτηση χρειάζονται cN κελιά όπου Ν το πλήθος των στοιχείων και c το πλήθος των bits που θα χρειαστούν για την κωδικοποίηση καθενός (δηλ. του μέγιστου).Στον έλεγχο του αν ένας αριθμός είναι πρώτος, γράφουμε την αναπαράσταση του ίδιου του αριθμού στο δυαδικό. Εκεί το μέγεθος της εισόδου N είναι το πλήθος των bits. Ο αλγόριθμος θα πρέπει να ελέγξει 2^Ν συνδυασμούς (τάξη μεγέθους) συμβόλων (αριθμών μέχρι το Ν) για να αποφανθεί. Η διαφορά είναι ότι στην σειριακή αναζήτηση δεν πρέπει να γράψουμε στην ταινία το Ν, γι' αυτό και δεν είναι εκθετική.

Συμπέρασμα: πρέπει να είναι σαφώς καθορισμένο το ποια θα είναι η είσοδος του αλγορίθμου. Επίσης μετά από αυτό πρέπει να είναι συμφωνούμε ποια βασική πράξη θα γίνεται με τα σύμβολα που είναι γραμμένα στην ταινία. Στην σειριακή αναζήτηση γίνεται σύγκριση, ενώ στον έλεγχο πρώτου γίνεται η παραγωγή όλων των συνδυασμών συμβόλων.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

tasospap

Συγνώμη, περιμένετε να γράψουν τα παιδιά για τον φορμαλισμό της μηχανής του Turing, για την ταινία με τα κελιά  και τα σύμβολα της;  :D :D :D :D :D :D :D :D :D

Το παίζετε ή πράγματι σκέφτεστε ετσι;

pgrontas

tasospap
Προφανώς και η συζήτηση δεν αφορά τους μαθητές αλλά την καλύτερη κατανόηση από εμάς τους εκπαιδευτικούς.
Περιμένω και τη δική σου συνεισφορά
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Παράθεση από: pgrontas στις 14 Μαΐου 2016, 10:19:49 ΠΜ
Στην σειριακή αναζήτηση χρειάζονται cN κελιά όπου Ν το πλήθος των στοιχείων και c το πλήθος των bits που θα χρειαστούν για την κωδικοποίηση καθενός (δηλ. του μέγιστου).

Παναγιώτη (και Γιώργο) δεν είμαι σίγουρος αν τελικά συμφωνούμε ή διαφωνούμε στην παρακάτω πρόταση:
Το μέγεθος c του βασικού τύπου δεδομένων μας (ομάδα κελιών / word / character / struct / whatever) κατά τον υπολογισμό της πολυπλοκότητας θεωρείται σταθερό, οι βασικές πράξεις πάνω τους κοστίζουν Ο(1), και έτσι δεν αναφερόμαστε καθόλου στο c.
Για παράδειγμα, η πολυπλοκότητα της σειριακής αναζήτησης, όπως αναφέρεται στη βιβλιογραφία, είναι Ο(Ν) και όχι Ο(c*N).

Αν συμφωνήσουμε ότι η απάντηση είναι "ναι", μετά θα μπορούμε να πάμε και στο επόμενο βήμα του αν η πολυπλοκότητα εκφράζεται πάντα σε σχέση με την είσοδο ή όχι.
Αν κάποιος ισχυρίζεται ότι η απάντηση είναι "όχι", δεν θα πρέπει να μας αποδείξει ότι το c αναφέρεται στα περισσότερα παραδείγματα της βιβλιογραφίας;

Σχετικά με το:
> Η διαφορά είναι ότι στην σειριακή αναζήτηση δεν πρέπει να γράψουμε στην ταινία το Ν
τα Ν στοιχεία της εισόδου (όπως και το στοιχείο κλειδί) δεν έχουν μέγεθος c το καθένα; Δεν γράφονται κι αυτά στην ταινία; Αν μετράς το c κατά την εκτύπωση των Ν πρώτων φυσικών αριθμών, πρέπει να το μετράς και στη σειριακή.

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

pgrontas

Παράθεση από: alkisg στις 14 Μαΐου 2016, 02:47:38 ΜΜ
Παναγιώτη (και Γιώργο) δεν είμαι σίγουρος αν τελικά συμφωνούμε ή διαφωνούμε στην παρακάτω πρόταση:
Το μέγεθος c του βασικού τύπου δεδομένων μας (ομάδα κελιών / word / character / struct / whatever) κατά τον υπολογισμό της πολυπλοκότητας θεωρείται σταθερό, οι βασικές πράξεις πάνω τους κοστίζουν Ο(1), και έτσι δεν αναφερόμαστε καθόλου στο c.
Για παράδειγμα, η πολυπλοκότητα της σειριακής αναζήτησης, όπως αναφέρεται στη βιβλιογραφία, είναι Ο(Ν) και όχι Ο(c*N).
Φυσικά και συμφωνούμε. Έτσι κι αλλιως οι σταθερες δεν εχουν καμία σημασία.

Παράθεση
Σχετικά με το:
> Η διαφορά είναι ότι στην σειριακή αναζήτηση δεν πρέπει να γράψουμε στην ταινία το Ν
τα Ν στοιχεία της εισόδου (όπως και το στοιχείο κλειδί) δεν έχουν μέγεθος c το καθένα; Δεν γράφονται κι αυτά στην ταινία; Αν μετράς το c κατά την εκτύπωση των Ν πρώτων φυσικών αριθμών, πρέπει να το μετράς και στη σειριακή.
Στη σειριακή αναζήτηση οι αριθμοί είναι ήδη γραμμένοι στην ταινία. Το ίδιο και το κλειδί. Δεν χρειάζεται να τους δημιουργήσει ο αλγόριθμος, όπως συμβαίνει με την περίπτωση του ελέγχου για το αν ένας αριθμός είναι πρώτος. Εκεί έχεις κενά Ν κουτάκια τα οποία προσπαθείς να γεμίσεις με όλους του συνδυασμούς για να φτιάξεις τους ενδιάμεσους αριθμούς, ενώ στη σειριακή αναζήτησης έχεις πολλά γεμάτα κουτάκια τα οποία προσπαθείς να συγκρίνεις με άλλο γεμάτο κουτάκι (το κλειδί).

Για να είμαι ειλικρινής, από τότε που πρωτοάκουσα για ψευδοπολυωνυμικούς αλγορίθμους πάντα με 'ετρωγε΄το θέμα που θέτει ο Γιώργος.
Αυτή είναι η εξήγηση που προσπαθώ να δώσω στον εαυτό μου και ελπίζω η συζήτηση εδώ να την βελτιώσει.

Και κάτι άσχετο, αλλά και σχετικό:
Το 2010 στο θερινό σχολείο για εκπαιδευτικούς πληροφορικής που είχε διοργανώσει ο Ιωσήφ Σηφάκης, είχε επιχειρηματολογήσει ότι πριν τη μύηση στους αλγόριθμους οι μαθητές θα έπρεπε να εισαχθούν στα πεπερασμένα αυτόματα, με τα οποία θα σχεδίαζαν βασικές καθημερινές ενέργειες μέσω των μεταβάσεων από τις διάφορες κατάστασεις (αν θυμάμαι καλά είχε αναφέρει το ασανσερ και το φανάρι), χωρίς φυσικά να αναφερθεί η υπόλοιπη θεωρία που μαθαίνουμε στο πανεπιστήμιο. Από αυτό συμπεραίνει κανείς τουλάχιστον το ότι δεν πρέπει να είμαστε βιαστικοί πριν απορρίψουμε τα διάφορα μοντέλα που υπάρχουν στην Πληροφορική ως ακατάλληλα για διδασκαλία.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Δηλαδή το "διαβάστε Ν αριθμούς και ένα κλειδί Κ και μετά κάντε σειριακή αναζήτηση"
έχει διαφορετική πολυπλοκότητα από το "έχουμε ήδη διαβασμένους τους Ν αριθμούς και το Κ, κάντε μόνο σειριακή αναζήτηση";

Δεν είναι και τα δύο Ο(Ν);

pgrontas

Και τα δύο έχουν Ο(Ν) φυσικά.

Όμως το ψάξε κάποιον αριθμό από όλους τους αριθμους με N bits έχει διαφορετική (εκθετική) από τα παραπάνω.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

Δεν είπα ποτέ ότι η σειριακή αναζήτηση έχει εκθετική πολυπλοκότητα. Αυτό που είπα είναι ότι εκθετική πολυπλοκότητα έχει το
Διάβασε ν
Για ι από 1 μέχρι ν
  Γράψε ι
Τέλος_επανάληψης

Αν ο αριθμός  ν είναι πχ 999 με τρεις μόνο χαρακτήρες εισόδου (τα 3 ψηφία του αριθμού) αναγκάστηκα να κάνω 10^3 επαναλήψεις.
Αντίθετα αν έχω διαβάσει 10^3 διαφορετικούς αριθμούς και κάνω σε αυτούς σειριακή έχω 10^3 επαναλήψεις.
Και στις 2 περιπτώσεις έχω ίδιο πλήθος επαναλήψεων αλλά το μέγεθος εισόδου είναι πολύ διαφορετικό. Η κωδικοποίηση δεν έχει σημασία. Οι σταθερές δεν αλλάζουν την τάξη.

tasospap αυτή τη στιγμή βλέπεις αυτό που κατά τη γνώμη μου είναι η μεγαλύτερη συνεισφορά του στεκιού: η συζήτηση για την αποσαφήνιση των εννοιών μεταξύ μας. Έχει γίνει αρκετές φορές στο παρελθόν και τώρα ξαναγίνεται λόγω των καινούργιων εννοιών που μπήκαν στην ύλη. Αφού κατασταλάξουμε στο τι ακριβώς συμβαίνει, θα το προσγειώσουμε και στο σχολικό επίπεδο  :)
Γιώργος Παπαργύρης

alkisg

ΟΚ Γιώργο νομίζω κατάλαβα ακριβώς πού διαφωνούμε, δεν είμαι όμως ακόμα σίγουρος αν ο Παναγιώτης τελικά συμφωνεί περισσότερο με σένα ή με μένα.

Συνεχίζουμε:
Επόμενη ερώτησή μου είναι, γιατί το "999" να θεωρείται μεγαλύτερη είσοδος από το "99".
Εσύ θα πεις ότι το ένα έχει 3 ψηφία και το άλλο 2.
Εγώ θα πω ότι και τα δύο είναι μία λέξη, ένας ακέραιος, οποιονδήποτε βασικό τύπο δεδομένων χρησιμοποιούμε.
Ο Παναγιώτης θα πει "ας δούμε τον μεγαλύτερο αριθμό που θα χρειαστούμε για να αποφασίσουμε πόσα bit χρειαζόμαστε". ΟΚ, ας πούμε ότι δεν γράφουμε τους πρώτους αριθμούς αλλά π.χ. τους αριθμούς από το 10000 και μετά, οπότε θα χρειαστούμε 5 ψηφία και στις δύο περιπτώσεις της εισόδου (είτε 10000 ως 10999 είτε 10000 ως 10099).
Δηλαδή η λέξη ή η ομάδα κελιών ή ο τύπος δεδομένων μας θα έχει αναγκαστικά πάντα 5 ψηφία. Νομίζω ότι κανείς μας δεν αναφέρεται σε τύπο δεδομένων με δυναμικά μεταβλητό αριθμό ψηφίων, σωστά;

Σ' αυτήν την περίπτωση η είσοδός μας δεν είναι στην πρώτη περίπτωση το 00999 και στην δεύτερη περίπτωση το 00099, άρα και στις δύο περιπτώσεις δεν θα έχουμε 5 ψηφία ως είσοδο;

edit: πιο απλός τρόπος να πω το ίδιο πράγμα:
Διάβασε α, β
Για ι από α μέχρι β
  Γράψε ι
Τέλος_επανάληψης

Το τρέχω δύο φορές: μία από 10000 ως 10999 και άλλη μία από 10000 ως 10099.
Εγώ λέω ότι και στις δύο εκτελέσεις, η είσοδός μου ήταν δύο αριθμοί, και η πολυπλοκότητα και στις δύο περιπτώσεις είναι Ο(Ν), όπου Ν=β-α
(δίνω δηλαδή ένα άλλο παράδειγμα αλγορίθμου όπου εγώ πιστεύω ότι η πολυπλοκότητα δεν μετριέται σε σχέση με το μέγεθος της εισόδου σε bit).
Εσείς σ' αυτό το παράδειγμα, πώς βγάζετε εκθετική την πολυπλοκότητα σε σχέση με την είσοδο;

gpapargi

Θέτω β-α=κ για λόγους ευκολίας. Το μέγεθος εισόδου είναι το πλήθος των ψηφίων. Το α έχει πλήθος ψηφίων log(α) και το β=α+κ έχει πλήθος ψηφίων log(α+κ). Άρα το μέγεθος εισόδου είναι log(α)+log(α+κ)=log[α*(α+κ)]=log(α^2+ακ). Το πλήθος των βημάτων είναι κ.
Άρα για τη συνάρτηση πολυπλοκότητας ισχύει f(log(α^2+ακ))=κ.
Για να βρω το f(ν) που είναι η συνάρτηση πολυπλοκότητας θα θέσω ν=log(α^2+ακ). Από αυτό προκύπτει ότι κ=(10^ν-α^2)/α. Άρα
f(ν)= (10^ν-α^2)/α που είναι εκθετική.
Γιώργος Παπαργύρης

gpapargi

Για να συνεννοηθούμε καλύτερα, ίσως βοηθήσει η εξής παρατήρηση: άλλο είσοδος και άλλο το μέγεθος της εισόδου. πχ στον αριθμό 123 είσοδος είναι ο αριθμός 123 αλλά μέγεθος εισόδου είναι τα 3 ψηφία. Αλγόριθμοι εκθετικοί ως προς το μέγεθος εισόδου αλλά πολυωνυμικοί ως προς την αριθμητική τιμής της εισόδου λέγονται ψευδοπολυωνυμικοί και είναι εκθετικοί κατά βάση
https://en.wikipedia.org/wiki/Pseudo-polynomial_time

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

Τα γράφω Άλκη αυτά γιατί πρόσεξα τη φράση σου:
"Εσείς σ' αυτό το παράδειγμα, πώς βγάζετε εκθετική την πολυπλοκότητα σε σχέση με την είσοδο;"

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

alkisg

Γιώργο εγώ θέλω να υποστηρίξω αυτό:
Παράθεση από: alkisg στις 13 Μαΐου 2016, 08:25:45 ΠΜ
Άλλοτε η πολυπλοκότητα εκφράζεται σε σχέση με το μέγεθος της εισόδου, άλλοτε με τις διαστάσεις πινάκων, άλλοτε σε σχέση με οποιαδήποτε "ν" και "μ" μεγέθη αντιστοιχούν στα for loops που κάνουμε κλπ. Δεν είναι αυτονόητο το τι χρησιμοποιούμε, γι' αυτό και αν ζητηθεί από εξετάσεις θα πρέπει να ξεκαθαρίζεται ως προς τι θα εκφραστεί.

Κι αυτό γιατί θεωρώ ότι κάποιοι συνάδελφοι έχουν στο νου τους ότι η πολυπλοκότητα εκφράζεται ΠΑΝΤΑ σε σχέση με το μέγεθος της εισόδου.

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

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

Αν μετά την παραπάνω διευκρίνηση, ξαναδιαβάσεις τα προηγούμενα μηνύματά μου, ίσως γίνει πιο σαφές ότι ήθελα να σου απαγορέψω να κάνεις αυτό που είπες,
"το β=α+κ έχει πλήθος ψηφίων log(α+κ)"
γιατί με βάση τον παραπάνω περιορισμό, το β έχει τον ίδιο αριθμό ψηφίων με το α και άρα δεν ισχύει ο υπολογισμός της πολυπλοκότητας που έγραψες.

Στον παραπάνω αλγόριθμο, θεωρώ ότι το καταλληλότερο μέγεθος για να εκφράσουμε την πολυπλοκότητα, είναι η διαφορά Ν=β-α, και ο αλγόριθμος έχει πολυπλοκότητα Ο(Ν).

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

Diotima

Παρακολουθώ με πολύ μεγάλο ενδιαφέρον τη συζήτηση σας την οποία θεωρώ εντελώς απαραίτητη και σημαντική για το μάθημα εφόσον πλέον διδάσκουμε επίσημα το 5ο κεφάλαιο. Χαίρομαι επίσης με την προοπτική ότι θα ξεκαθαριστούν οι έννοιες που αφορούν το κεφάλαιο στο σχολικό βιβλίο.
Θα ήθελα να προσθέσω και τη δικιά μου θεώρηση των πραγμάτων όσον αφορά τη θεωρία της πολυπλοκότητας ελπίζοντας να συμβάλλω λίγο σε αυτήν την προσπάθεια.
Βλέπω από την εξέλιξη της συζήτησης ότι η θεώρηση μου συμφωνεί με αυτό που θέλει να τονίσει ο Άλκης.

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

Διάβασε n
Για i από 1 μέχρι n
   Γράψε i
Τέλος_επανάληψης

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

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

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

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

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

Στο ερώτημα που θέτεις τώρα Άλκη για τους αριθμούς με σταθερά 5 ψηφία συμφωνώ μαζί σου, δε μπορεί να οριστεί εκφώνηση προβλήματος πολυπλοκότητας με τη λογική της εκφώνησης 2 που έγραψα παραπάνω, μόνο με τη λογική του 1, οπότε έχουμε Ο(n), όπου
n=β-α.

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

gpapargi

Παράθεση από: alkisg στις 16 Μαΐου 2016, 02:30:15 ΜΜ
Γιώργο εγώ θέλω να υποστηρίξω αυτό:
Κι αυτό γιατί θεωρώ ότι κάποιοι συνάδελφοι έχουν στο νου τους ότι η πολυπλοκότητα εκφράζεται ΠΑΝΤΑ σε σχέση με το μέγεθος της εισόδου.

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

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

Αν μετά την παραπάνω διευκρίνηση, ξαναδιαβάσεις τα προηγούμενα μηνύματά μου, ίσως γίνει πιο σαφές ότι ήθελα να σου απαγορέψω να κάνεις αυτό που είπες,
"το β=α+κ έχει πλήθος ψηφίων log(α+κ)"
γιατί με βάση τον παραπάνω περιορισμό, το β έχει τον ίδιο αριθμό ψηφίων με το α και άρα δεν ισχύει ο υπολογισμός της πολυπλοκότητας που έγραψες.

Στον παραπάνω αλγόριθμο, θεωρώ ότι το καταλληλότερο μέγεθος για να εκφράσουμε την πολυπλοκότητα, είναι η διαφορά Ν=β-α, και ο αλγόριθμος έχει πολυπλοκότητα Ο(Ν).

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

Υπάρχει θεμελιώδες θέμα στο πρόβλημα που θέτεις. Δεν αφήνεις το μέγεθος εισόδου σου να πάει προς το άπειρο. Σε αυτή την περίπτωση δε λειτουργούν οι συμβολισμοί Ο() κλπ γιατί αναφέρονται στο πως συμπεριφέρονται οι συναρτήσεις όταν το μέγεθος εισόδου (ή ή όποια μεταβλητή) τείνει στο άπειρο. Συγκεκριμένα εκεί που λέει «για κάθε ν>ν0» υπάρχει πρόβλημα. Δεν αφήνεις το ν να ανέβει απεριόριστα κι έτσι μπορεί να δεις μια πολυωνυμική με κάποιο συντελεστή να είναι μεγαλύτερη από την εκθετική κλπ. Δηλαδή όταν φιξάρεις το μέγεθος εισόδου χάνει το πράγμα το νόημά του που είναι η συμπεριφορά στο άπειρο. Και χωρίς Ο() πώς να μιλήσεις για τάξη αλγορίθμου, αφού ο «μεγιστοβάθμιος» όρος μπορεί να μην δεν είναι μεγαλύτερος από κάποιον άλλο εντός των φραγμάτων μας.

Πέρα από αυτό ήθελα να θέσω και κάτι άλλο. Ο κλασσικό αλγόριθμος που ελέγχει αν ένας αριθμός είναι πρώτος (κάνοντας όλες τις διαιρέσεις) είναι εκθετικός. Στη βιβλιογραφία το μέγεθος εισόδου είναι η ανεξάρτητη μεταβλητή. Μπορείς να πάρεις και κάποιο αριθμητικό πολλαπλάσιο που δεν αλλάζει όμως την τάξη. Δηλαδή λέω ότι όταν δεν παίρνεις το μέγεθος της εισόδου σαν ανεξάρτητη μεταβλητή είναι έτσι το πρόβλημα που παίρνεις κάποιο αριθμητικό πολλαπλάσιο. Πχ στον έλεγχο πρώτου είναι το πλήθος των ψηφίων. Στη διαίρεση είναι το πλήθος των ψηφίων. Στην αναζήτηση είναι το πλήθος των στοιχείων του πίνακα γιατί όταν το μέγεθος εισόδου τείνει στο άπειρο εννοούμε (σιωπηλά) ότι το πλήθος των αριθμών τείνει στο άπειρο και όχι το μέγεθος του κάθε αριθμού.
Είναι βασικό πάντως για να μιλήσεις για συμβολισμό Ο (και τάξη) να έχεις απειρισμό της μεταβλητής σου. Με φραγμένες εισόδους μπορείς φυσικά να βγάλεις το πλήθος των βημάτων και να το εκφράσεις και συναρτήσει όποιας μεταβλητής θέλεις, αλλά δε θα σε οδηγήσει στην τάξη (που έχει και τη μεγάλη αξία).
Δηλαδή λέω πως όποια κι αν είναι η μεταβλητή σου (είτε είσοδος είτε μέγεθος εισόδου)  για να σε πάει στην τάξη θα πρέπει να μπορεί να απειριστεί. Το γιατί να διαλέγεις το μέγεθος εισόδου και όχι την τιμή της εισόδου είναι κάτι που μπορούμε να το κουβεντιάσουμε.
Γιώργος Παπαργύρης

Diotima

Έχεις απόλυτο δίκιο Γιώργο, διότι η διαφορά n=β-α για 5ψήφιους δε μπορεί να τείνει στο άπειρο, στη χειρότερη περίπτωση είναι σταθερή. Άρα η τάξη είναι Ο(1) και όχι Ο(n) άσχετα αν ο αλγόριθμος εκτελείται γραμμικά ως προς τη διαφορά.

alkisg

Με την προηγούμενη τοποθέτηση της Diotima συμφωνώ κατά το μεγαλύτερο μέρος της, και είναι περίπου αυτά που ήθελα να γράψω στο τέλος σαν συμπεράσματα της συζήτησης.
Όμως με τις επόμενες τοποθετήσεις Γιώργου και Diotima διαφωνώ αρκετά.

Όπως η μελέτη συναρτήσεων, γραφικών παραστάσεων κλπ έχει νόημα ακόμα και αν είναι φραγμένες, έτσι και η πολυπλοκότητα έχει νόημα ακόμα κι αν μιλάμε για πεπερασμένο αριθμό bits τύπων δεδομένων, πεπερασμένη RAM κλπ. Αν μια λύση θέλει Ο(Ν²) και κάνει μέρες να εκτελεστεί με 1 GB δεδομένων, και μια άλλη θέλει Ο(Ν) και κάνει λίγα δευτερόλεπτα, μας ενδιαφέρει κι ας έχουμε περιορισμούς στα μεγέθη. Οι γραφικές τους παραστάσεις είναι ευθεία και παραβολή αντίστοιχα, ακόμα κι αν δεν φτάνει το Ν στο άπειρο. Το "μέγεθος προβλήματος" είναι οι ανεξάρτητες μεταβλητές με βάση τις οποίες καταφέρνουμε να ζωγραφίσουμε την "γραφική παράσταση" του χρόνου εκτέλεσης, την τάξη της πολυπλοκότητας, και δεν μας ενδιαφέρει αν το πεδίο εισόδου είναι ή όχι φραγμένο. Μας ενδιαφέρει ότι είναι ένας τρόπος να χαρακτηρίσουμε την ποιότητα της λύσης που βρήκαμε.

Επιστρέφω στο παράδειγμα του "διάβασε 2 αριθμούς και εμφάνισε τα νούμερα ανάμεσά τους" που έλεγα παραπάνω. Τον περιορισμό "5 ψηφία" τον πρόσθεσα για να προσπεράσω χωρίς πολλή μελέτη την απόδειξη της πολυπλοκότητας που έδωσε ο Γιώργος εδώ. Αφού ο περιορισμός μας μπέρδεψε αντί να μας ξεμπερδέψει, τον ξανααφαιρώ και μιλάμε πάλι για απεριόριστο αριθμό ψηφίων.

Γιώργο στην f(ν) που υπολόγισες εκεί, έχεις χρησιμοποιήσει τη διαφορά α-β (το κ), και άρα δεν κατάφερες να περιγράψεις την πολυπλοκότητα με βάση μόνο το μέγεθος της εισόδου, χρειάστηκες και την τιμή της διαφοράς.
Άρα ο ισχυρισμός μου ότι η πολυπλοκότητα αυτού του προβλήματος δεν μπορεί να περιγραφεί με βάση το μέγεθος της εισόδου, εξακολουθεί να ισχύει.
Εξάλλου είναι προφανές ότι για άπειρη είσοδο, π.χ. α=άπειρο και β=άπειρο-1, ο αλγόριθμος θα κάνει μόνο μία επανάληψη, δηλαδή ο χρόνος εκτέλεσης δεν μεγαλώνει εκθετικά έτσι απλά επειδή μεγαλώνει το μέγεθος bit της εισόδου του προβλήματος.

Αν θέλαμε να ζωγραφίσουμε την πολυπλοκότητα αυτού του προβλήματος, η γραφική παράσταση του χρόνου εκτέλεσης θα ήταν τριδιάστατη (και δυσνόητη) με βάση τις τιμές των α και β, διδιάστατη (και απλή γραμμή) με βάση την διαφορά α-β, και δεν μπορεί να ζωγραφιστεί με βάση τον αριθμό bits της εισόδου, γιατί δεν είναι συνάρτηση με βάση αυτά τα bit, αφού έχει πολλές τιμές y για το ίδιο x.

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

alkisg

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

Στο παραπάνω παράδειγμα είχαμε δύο ακεραίους και προσπαθούσατε να συνδέσετε την πολυπλοκότητα με βάση το μέγεθος της εισόδου σε bit.
Το μέγεθος της εισόδου όμως ήταν πάντα 2 ακέραιοι και δεν μετριόταν σε bit αλλά σε ακεραίους (words, λέξεις κλπ).
Ξέρω ότι κάποιοι έχουν αντίρρηση στην παραπάνω φράση μου. Ελπίζω με το παρόν μήνυμα να τους πείσω.

Την ίδια φράση την μεταφέρω στη σειριακή αναζήτηση, όπου συμφωνείτε ότι έχει γραμμική πολυπλοκότητα.
Δηλαδή θα πάω να εφαρμόσω στην σειριακή αναζήτηση αυτό που προσπαθήσατε να εφαρμόσετε στο πρόβλημα α-β.
Και ρωτάω: τι γίνεται όταν ο τύπος δεδομένων στη σειριακή αναζήτηση μεγαλώνει; Όταν οι αριθμοί που έχουμε αποθηκευμένους στον πίνακα και το κλειδί αναζήτησης τείνουν στο άπειρο;

Απαντώ:
Η είσοδος μετρημένη σε bit, απειρίζεται, ακόμα κι αν έχουμε π.χ. μόνο 100 αριθμούς στον πίνακα, αφού κάθε αριθμός έχει άπειρα bits.
Η είσοδος μετρημένη σε ακεραίους εξακολουθεί να εκφράζεται με το Ν που είναι ο αριθμός των ακεραίων του πίνακα.
Την πολυπλοκότητα την μετράμε θεωρώντας ότι οι πράξεις με τον τύπο που επιλέξαμε είναι πάντα Ο(1).
Το μέγεθος του ακεραίου το επιλέγουμε είτε θεωρώντας ότι είναι "επαρκής" όπως λέω εγώ, είτε με βάση την "μεγαλύτερη είσοδο" όπως λέει ο Παναγιώτης, αυτό είναι λεπτομέρεια.
Έτσι η πολυπλοκότητα της σειριακής αναζήτησης είναι πάντα Ο(Ν) όσο μεγάλος κι αν είναι ο τύπος δεδομένων μας.

Σ' αυτό το παράδειγμα λοιπόν, το μέγεθος της εισόδου είναι σημαντικό.
Αλλά δεν είναι καθόλου σημαντικό το μέγεθος της εισόδου σε bit, γιατί εξισορροπείται σε σχέση με την παραδοχή ότι οι πράξεις των ακεραίων γίνονται σε Ο(1), και έτσι τα bits των ακεραίων δεν αναφέρονται καθόλου ως ανεξάρτητη μεταβλητή κατά τον καθορισμό της πολυπλοκότητας.

edit: Αν θέλουμε και επίσημους όρους για τα παραπάνω, η https://en.wikipedia.org/wiki/Analysis_of_algorithms τα αναφέρει ως:
"unit time", όταν θεωρούμε ότι οι πράξεις μεταξύ ακεραίων κοστίζουν Ο(1),
"uniform cost model", όταν μετράμε την πολυπλοκότητα χρησιμοποιώντας unit time,
"logarithmic cost model", όταν μετράμε τα πάντα με βάση τα bit και άρα ακόμα και οι βασικές πράξεις ΔΕΝ γίνονται σε Ο(1) (αυτό που έλεγα για τη βιβλιοθήκη αριθμών άπειρης ακρίβειας). "The latter is more cumbersome to use, so it's only employed when necessary, for example in the analysis of arbitrary-precision arithmetic algorithms, like those used in cryptography."

Άρα στα πλαίσια της σχολικής ύλης, της σειριακής αναζήτησης, της ταξινόμησης, της διαφοράς δύο αριθμών α-β κλπ, προφανώς και είναι λογικό να χρησιμοποιούμε unit time και uniform cost model.

gpapargi

Θα απαντήσω σε ένα ένα τα θέματα  για να μην έχω πολύ μεγάλο μήνυμα.
Παράθεση από: alkisg στις 16 Μαΐου 2016, 09:19:42 ΜΜ
Όπως η μελέτη συναρτήσεων, γραφικών παραστάσεων κλπ έχει νόημα ακόμα και αν είναι φραγμένες, έτσι και η πολυπλοκότητα έχει νόημα ακόμα κι αν μιλάμε για πεπερασμένο αριθμό bits τύπων δεδομένων, πεπερασμένη RAM κλπ. Αν μια λύση θέλει Ο(Ν²) και κάνει μέρες να εκτελεστεί με 1 GB δεδομένων, και μια άλλη θέλει Ο(Ν) και κάνει λίγα δευτερόλεπτα, μας ενδιαφέρει κι ας έχουμε περιορισμούς στα μεγέθη. Οι γραφικές τους παραστάσεις είναι ευθεία και παραβολή αντίστοιχα, ακόμα κι αν δεν φτάνει το Ν στο άπειρο. Το "μέγεθος προβλήματος" είναι οι ανεξάρτητες μεταβλητές με βάση τις οποίες καταφέρνουμε να ζωγραφίσουμε την "γραφική παράσταση" του χρόνου εκτέλεσης, την τάξη της πολυπλοκότητας, και δεν μας ενδιαφέρει αν το πεδίο εισόδου είναι ή όχι φραγμένο. Μας ενδιαφέρει ότι είναι ένας τρόπος να χαρακτηρίσουμε την ποιότητα της λύσης που βρήκαμε.

Η ένσταση που έγραψα σε αυτό το σημείο είναι ουσιώδης, δεν ήταν απλά με σκοπό να παρακάμψω τη δυσκολία. Ισχύει ότι μπορούμε να μελετήσουμε μια συνάρτηση σε μια περιοχή φραγμένη, να πάρουμε δηλαδή ένα περιορισμό της. Δε λειτουργεί όμως η έννοια της τάξης. Να εξηγήσω διαισθητικά γιατί: Μπορείς να έχεις μια συνάρτηση f(n)=n κα μια g(n)=n^2/1000. Η g είναι Ο(n^2)  και η f είναι Ο(n). Όμως για μικρές του n  πχ κάτω από 1000 η f είναι μεγαλύτερη. Δηλαδή έχω μια τετραγωνική να είναι μικρότερη από μια γραμμική. Προφανώς όταν το n ανέβει προς το άπειρο η g θα ξεπεράσει την f με ότι αριθμό και να τη διαιρέσω αντί για το 1000 που διαιρώ εδώ. Αυτό είναι το νόημα το «για κάθε n>n0 θα ισχύει f(n)<g(n). Δηλαδή ναι μπορείς να βγάλεις το μεγιστοβάθμιο και να το αποκαλέσεις «τάξη» ή όπως αλλιώς θέλεις αλλά αυτό δεν έχει κάποια αξία. Πρέπει να αφήσεις το n να μεγαλώσει αρκετά για να «δείξει την αξία της» σε σχέση με το n^2/1000. Θέλεις υποχρεωτικά απειρισμό της ανεξάρτητης μεταβλητής αλλιώς, στις φραγμένες περιοχές,  η έννοια της τάξης δεν έχει την αξία που της αποδίδουμε. Θα δεις γραμμικές καλύτερες από εκθετικές κλπ.
Γιώργος Παπαργύρης

gpapargi

 
Παράθεση από: alkisg στις 16 Μαΐου 2016, 09:19:42 ΜΜ
Γιώργο στην f(ν) που υπολόγισες εκεί, έχεις χρησιμοποιήσει τη διαφορά α-β (το κ), και άρα δεν κατάφερες να περιγράψεις την πολυπλοκότητα με βάση μόνο το μέγεθος της εισόδου, χρειάστηκες και την τιμή της διαφοράς.
Άρα ο ισχυρισμός μου ότι η πολυπλοκότητα αυτού του προβλήματος δεν μπορεί να περιγραφεί με βάση το μέγεθος της εισόδου, εξακολουθεί να ισχύει.

Εδώ θα πρέπει να αναφέρουμε κάποια πράγματα. Όταν εκφράζεις την πολυπλοκότητα σα συνάρτηση του μεγέθους εισόδου δεν το κάνεις με απόλυτη ακρίβεια. Να δώσω ένα πιστεύω γενικά αποδεκτό παράδειγμα. Διαβάζω έναν ακέραιο ν και ελέγχω αν είναι πρώτος κάνοντας όλες τις διαιρέσεις. Αυτός ο αλγόριθμος στη βιβλιογραφία θεωρείται εκθετικός. Λέω δηλαδή log(n) το πλήθος των ψηφίων και άρα έχω f(log(n))=n και θέτωντας log(n)=κ καταλήγω στο f(κ)=10^κ.
Τι έχω εδώ;
Έχω μια συνάρτηση που δίνει τα βήματα συναρτήσει του πλήθους των ψηφίων και βλέπω ότι η σχέση είναι εκθετική. Δεν έχω όμως απόλυτη ακρίβεια. Αυτό το καταλαβαίνω και διαισθητικά: ο 100 έχει ίδιο πλήθος ψηφίων με το 999 αλλά ο αλγόριθμος δεν κάνει ίδιο πλήθος βημάτων για το 100 και το 999. Και μαθηματικά βλέπω ότι βάζοντας κ=3 έχω μια τιμή (το 1000) είτε έχω σαν είσοδο το 100 είτε το 999. Δεν υπάρχει απόλυτη ακρίβεια. Αυτό το ξέρω εξαρχής. Και είναι λογικό να χάνω σε ακρίβεια αφού θέτωντας logn=κ, το κ είναι ακέραιος και άρα περιορίζομαι σε ακεραίους.
Αυτό ακριβώς είναι και το νόημα της τάξης. Με νοιάζει να δω την τάξη του αλγορίθμου δηλαδή με τι ρυθμό (σαν ποια συνάρτηση) μεγαλώνει το πλήθος των βημάτων σα συνάρτηση του μεγέθους εισόδου.
Προφανώς λοιπόν δεν μπορώ να βρω ακριβώς τα βήματα εισόδου. Θα μπορούσα να δώσω και ένα πιο χτυπητό παράδειγμα. Στη παράδειγμα με τη διαφορά 2 αριθμών μπορώ να παρακάμψω τις δυσκολίες και να βρω μια λύση. Ωστόσο αν έχω συνάρτηση σε πεπλεγμένη μορφή πχ ένα πολυόνυμο έκτου βαθμού, ή 10^n+n+n^2+log(n) εκεί δεν μπορώ να λύσω ως προς n. Αλλά δε με νοιάζει. Το ξέρω εξαρχής ότι δεν έχω απόλυτη ακρίβεια. Θέλω μόνο να δω το ρυθμό  αύξησης στο άπειρο. Έτσι στο παράδειγμα που έχω πχ
f(10^n+n+n^2+log(n))=n, θα δω τι κάνει ο κάθε όρος και τελικά θα δω ότι ο log(n) δημιουργεί εκθετική πολυπλοκότητα και θα επισκιάσει τους άλλους στο άπειρο.
Ανακεφαλαιώνοντας θέλω να πω ότι η εύρεση πολυπλοκότητας σα συνάρτηση του μεγέθους εισόδου δεν είναι μια μέθοδος για να βρεις ακριβώς το πλήθος των βημάτων. Είναι για να κατατάξεις το αλγόριθμο στους εκθετικούς, ή στους λογαριθμικούς ή στους πολυωνυμικούς κάποιου βαθμού κλπ. Πρέπει να υπάρχει κάποιος τρόπος για να κατατάξεις τους αλγορίθμους σε εκθετικού χρόνου, πολυωνυμικού χρόνου κλπ. Αυτό γίνεται με τη χρήση του μεγέθους εισόδου σαν ανεξάρτητη μεταβλητή και κοιτώντας το μεγιστοβάθμιο όρο. Αν πχ έχεις ένα δισδιάστατο πίνακα με ν^2 στοιχεία, πρέπει να μπορείς να πεις αν ο αλγόριθμος είναι τετραγωνικού ή γραμμικού χρόνου. Αυτό μπορεί να γίνει με το μέγεθος της εισόδου. Αν διαλέξεις το μήκος της γραμμής και βγάλεις ν τα βήματα, δεν μπορείς να πεις ότι είναι γραμμικού χρόνου. Ισχυρίζομαι επίσης ότι όταν αλλάζεις την ανεξάρτητη  μεταβλητή και χρησιμοποιείς μια άλλη, θα πρέπει να είναι αριθμητικό πολλαπλάσιο του πλήθους των bits έτσι ώστε ως προς οποιαδήποτε μεταβλητή ο εκθετικός να παραμένει εκθετικός και ο γραμμικός να παραμένει γραμμικός.   
Γιώργος Παπαργύρης

gpapargi

Παράθεση από: alkisg στις 17 Μαΐου 2016, 10:39:19 ΠΜ
Και ρωτάω: τι γίνεται όταν ο τύπος δεδομένων στη σειριακή αναζήτηση μεγαλώνει; Όταν οι αριθμοί που έχουμε αποθηκευμένους στον πίνακα και το κλειδί αναζήτησης τείνουν στο άπειρο;

Αυτό το είχα θίξει παραπάνω. Το γράφω κάπως πιο αναλυτικά. Μέγεθος εισόδου κανονικά είναι το πλήθος των bits εισόδου. Αντί για αυτό μπορούμε να χρησιμοποιήσουμε και κάποιο αριθμητικό πολλαπλάσιο των bits εισόδου, όπως πχ το πλήθος των χαρακτήρων, το μέγεθος λέξης, το πλήθος των ψηφίων κλπ. Είναι σαν να αλλάζω μονάδα μετρήσεως. Όπως πχ μετράω ένα μήκος σε μέτρα ή σε χιλιόμετρα. Δεν αλλάζει όμως η τάξη του αλγορίθμου η εισαγωγή της σταθεράς όσο μεγάλη και να είναι (αρκεί να είναι πεπερασμένη).
Όταν ελέγχω για το αν ο αριθμός είναι πρώτος μέγεθος εισόδου είναι το πλήθος των ψηφίων, ενώ όταν κάνω σειριακή μεταξύ αριθμών που είναι σε πίνακα χρησιμοποιώ το πλήθος των στοιχείων του πίνακα. Γιατί γίνεται αυτό;
Αυτό γίνεται γιατί όταν φανταζόμαστε να αυξάνει το μέγεθος εισόδου στο πρόβλημα της σειριακής φανταζόμαστε το πλήθος των στοιχείων να τείνει στο άπειρο και όχι το μέγεθος του κάθε αριθμού να τείνει στο άπειρο. Είμαι δηλαδή φραγμένος στο πλήθος των ψηφίων του αριθμού και έχω απειρισμό στο πλήθος τους. Αυτό είναι που εννοώ συνήθως. Δεν είναι απόλυτο να είναι έτσι.
Αν θέλουμε να τείνει στο άπειρο και το μέγεθος του κάθε αριθμού τότε πάμε σε συνάρτηση 2 ανεξάρτητων μεταβλητών. Δηλαδή αν ν το πλήθος των στοιχείων και κ το πλήθος των ψηφίων του κάθε αριθμού τότε έχω συνάρτηση της μορφής f(ν,κ). Δηλαδή το αντιμετωπίζω περίπου  σαν πίνακα δυο διαστάσεων με αριθμό γραμμών ν και αριθμό στηλών κ.  Όχι όμως τετραγωνικό γιατί θέλω να έχω ανεξάρτητη αύξηση σε κάθε διάσταση.
Αν έχω κάποιο μέγιστο μήκος σε κάθε στοιχείο του πίνακα, ας είναι και 10^9 bits τότε έχω αριθμητικό πολλαπλάσιο και άρα o  απειρισμός είναι μόνο στο πλήθος των στοιχείων. Δεν αλλάζει η τάξη όσο μεγάλη και να είναι η λέξη μου αρκεί να είναι πεπερασμένη. Προσοχή σε αυτό: οσοδήποτε μεγάλος αριθμός και να υπάρχει στο σύνολο των bits της λέξης είναι πεπερασμένος και λειτουργεί σα σταθερά. Δεν είναι απειρισμός και δεν αλλάζει την γραμμική τάξη.
Γιώργος Παπαργύρης

Diotima

Γιώργο εγώ συμφωνώ ότι πρέπει να ακολουθούμε το μαθηματικό ορισμό και να μιλάμε με βάση αυτόν. Έχει σημασία να εννοούμε το ίδιο πράγμα όταν μιλάμε για Ο(1) και Ο(ν). Καταλαβαίνω τους λόγους που διαφωνεί ο Άλκης, στην πραγματική ζωή δεν υπάρχει τίποτα το άπειρο και τα πάντα είναι πεπερασμένα, μπορεί στην εφαρμογή να ενδιαφέρει η συμπεριφορά της συνάρτησης ακόμα κι αν έχει τάξη Ο(1).
Όμως η ασυμπτωτική ανάλυση ενός αλγορίθμου με βάση τη θεωρία της πολυπλοκότητας δε λαμβάνει υπόψη την εφαρμογή στην πραγματική ζωή, τα μαθηματικά, ειδικά όταν μιλάνε για μεγέθη που τείνουν στο άπειρο δεν έχουν σκοπό να εξετάσουν τα πράγματα με βάση την πραγματικότητα. Η έννοια του ορίου στο άπειρο είναι κατά τη γνώμη μου ίσως η πιο δύσκολη μαθηματική έννοια και θα το πω μια και το έφερε η κουβέντα, θεωρώ λάθος που τα παιδιά της Γ' Λυκείου δίνουν πανελλαδικές εξεταζόμενα στην ανάλυση που έχει κεντρική έννοια τη έννοια του ορίου (όρια, συνέχεια, παράγωγοι, ολοκληρώματα κ.τ.λ.) ενώ δυσκολεύονται πολύ να αναλύσουν ένα πρόβλημα της πραγματικής ζωής.

ΠαράθεσηΚαι ρωτάω: τι γίνεται όταν ο τύπος δεδομένων στη σειριακή αναζήτηση μεγαλώνει; Όταν οι αριθμοί που έχουμε αποθηκευμένους στον πίνακα και το κλειδί αναζήτησης τείνουν στο άπειρο;

Αυτό Άλκη θα όριζε ένα πολύ διαφορετικό πρόβλημα πολυπλοκότητας με περισσότερες παραμέτρους, θα είχαμε άλλο μέγεθος προβλήματος, πολύ διαφορετικό από αυτό που εννοούμε λέγοντας "σειριακή αναζήτηση". Ορίζουμε άλλο πρόβλημα που δε μας ενδιαφέρει.

ΠαράθεσηΆρα στα πλαίσια της σχολικής ύλης, της σειριακής αναζήτησης, της ταξινόμησης, της διαφοράς δύο αριθμών α-β κλπ, προφανώς και είναι λογικό να χρησιμοποιούμε unit time και uniform cost model.

Συμφωνώ απόλυτα και χαίρομαι που αυτό ξεκαθαρίστηκε, νομίζω ότι πρέπει να είναι αποδεκτό από όλους.
Να πω εδώ, ότι το πρόβλημα 2 που όρισα στην αρχική μου ανάρτηση πάνω στον αλγόριθμο που πρότεινε ο Γιώργος σέβεται αυτόν τον κανόνα, γιατί μπορεί η συνάρτηση πολυπλοκότητας να εκφράζεται τελικά ως f(m)=2^m, όπου m=logn, δηλαδή μέσω των ψηφίων του αριθμού n και να είναι εκθετική ως προς αυτό, αλλά το κόστος κάθε βασικής πράξης παραμένει 1, απλά το πρόβλημα μετράει το πλήθος των βασικών πράξεων που γίνονται όχι κάθε φορά που το n αυξάνεται κατά 1, αλλά κάθε φορά που διπλασιάζεται αν αναφερόμαστε στο δυαδικό σύστημα, δεκαπλασιάζεται στο δεκαδικό κ.τ.λ. οπότε η συνάρτηση με τη γραφική της παράσταση δείχνει τη μεταβολή του πλήθους των πράξεων όταν συμβαίνει αυτή η μεταβολή στον αριθμό.
Η διαισθητική σημασία του αλγορίθμου βέβαια δεν το δείχνει αυτό, απλά ο αλγόριθμος σου επιτρέπει να ορίσεις ένα τέτοιο πρόβλημα πολυπλοκότητας και μπορείς φυσικά να το κάνεις γιατί μπορεί αυτό να σε ενδιαφέρει να μελετήσεις.

Γι αυτό θεωρώ βασικό να ορίζουμε τι πρόβλημα πολυπλοκότητας μελετάμε, δηλαδή το μέγεθος του προβλήματος και να μη βασιζόμαστε στη διαισθητική αντίληψη του αλγορίθμου μόνο. Σε αυτό συμφωνείτε;

alkisg

Πλέον έχω ένα σωρό διαφωνίες, αλλά νομίζω θα πρέπει να είμαι λακωνικός και να εστιάσω μία μία σε μερικές πολύ σημαντικές λεπτομέρειες, γιατί αν δεν πιάσουμε κάποιες βάσεις που να συμφωνούμε, δεν θα προχωρήσει η συζήτηση.
Παράθεση από: gpapargi στις 17 Μαΐου 2016, 12:45:29 ΜΜ
Έχω μια συνάρτηση που δίνει τα βήματα συναρτήσει του πλήθους των ψηφίων και βλέπω ότι η σχέση είναι εκθετική. Δεν έχω όμως απόλυτη ακρίβεια.

Βρε Γιώργο έχω ήδη δώσει αντιπαράδειγμα ότι δεν είναι εκθετική με βάση το πλήθος bit της εισόδου. Αλλάζω λίγο την "Γράψε ι" σε "Γράψε α-β" μόνο και μόνο για να δώσω καλύτερο παράδειγμα:
Διάβασε α, β
Για ι από α μέχρι β
  Γράψε α-β
Τέλος_επανάληψης

Πάρε ένα όσο μεγάλο Χ θες. Να τείνει στο άπειρο.
Μετά δώσε στον αλγόριθμο ως είσοδο: α=Χ, και β=Χ. Έδωσες άπειρα bit στην είσοδο.
Ο αλγόριθμος θα κάνει ακριβώς μία επανάληψη. Θα κάνει και ακριβώς μία αφαίρεση. Και θα εμφανίσει ακριβώς ένα νούμερο, το 0.

Βάλαμε άπειρη είσοδο και μετά από ακριβώς μία πράξη πήραμε ένα μόνο ψηφίο για έξοδο. Σου φαίνεται εκθετική πολυπλοκότητα αυτή;
Δεν χρειάζεται πλέον ούτε ακρίβεια ούτε διαίσθηση. Ξέρουμε ότι στα μαθηματικά, το "απέδειξε ότι δεν ισχύει", είναι το ίδιο με το "βρες μου ένα αντιπαράδειγμα που να μην ισχύει", και εγώ το βρήκα.

Δεν προχωράω παρακάτω μέχρι να ξεκαθαρίσουμε ότι έχω δίκιο σ' αυτό το κομμάτι, ή να μου εξηγήσετε πώς είναι δυνατόν να της δίνω άπειρα bit εισόδου, να κάνω μία μόνο πράξη, να παίρνω μόνο ένα 0 για έξοδο, και αυτό να το ονομάζετε εκθετική πολυπλοκότητα! :)

gpapargi

Γράφω κάτι για τα cost models που είχα ήδη πληκτρολογήσει και μετά θα δω το τελευταίο σου μήνυμα Άλκη.
Και για εγώ θεωρώ Ο(1) το κόστος για να γίνει η πράξη στον ακέραιο όσο μεγάλο και να είναι το μήκος  αρκεί να είναι πεπερασμένο. Στο άπειρο δεν ισχύει αυτό.
Στη σελίδα της Wikipedia το logarithmic cost model δίνει μια πράξη για κάθε bit εισόδου. Εγώ δεν κάνω  κάτι τέτοιο. Συγκεκριμένα δηλαδή σε μια διαίρεση δίνει κόστος ανάλογο με το πλήθος των bits των αριθμών. Εγώ το μετράω για μια πράξη. Αλλά το πλήθος των επαναλήψεων είναι που εκφράζω σαν συνάρτηση των bits εισόδου. Uniform cost εφαρμόζω
Γιώργος Παπαργύρης

itt

Παράθεση από: alkisg στις 17 Μαΐου 2016, 04:06:15 ΜΜ
Πλέον έχω ένα σωρό διαφωνίες, αλλά νομίζω θα πρέπει να είμαι λακωνικός και να εστιάσω μία μία σε μερικές πολύ σημαντικές λεπτομέρειες, γιατί αν δεν πιάσουμε κάποιες βάσεις που να συμφωνούμε, δεν θα προχωρήσει η συζήτηση.
Βρε Γιώργο έχω ήδη δώσει αντιπαράδειγμα ότι δεν είναι εκθετική με βάση το πλήθος bit της εισόδου. Αλλάζω λίγο την "Γράψε ι" σε "Γράψε α-β" μόνο και μόνο για να δώσω καλύτερο παράδειγμα:
Διάβασε α, β
Για ι από α μέχρι β
  Γράψε α-β
Τέλος_επανάληψης

Πάρε ένα όσο μεγάλο Χ θες. Να τείνει στο άπειρο.
Μετά δώσε στον αλγόριθμο ως είσοδο: α=Χ, και β=Χ. Έδωσες άπειρα bit στην είσοδο.
Ο αλγόριθμος θα κάνει ακριβώς μία επανάληψη. Θα κάνει και ακριβώς μία αφαίρεση. Και θα εμφανίσει ακριβώς ένα νούμερο, το 0.

Βάλαμε άπειρη είσοδο και μετά από ακριβώς μία πράξη πήραμε ένα μόνο ψηφίο για έξοδο. Σου φαίνεται εκθετική πολυπλοκότητα αυτή;
Δεν χρειάζεται πλέον ούτε ακρίβεια ούτε διαίσθηση. Ξέρουμε ότι στα μαθηματικά, το "απέδειξε ότι δεν ισχύει", είναι το ίδιο με το "βρες μου ένα αντιπαράδειγμα που να μην ισχύει", και εγώ το βρήκα.

Δεν προχωράω παρακάτω μέχρι να ξεκαθαρίσουμε ότι έχω δίκιο σ' αυτό το κομμάτι, ή να μου εξηγήσετε πώς είναι δυνατόν να της δίνω άπειρα bit εισόδου, να κάνω μία μόνο πράξη, να παίρνω μόνο ένα 0 για έξοδο, και αυτό να το ονομάζετε εκθετική πολυπλοκότητα! :)

Κάτσε ρε συ, την περιπλοκότητα Ω (ή έστω την Ο) δεν συζητάτε τόση ώρα; Αυτό που γράφεις εσύ δεν είναι ούτε καν η μέση περίπτωση. Επίσης δεν έχει καν νόημα, γιατί μιλάμε για ασυμπτωτική ανάλυση, άρα όρια, άρα το να πεις ότι το a = infinite δεν νομίζω ότι στέκει μαθηματικά.

gpapargi

Παράθεση από: alkisg στις 17 Μαΐου 2016, 04:06:15 ΜΜ
Πλέον έχω ένα σωρό διαφωνίες, αλλά νομίζω θα πρέπει να είμαι λακωνικός και να εστιάσω μία μία σε μερικές πολύ σημαντικές λεπτομέρειες, γιατί αν δεν πιάσουμε κάποιες βάσεις που να συμφωνούμε, δεν θα προχωρήσει η συζήτηση.
Βρε Γιώργο έχω ήδη δώσει αντιπαράδειγμα ότι δεν είναι εκθετική με βάση το πλήθος bit της εισόδου. Αλλάζω λίγο την "Γράψε ι" σε "Γράψε α-β" μόνο και μόνο για να δώσω καλύτερο παράδειγμα:
Διάβασε α, β
Για ι από α μέχρι β
  Γράψε α-β
Τέλος_επανάληψης

Πάρε ένα όσο μεγάλο Χ θες. Να τείνει στο άπειρο.
Μετά δώσε στον αλγόριθμο ως είσοδο: α=Χ, και β=Χ. Έδωσες άπειρα bit στην είσοδο.
Ο αλγόριθμος θα κάνει ακριβώς μία επανάληψη. Θα κάνει και ακριβώς μία αφαίρεση. Και θα εμφανίσει ακριβώς ένα νούμερο, το 0.

Βάλαμε άπειρη είσοδο και μετά από ακριβώς μία πράξη πήραμε ένα μόνο ψηφίο για έξοδο. Σου φαίνεται εκθετική πολυπλοκότητα αυτή;
Δεν χρειάζεται πλέον ούτε ακρίβεια ούτε διαίσθηση. Ξέρουμε ότι στα μαθηματικά, το "απέδειξε ότι δεν ισχύει", είναι το ίδιο με το "βρες μου ένα αντιπαράδειγμα που να μην ισχύει", και εγώ το βρήκα.

Δεν προχωράω παρακάτω μέχρι να ξεκαθαρίσουμε ότι έχω δίκιο σ' αυτό το κομμάτι, ή να μου εξηγήσετε πώς είναι δυνατόν να της δίνω άπειρα bit εισόδου, να κάνω μία μόνο πράξη, να παίρνω μόνο ένα 0 για έξοδο, και αυτό να το ονομάζετε εκθετική πολυπλοκότητα! :)

Όπως πάντα αυτές η κουβέντες είναι τρομερές  και μου είχαν λείψει :)

Στην ανάλυση που έκανα δε χρησιμοποίησα ακέραια μέρη που θα έδινε πιο μεγάλη ακρίβεια. Θα απαντήσω κάπως πιο χοντρικά γιατί ελπίζω ότι θα σε πείσω.
Έχω βγάλει κάτι σαν f(n)=10^(n/x) όπου x θετική σταθερά. Όσο μεγάλη και να είναι η x δεν μπορείς να πεις ότι τείνει στο άπειρο γιατί είναι σταθερά. Η f(n) τείνει πάντα προς το άπειρο για κάθε συγκεκριμένη τιμή του x που θα βάλεις. Απλά αλλάζεις τον εκθέτη και έχει μια πιο αργή εκθετική δηλαδή που πάει στο άπειρο πιο αργά. Αλλά είναι εκθετική. Θα ξεπεράσει οποιαδήποτε πολυωνυμική αν αφήσουμε το ν να ανέβει αρκετά.
Μια εκθετική μπορεί να δώσει και πολύ μικρές τιμές. Αν πχ βάλει όπου n το μηδέν έχει 10^0 που κάνει 1. Δηλαδή δε σημαίνει ότι η εκθετική θα δώσει μόνο μεγάλες τιμές. Αν βάλεις μικρό όρισμα θα πάρεις μικρή τιμή. Με πλάτος διαστήματος 0 θα πάρεις μια επανάληψη από την εκθετική. 
Γιώργος Παπαργύρης

dpa2006

Καλησπέρα,
να ζητήσω συγγνώμη προκαταβολικά αν βγάζω εκτός πορείας τη συζήτηση,αλλά με την ευκαιρία του θέματος που συζητείται θα ήθελα να αναφέρω το
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

Diotima

Λοιπόν, νομίζω ότι συνειδητοποίησα για ποιο λόγο υπάρχουν οι διαφωνίες. Δε νομίζω ότι διαφωνούμε στο uniform cost model και το unit time, οι διαφωνίες προκύπτουν γιατί θεωρούμε την αναπαράσταση της εισόδου με άλλο τρόπο.

Δηλαδή, όταν αντιλαμβανόμαστε έναν ακέραιο με βάση την αριθμητική του ποσότητα, τότε θεωρούμε την αναπαράσταση του σε ένα σύστημα αρίθμησης με βάση το 1, το λεγόμενο unary numeral system, https://en.wikipedia.org/wiki/Unary_numeral_system.

Οπότε, για είσοδο τον ακέραιο ν, χρειαζόμαστε ν bits (ή ψηφία)για να τον αναπαραστήσουμε, δηλαδή το πλήθος των bits εισόδου που λέει ο Γιώργος είναι ν.

Σε οποιοδήποτε άλλο σύστημα αναπαράστασης το πλήθος των bits εισόδου (ψηφίων) είναι logν, και ο αριθμός γράφεται με τη βάση υψωμένη στο logν.

Γι αυτό στη μία περίπτωση παίρνουμε γραμμική και στην άλλη εκθετική πολυπλοκότητα.
Χρησιμοποίησα τον όρο "bits εισόδου" αντί για πλήθος των ψηφίων του αριθμού σε οποιοδήποτε σύστημα αρίθμησης.
Άρα στην ουσία μπορούμε να μιλάμε για πλήθος των "bits εισόδου" και στις δύο περιπτώσεις, σημασία έχει σε ποιο σύστημα θεωρούμε την αναπαράσταση του ακεραίου ν.
Προφανώς, αν αλλάξω την αναπαράσταση του αριθμού αλλάζει και η πολυπλοκότητα.
Μπορεί εσείς αυτά να τα έχετε συνειδητοποιήσει, αλλά εγώ τώρα τα συνειδητοποιώ καλά και βλέπω πόσο μεγάλη σημασία έχουν στον υπολογισμό της πολυπλοκότητας.

alkisg

Παράθεση από: itt στις 17 Μαΐου 2016, 04:19:30 ΜΜ
Κάτσε ρε συ, την περιπλοκότητα Ω (ή έστω την Ο) δεν συζητάτε τόση ώρα; Αυτό που γράφεις εσύ δεν είναι ούτε καν η μέση περίπτωση. Επίσης δεν έχει καν νόημα, γιατί μιλάμε για ασυμπτωτική ανάλυση, άρα όρια, άρα το να πεις ότι το a = infinite δεν νομίζω ότι στέκει μαθηματικά.

Εγώ δεν αναλύω την πολυπλοκότητα, ίσα ίσα λέω ότι δεν ορίζεται η πολυπλοκότητα ως προς τα bits της εισόδου. Πώς να δώσω μέση τιμή από κάτι που δεν ορίζεται;
Το πλήθος των bits log(α-β) που προσπαθεί να υπολογίσει ο Γιώργος δεν ορίζεται όταν και το α και το β τείνουν στο άπειρο:
Παράθεση από: https://en.wikipedia.org/wiki/Indeterminate_form
The indeterminate forms typically considered in the literature are denoted 0/0, ∞/∞, 0 × ∞, ∞ − ∞, 00, 1∞ and ∞0.

Αυτό που λες ότι το "a = infinite δεν νομίζω ότι στέκει μαθηματικά", εννοείται ότι πάντα μιλάμε για όρια, και θεωρητικά πρέπει πάντα να γράφουμε την φράση "τείνει στο άπειρο" αντί για "άπειρο", αλλά για χάρη συντομίας συνηθίζεται πολλές φορές να παραλείπουμε τη λέξη "τείνει", όπως βλέπεις και από το παραπάνω quote της wikipedia. Μπορείς να την προσθέτεις νοητικά όπου έχει παραληφθεί.

alkisg

Παράθεση από: Diotima στις 17 Μαΐου 2016, 06:16:44 ΜΜ
Δηλαδή, όταν αντιλαμβανόμαστε έναν ακέραιο με βάση την αριθμητική του ποσότητα, τότε θεωρούμε την αναπαράσταση του σε ένα σύστημα αρίθμησης με βάση το 1, το λεγόμενο unary numeral system, https://en.wikipedia.org/wiki/Unary_numeral_system.

Diotima όχι μην μπλέκουμε τα πράγματα, κανείς μας δεν μίλησε για μοναδιαίο σύστημα αρίθμησης. Στα μοναδιαία συστήματα, ένας π.χ. 64 bit αριθμός χρειάζεται 18446744073709551616 ψηφία για την αναπαράστασή του, και άρα κανένας σύγχρονος Η/Υ δεν θα χωρούσε ούτε μία μεταβλητή, πόσο μάλλον να κάνει πράξεις με αυτήν.
Επίσης, το πρόβλημα των πρώτων (primary) αριθμών στο μοναδιαίο σύστημα αρίθμησης είναι πολυωνυμικό και όχι εκθετικό ως προς τα bits εισόδου, κι ο Γιώργος μιλούσε για εκθετική πολυπλοκότητα.

alkisg

Παράθεση από: gpapargi στις 17 Μαΐου 2016, 04:34:38 ΜΜ
Όπως πάντα αυτές η κουβέντες είναι τρομερές  και μου είχαν λείψει :)

Κι εμένα! Έχασα τον μεσημεριανό μου ύπνο περιμένοντας την απάντησή σου! :D

Συνεχίζω στο λακωνικό στυλ γιατί νομίζω ότι εντοπίσαμε την πέτρα του σκανδάλου, και αργότερα θα επιστρέψω για να σχολιάσω όσα κενά έχουν μείνει.

Είπες ότι χρησιμοποιείς uniform cost model αλλά μετράς την είσοδο σε bits αντί για units.
Θεωρώ ότι αυτό είναι το βασικό πρόβλημα. Το μέτρημα σε bits γίνεται στο logarithmic μοντέλο. Στο uniform μετράμε το μέγεθος της εισόδου υποχρεωτικά σε units.
Αν πας να μετρήσεις την είσοδο με bits στο uniform, τότε όλοι οι γραμμικοί αλγόριθμοι βγαίνουν εκθετικοί κλπ, προκαλείται το χάος που βλέπουμε στο παρόν θέμα!

Γι' αυτό και η σειριακή αναζήτηση δεν αναφέρεται στην βιβλιογραφία με εκθετική πολυπλοκότητα, γιατί μετράνε την είσοδο σε units και χρησιμοποιούν uniform μοντέλο.
Γι' αυτό ο υπολογισμός πρώτων αναφέρεται με εκθετική, γιατί μετράνε την είσοδο σε bits και χρησιμοποιούν logarithmic μοντέλο.

Συμφωνούμε ως εδώ;

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

gpapargi

Πριν από όλα θα πρέπει να επιβεβαιώσουμε ότι εννοούμε το ίδιο πράγμα λέγοντας uniform και logarithmic cost models. Αυτό που καταλαβαίνω εγώ από τη Wikipedia είναι ότι μιλάμε για το πόσα βήματα μετράει σε κάθε πράξη. Έτσι αν έχω να προσθέσω 2 αριθμούς με 10 bits το uniform μετράει μια πράξη όλη την πρόσθεση, ενώ το logarithmic μετράει 10 πράξεις (που είναι ο λογαρίθμος του αριθμού που δίνεται σαν είσοδο).
Εγώ μετράω μια πράξη. Αλλά αυτό δε σημαίνει ότι δε θα βγάλω την πολυπλοκότητα με βάση τα bits ή κάποια πολλαπλάσιό τους. Όταν λέω ότι έχω εκθετική πολυπλοκότητα εννοώ ότι έχω εκθετικό πλήθος διαιρέσεων που μετράει η κάθε μια για 1 βήμα. Δεν εννοώ ότι έχω γραμμικά πολλές και προκύπτει η εκθετική πολυπλοκότητα επειδή μετράω πολλά βήματα στην κάθε μια.
Με άλλα λόγια για να είμαι εντάξει θα πρέπει να κάνω τα εξής:
Να βγάλω εκθετικά πολλές διαιρέσεις ως προς το σύνολο των ψηφίων (που είναι πολλαπλάσιο των bits εισόδου) μετρώντας την κάθε μια για 1 βήμα.
Επίσης θα πρέπει να βγάλω γραμμικά πολλές συγκρίσεις στη σειριακή μετρώντας για κάθε μια σύγκριση 1 βήμα. Εδώ θα πρέπει να ξεκαθαρίσω ότι ο πίνακας έχει αριθμούς  που το πλήθος των ψηφίων τους (και άρα και των bits) είναι φραγμένο. Όταν λέω γραμμικά πολλές συγκρίσεις εννοώ ως προς τα bits εισόδου ή το πλήθος ψηφίων. Το κρίσιμο σημείο είναι ότι ο απειρισμός είναι ως προς το πλήθος των στοιχείων του πίνακα ενώ το πλήθος των ψηφίων (άρα και των bits) σε κάθε αριθμό είναι φραγμένο. Άρα όταν έχω ν στοιχεία στον πίνακα και κ bits για κάθε στοιχείο του πίνακα έχω είσοδο μεγέθους κ*ν. Το κ δεν επηρεάζει την τάξη.
Γιώργος Παπαργύρης

Diotima

Παράθεση από: alkisg στις 18 Μαΐου 2016, 07:42:52 ΠΜ
Diotima όχι μην μπλέκουμε τα πράγματα, κανείς μας δεν μίλησε για μοναδιαίο σύστημα αρίθμησης. Στα μοναδιαία συστήματα, ένας π.χ. 64 bit αριθμός χρειάζεται 18446744073709551616 ψηφία για την αναπαράστασή του, και άρα κανένας σύγχρονος Η/Υ δεν θα χωρούσε ούτε μία μεταβλητή, πόσο μάλλον να κάνει πράξεις με αυτήν.
Επίσης, το πρόβλημα των πρώτων (primary) αριθμών στο μοναδιαίο σύστημα αρίθμησης είναι πολυωνυμικό και όχι εκθετικό ως προς τα bits εισόδου, κι ο Γιώργος μιλούσε για εκθετική πολυπλοκότητα.
Δεν έγραψα ότι στους Η/Υ η αναπαράσταση γίνεται με το μοναδιαίο σύστημα Άλκη, αυτό που είπα είναι ότι όταν αντιλαμβανόμαστε αριθμητικά μία ακέραια ποσότητα τότε ο αριθμός π.χ 7=1+1+1+1+1+1+1 στο μοναδιαίο και θέλουμε 7 το πλήθος ψηφία για να τον αναπαραστήσουμε, στο δυαδικό 7=1*2^2+1*2^1+1*2^0 και θέλουμε 3 ψηφία και στο δεκαδικό 7= 7*10^0 ένα μόνο ψηφίο. Τον αριθμό σαν αριθμητική ποσότητα τον καταλαβαίνουμε με βάση το 1.

Παράθεση από: gpapargi στις 18 Μαΐου 2016, 02:02:25 ΜΜ
Πριν από όλα θα πρέπει να επιβεβαιώσουμε ότι εννοούμε το ίδιο πράγμα λέγοντας uniform και logarithmic cost models. Αυτό που καταλαβαίνω εγώ από τη Wikipedia είναι ότι μιλάμε για το πόσα βήματα μετράει σε κάθε πράξη. Έτσι αν έχω να προσθέσω 2 αριθμούς με 10 bits το uniform μετράει μια πράξη όλη την πρόσθεση, ενώ το logarithmic μετράει 10 πράξεις (που είναι ο λογαρίθμος του αριθμού που δίνεται σαν είσοδο).
Κι εγώ έτσι νόμιζα αλλά δε νομίζω πλέον ότι λέει αυτό, για αυτό παραθέτω τους ορισμούς από το wikipedia:

the uniform cost model, also called uniform-cost measurement (and similar variations), assigns a constant cost to every machine operation, regardless of the size of the numbers involved

the logarithmic cost model, also called logarithmic-cost measurement (and variations thereof), assigns a cost to every machine operation proportional to the number of bits involved

Τόνισα με bold εκεί που νομίζω ότι γίνεται το λάθος κατανόησης. Το "a cost" δε σημαίνει "constant cost", όπως στην πρώτη περίπτωση. Αυτό που καταλαβαίνω είναι ότι το λογαριθμικό μοντέλο εκχωρεί ένα (κάποιο) κόστος σε κάθε λειτουργία μηχανής ανάλογα με τον αριθμό των bits που εμπλέκονται. Το ανάλογα μάλλον δεν το θεωρεί με τη μαθηματική αναλογία, διαφορετικά θα έλεγε "σταθερό κόστος", αλλά με την έννοια του "σε σχέση" με τον αριθμό των bits που εμπλέκονται.

Δηλαδή, όσον αφορά την πολυπλοκότητα, όταν θεωρώ το κόστος με βάση τα bits εισόδου συσχετίζω το κόστος της μηχανής με το πλήθος των bits εισόδου, άρα χρησιμοποιώ λογαριθμικό μοντέλο. Π.χ. στον αλγόριθμο που πρότεινες Γιώργο και έγραψα εγώ τη συνάρτηση f(m)=2^m όπου m=logn, αν ζωγραφίσω τη γραφική παράσταση στον οριζόντιο άξονα θα αυξάνω κατά 1 τα bits και η συνάρτηση θα μου δίνει στον κάθετο άξονα το πλήθος των πράξεων σε σχέση με το πλήθος των bits εισόδου.

Το uniform cost model μάλλον μου "απαγορεύει" να εκφράσω έτσι τη συνάρτηση, άσχετα αν το input γίνεται σε bits. Με τα μαθηματικά φυσικά μπορώ και το κάνω.
Δεν ξέρω αν τα κατάλαβα καλά, αυτό νομίζω θέλει να πει ο Άλκης, περιμένω απάντηση.

gpapargi

Παράθεση από: Diotima στις 18 Μαΐου 2016, 05:42:23 ΜΜ
Κι εγώ έτσι νόμιζα αλλά δε νομίζω πλέον ότι λέει αυτό, για αυτό παραθέτω τους ορισμούς από το wikipedia:

the uniform cost model, also called uniform-cost measurement (and similar variations), assigns a constant cost to every machine operation, regardless of the size of the numbers involved

the logarithmic cost model, also called logarithmic-cost measurement (and variations thereof), assigns a cost to every machine operation proportional to the number of bits involved

Τόνισα με bold εκεί που νομίζω ότι γίνεται το λάθος κατανόησης. Το "a cost" δε σημαίνει "constant cost", όπως στην πρώτη περίπτωση. Αυτό που καταλαβαίνω είναι ότι το λογαριθμικό μοντέλο εκχωρεί ένα (κάποιο) κόστος σε κάθε λειτουργία μηχανής ανάλογα με τον αριθμό των bits που εμπλέκονται. Το ανάλογα μάλλον δεν το θεωρεί με τη μαθηματική αναλογία, διαφορετικά θα έλεγε "σταθερό κόστος", αλλά με την έννοια του "σε σχέση" με τον αριθμό των bits που εμπλέκονται.

Χρεώνει ένα σταθερό κόστος για κάθε ένα bit του αριθμού που εμπλέκεται στην πράξη. Άρα τελικά το συνολικό κόστος που χρεώνει σε όλη την πράξη είναι ανάλογο του συνολικού αριθμού των bits του αριθμού που συμμετέχει στην πράξη. Λέγεται λογαριθμικό μοντέλο γιατί το πλήθος των bits του αριθμού είναι ο λογάριθμος του αριθμού.
Αυτό καταλαβαίνω εγώ.
Αλλά το βασικό είναι ότι μιλάει για το πλήθος των βημάτων που χρεώνει σε κάθε πράξη πχ τη διαίρεση που μας ενδιαφέρει. Δε μιλάει για το πλήθος των διαιρέσεων που βγάζω εγώ εκθετικό ως προς τα bits εισόδου (ή το πλήθος των ψηφίων). Μπορώ να βγάλω εκθετικό πλήθος διαιρέσεων μετρώντας κάθε μια για 1 μόνο βήμα.
Κάπου στο μέγεθος εισόδου και στην έκφραση των βημάτων ως προς αυτό υπάρχει η παρεξήγηση νομίζω εγώ. Δεν ξέρω αν είναι αποδεκτό ότι το f(log(k))=k σημαίνει ότι f(k)=10^k
Γιώργος Παπαργύρης

Diotima

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

theoni

Καλησπέρα η ερώτηση έχει ξαναγίνει αλλά  δεν μπόρω να βρω την απάντηση!το ι<--ι+1 μετράει για μια πράξη σε οποιαδήποτε δομή επανάληψης το ι<--ι+α μετράει για 2 πράξεις όπως και το ι<--γ+δ σωστά????

alkisg

Χμμ νομίζω ότι θα εξηγήσω καλύτερα τι πιστεύω για το uniform cost model χρησιμοποιώντας το για να (ξανα)απαντήσω σε αυτό το μήνυμα του Γιώργου:

Παράθεση από: gpapargi στις 13 Μαΐου 2016, 10:39:36 ΜΜ
Πχ ο αλγόριθμος
Διάβασε ν
Για ι από 1 μέχρι ν
   Γράψε ι
Τέλος_επανάληψης
Έχει εκθετική πολυπλοκότητα. Το μέγεθος εισόδου είναι το πλήθος των ψηφίων δηλαδή log(ν). Έτσι έχω f(log(ν))=ν που είναι εκθετική (αν θέλεις όπου log(ν) το x θα βγει το εκθετικό).

Ισχυρίζεσαι ότι το γράψιμο ν στοιχείων έχει εκθετική πολυπλοκότητα.
Εγώ ισχυρίζομαι ότι έχει γραμμική (στο uniform cost model που θεωρώ ότι είναι και αυτό που χρησιμοποιούμε στην ΑΕΠΠ).

Στο uniform cost model, το πόσα bit είναι το "ν" δεν μας ενδιαφέρει καθόλου. Θεωρούμε ότι οι αριθμοί μας εκφράζονται από έναν σταθερό πλήθος ψηφίων "c", π.χ. c=32 στους 32-bit επεξεργαστές.
Το σημείο κλειδί είναι ότι το c δεν είναι ίσο με log(ν) όπως αναφέρεις, είναι ανεξάρτητη σταθερά από το ν.
Τους αριθμούς μας θα τους χρειαστούμε για να βάλουμε κι άλλα πράγματα μέσα (π.χ. ένα sum <- sum+i), δεν θα βάλουμε μόνο το ν σε αυτούς.
Στην Διάβασε ν, σε κάθε περίπτωση θα διαβάσουμε c bits, όχι log(ν) bits.
Έτσι για π.χ. c=32 και ν=10, τα δυαδικά ψηφία της εισόδου μας δεν θα είναι "1010", αλλά "00000000 00000000 00000000 00001010", ένας ολόκληρος 32bit αριθμός.

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

Παρεμπιπτόντως Γιώργο, αν ήθελες να υλοποιήσεις την εντολή "Διάβασε" με "ν" bits και όχι "c" bits εισόδου, θα χρειαζόσουν επανάληψη και κόστος Ο(log(ν)), δεν θα μπορούσε να υλοποιηθεί σε Ο(1). Προφανώς λοιπόν χωρίς Ο(1) δεν θα χρησιμοποιούσες uniform cost model.

gpapargi

Διαφωνούμε στον τρόπο που ερμηνεύουμε τα uniform και logarithmic cost model Άλκη. Εσύ ερμηνεύεις το logarithmic cost model ως «τα πάντα μετρώνται με βάση το πλήθος των bits και η είσοδος και οι πράξεις». Εγώ το ερμηνεύω μόνο σαν ένα μοντέλο που μου λέει πόσα βήματα μετράω σε κάθε πράξη μου (πχ πρόσθεση, διαίρεση ανάθεση τιμής κλπ). Σε καμία περίπτωση δεν βάζω το uniform στο μέγεθος εισόδου. Αυτή είναι η βασική διαφωνία μας. Ο λόγος που κατά τη γνώμη μου δεν επιτρέπεται είναι ότι με αυτό τον τρόπο δεν μπορείς να φανταστείς το μέγεθος εισόδου να απειρίζεται. Δεν μπορείς δηλαδή ταυτόχρονα να λες ότι απειρίζεται το μέγεθος εισόδου και να έχεις και φραγμένο πλήθος bits στην είσοδο όσο μεγάλο και να είναι αυτό. Και αν δεν επιτρέπεις στην είσοδο να απειρίζεται δεν μπορείς να μιλάς για ασυμπτωτικές συμπεριφορές και συμβολισμούς Ο για τους λόγους που εξήγησα σε προηγούμενο μήνυμα.

Θα δώσω και ένα τελείως χειροπιαστό παράδειγμα χωρίς καμία αυστηρότητα για να γίνει κατανοητό αυτό που λέω για την εκθετική πολυπλοκότητα.
Έστω ότι διαβάζω 5 αριθμούς, τους 1,2,3,4,5 και τους βάζω σε ένα μονοδιάστατο πίνακα, τον κάθε αριθμό σε ένα κελί. Κάνω σειριακή. Προφανώς έχω 5 βήματα και Ο(ν).
Έστω τώρα ότι με τους 5 αυτούς αριθμούς κάνω κάτι άλλο: φτιάχνω τον ακέραιο αριθμό 12345. Και εκτυπώνω με μια Για τους αριθμούς από το 1 μέχρι τον 12345. Κάνω 12345 βήματα. Αυτό θα πει εκθετική πολυπλοκότητα. Και στους 2 αλγορίθμους έχω ίδια είσοδο, τα 5 ψηφία. Στον ένα κάνω 5 βήματα και στον άλλο 12345. Η μια είναι γραμμική και η άλλη είναι εκθετική πολυπλοκότητα.
Γιώργος Παπαργύρης

alkisg

Δεν θέλουμε να μεγαλώσουμε/απειρίσουμε την είσοδο. Θέλουμε να μεγαλώσουμε το μέγεθος του προβλήματος, που άλλοτε συμπίπτει και με το μέγεθος της εισόδου, άλλοτε με την τιμή της, όπως γράφει και η wikipedia.
Στο συγκεκριμένο παράδειγμα αυτό γίνεται μεγαλώνοντας την τιμή του ν όσο θέλουμε.
Και εννοείται ότι το σχετικό σταθερό c που θα χρειαστούμε θα είναι αρκετά μεγάλο ώστε να χωρέσει το ν που θα διαβάσουμε.
Δεν υπάρχει κανένα φράγμα.

Επίσης δεν απάντησες στο "αφού υλοποιείς την "Διάβασε ν" με ν bits, δεν έχεις πια Ο(1) αλλά O(log(ν)) για την εντολή Διάβασε, άρα δεν χρησιμοποιείς uniform model όπως λες".

Συνάδελφοι, υπάρχει κάποιος άλλος εκτός από τον Γιώργο που να θεωρεί ότι το παρακάτω παράδειγμα στα πλαίσια της ΑΕΠΠ έχει εκθετική πολυπλοκότητα;
Παράθεση από: gpapargi στις 13 Μαΐου 2016, 10:39:36 ΜΜ
Πχ ο αλγόριθμος
Διάβασε ν
Για ι από 1 μέχρι ν
   Γράψε ι
Τέλος_επανάληψης
Έχει εκθετική πολυπλοκότητα. Το μέγεθος εισόδου είναι το πλήθος των ψηφίων δηλαδή log(ν). Έτσι έχω f(log(ν))=ν που είναι εκθετική (αν θέλεις όπου log(ν) το x θα βγει το εκθετικό).

Αν ναι, αξίζει να το παλέψουμε περισσότερο, αλλιώς αφού εντοπίσαμε τη διαφωνία, δεν υπάρχει πρόβλημα να μείνουμε εκεί...

itt

Παράθεση από: alkisg στις 18 Μαΐου 2016, 07:37:57 ΠΜ
Εγώ δεν αναλύω την πολυπλοκότητα, ίσα ίσα λέω ότι δεν ορίζεται η πολυπλοκότητα ως προς τα bits της εισόδου. Πώς να δώσω μέση τιμή από κάτι που δεν ορίζεται;

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

Παράθεση από: alkisg στις 19 Μαΐου 2016, 05:54:19 ΜΜ

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

Μπορείς να πεις ότι έχει πολυωνυμική πολυπλοκότητα, αφού όντως έχει ψευδοπολυωνυμική πολυπλοκότητα και δεν νομίζω ότι υπάρχει κάποιο νόημα να
διδαχθεί η διαφορά τους.


ether

Παράθεση από: alkisg στις 19 Μαΐου 2016, 05:54:19 ΜΜ
Συνάδελφοι, υπάρχει κάποιος άλλος εκτός από τον Γιώργο που να θεωρεί ότι το παρακάτω παράδειγμα στα πλαίσια της ΑΕΠΠ έχει εκθετική πολυπλοκότητα;
Αν ναι, αξίζει να το παλέψουμε περισσότερο, αλλιώς αφού εντοπίσαμε τη διαφωνία, δεν υπάρχει πρόβλημα να μείνουμε εκεί...
Παράθεση από: gpapargi στις 14 Μαΐου 2016, 07:32:12 ΜΜ
Πχ ο αλγόριθμος
Διάβασε ν
Για ι από 1 μέχρι ν
   Γράψε ι
Τέλος_επανάληψης
Έχει εκθετική πολυπλοκότητα. Το μέγεθος εισόδου είναι το πλήθος των ψηφίων δηλαδή log(ν). Έτσι έχω f(log(ν))=ν που είναι εκθετική (αν θέλεις όπου log(ν) το x θα βγει το εκθετικό).
Κάτι τέτοιο θα σήμαινε ότι και ο κλασικός αλγόριθμος δυναμικού προγραμματισμού για το knapsack με πολυπλοκότητα O(nW) στα πλαίσια της ΑΕΠΠ είναι πολυωνυμικός, άρα στα πλαίσια της ΑΕΠΠ P=NP.
Θεωρώ προτιμότερο να πω σε έναν μαθητή "Είναι εκτός ύλης ΑΕΠΠ ο υπολογισμός της πολυπλοκότητας του παραπάνω αλγορίθμου".

alkisg

Βρήκα αντίστοιχο παράδειγμα στη βιβλιογραφία (υπολογισμό του r = xy με επαναληπτικούς πολλαπλασιασμούς):
https://books.google.gr/books?id=Yxxw90d9AuMC&pg=PA3&redir_esc=y#v=onepage&q&f=false - τέλος σελίδας 3.

Στο uniform model αναφέρει ότι η πολυπλοκότητά του είναι πολυωνυμική και ίση με 2+3*y. Την μετράει ως προς την τιμή του y. Δεν την μετράει ως προς το πλήθος των bits και δεν την λέει εκθετική - αν και ακριβώς παρακάτω αναφέρει ότι τυπικά μετράμε το input size σε bits. Ακόμα και μετά τον ορισμό του input size, στη σελίδα 6, συνεχίζει να αναφέρει το πρόβλημα ως Ο(y) στο uniform model.

Εξηγεί και το πρόβλημα των μεγεθών στο uniform καθώς και το πρόβλημα του ότι στο λογαριθμικό μοντέλο, μια εντολή a := b + 5 κοστίζει log|b| + log5, οπότε καταλαβαίνουμε ότι σίγουρα δεν θέλουμε το λογαριθμικό μοντέλο στην ΑΕΠΠ.

gpapargi

Παράθεση από: alkisg στις 19 Μαΐου 2016, 05:54:19 ΜΜ
Επίσης δεν απάντησες στο "αφού υλοποιείς την "Διάβασε ν" με ν bits, δεν έχεις πια Ο(1) αλλά O(log(ν)) για την εντολή Διάβασε, άρα δεν χρησιμοποιείς uniform model όπως λες".

Δεν απάντησα γιατί φοβήθηκα ότι θα μπλέξουμε κι άλλο. Απαντάω. Καταρχήν ναι αν πρέπει να βάλω βάρος στην είσοδο που τείνει να απειρίζεται δεν μπορώ να δώσω σταθερά. Θέλω κόστος για κάθε bit, άρα πάω με λογαριθμικό ως προς τον αριθμό εισόδου υποχρεωτικά αλλιώς έχω ασυνέπεια στη σκέψη μου. Όμως υπάρχουν 2 ζητήματα.
Το πρώτο είναι ότι δεν μετράω στην πολυπλοκότητα και το Διάβασε γιατί θα την αλλοίωνα. Για παράδειγμα δεν τη δυαδική αναζήτηση. Διαβάζω ν αριθμούς και τους βάζω σε πίνακα (ν βήματα). Και μετά κάνω δυαδική (logn βήματα). Η ίδια η διάβασε είναι πιο επιβαρυντική από την βασική επεξεργασία μου. Δηλαδή μετράω το επεξεργαστικό μέρος αλλιώς αν βάλω και την ίδια την πράξη της εισόδου θα βγάλω γραμμική τη δυαδική αναζήτηση λόγω εισόδου.
Το δεύτερο είναι ότι δεν ευθύνεται η το logarithmic cost model για την εκθετικότητα του αλγορίθμου μου. Ευθύνονται οι εκθετικά πολλές διαιρέσεις. Αυτό ουσιαστικά λέω. Ότι και μια πράξη να μετρήσεις για την κάθε διαίρεση πάλι εκθετικά βγαίνουν τα βήματα. Όχι λόγω cost model άλλα λόγω εκθετικού πλήθους διαιρέσεων.
Γιώργος Παπαργύρης

gpapargi

Να θέσω κι εγώ ένα ερώτημα που πηγάζει από το σχόλιο του Ether.
Ο κλασσικός αλγόριθμος ελέγχου πρώτου κάνοντας όλες τις διαιρέσεις είναι:

Διάβασε ν
πλήθος_διαιρετών <--0
Για ι από 1 μέχρι ν
  Αν ν mod ι =0 τότε
    πλήθος_διαιρετών<--πλήθος_διαιρετών +1
  Τέλος_αν
Τέλος_επανάληψης

Αν πλήθος_διαιρετών=2 τότε
   Γράψε 'πρώτος'
αλλιώς
  Γράψε 'σύνθετος'
Τέλος_αν

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

Το ερώτημα είναι: στο πλαίσιο του μαθήματος είναι γραμμικός;
Αν κάποιος πιστεύει ότι είναι γραμμικός, η ένστασή μου είναι προφανής: Αλλοιώνουμε τα πράγματα και δεν μπορούμε να το κάνουμε.
Γιώργος Παπαργύρης

gpapargi

Παράθεση από: alkisg στις 20 Μαΐου 2016, 12:16:40 ΠΜ
Βρήκα αντίστοιχο παράδειγμα στη βιβλιογραφία (υπολογισμό του r = xy με επαναληπτικούς πολλαπλασιασμούς):
https://books.google.gr/books?id=Yxxw90d9AuMC&pg=PA3&redir_esc=y#v=onepage&q&f=false - τέλος σελίδας 3.

Στο uniform model αναφέρει ότι η πολυπλοκότητά του είναι πολυωνυμική και ίση με 2+3*y. Την μετράει ως προς την τιμή του y. Δεν την μετράει ως προς το πλήθος των bits και δεν την λέει εκθετική - αν και ακριβώς παρακάτω αναφέρει ότι τυπικά μετράμε το input size σε bits. Ακόμα και μετά τον ορισμό του input size, στη σελίδα 6, συνεχίζει να αναφέρει το πρόβλημα ως Ο(y) στο uniform model.

Εξηγεί και το πρόβλημα των μεγεθών στο uniform καθώς και το πρόβλημα του ότι στο λογαριθμικό μοντέλο, μια εντολή a := b + 5 κοστίζει log|b| + log5, οπότε καταλαβαίνουμε ότι σίγουρα δεν θέλουμε το λογαριθμικό μοντέλο στην ΑΕΠΠ.

Θα το διαβάσω και αναλυτικά Άλκη το κομμάτι που δίνεις, αλλά πρόσεξε κάτι: Γράφει και την πολυπλοκότητα που προκύπτει από το λογαριθμικό μοντέλο και δεν είναι εκθετική. Είναι κάτι σαν πολυονυμική επί λογάριθμο. Είναι αυτό που σου λέω... δεν ευθύνεται το λογαριθμικό μοντέλο για την εκθετικότητα του αλγορίθμου που δίνω αλλά το εκθετικά μεγάλο πλήθος διαιρέσεων.
Γιώργος Παπαργύρης

alkisg

Στη βιβλιογραφία το trivial primality test αναφέρεται ως γραμμικό ως προς την τιμή (=ουσιαστικά uniform model) και εκθετικό ως προς τα bits της εισόδου (=ουσιαστικά logarithmic model).
Προφανώς και στο συγκεκριμένο πρόβλημα οι παραδοχές του uniform είναι παρατραβηγμένες (το log(ν) γίνεται πολύ μεγαλύτερο από τα τυπικά c) οπότε συνήθως για σωστότερα αποτελέσματα μελετάται με το λογαριθμικό μοντέλο.

Η παλιά βιβλιογραφία συνήθως (αλλά όχι αποκλειστικά) δουλεύει με uniform στους απλούς αλγορίθμους όπου ο απειρισμός του προβλήματος συνδέεται με την αύξηση του πλήθος των units (π.χ. πίνακας με Ν στοιχεία) και με logarithmic σε αυτούς που απειρίζονται τα bits του τύπου δεδομένων ή έχουμε bit stream (π.χ. πρώτοι, κρυπτογράφηση, συμπίεση κλπ). Η καινούργια βιβλιογραφία συνήθως δουλεύει με integer RAM model, αλλά ας μην μπλέξουμε και με άλλα.

Εγώ θεωρώ ότι η ΑΕΠΠ χρησιμοποιεί το uniform, οπότε σαν απάντηση στον ether, όσα περιγράφονται σωστότερα με το logarithmic, αυτά είναι που θα χαρακτήριζα εκτός ύλης. Άρα το primality test ως προς την τιμή θα το θεωρούσα εντός ύλης, ενώ ως προς τα bits εισόδου εκτός ύλης.

Εσένα Γιώργο αν κατάλαβα καλά η βασική σου ένσταση είναι ότι ποτέ δεν δέχεσαι κάτι άλλο από τα bits της εισόδου για την μέτρηση της πολυπλοκότητας ενός προβλήματος. Οι υπόλοιπες διαφωνίες μας μάλλον είναι αποτέλεσμα αυτής. Σωστά;

Ενώ εγώ κάτω από τις κατάλληλες προϋποθέσεις και ανεξαρτήτως μοντέλου δέχομαι και την τιμή (που χρησιμοποιεί και το βιβλίο που παρέπεμψα), και την διαφορά της τιμής α-β, και τις διαστάσεις των πινάκων n,m (που χρησιμοποιεί και το βιβλίο της ΑΕΠΠ) κλπ ως μεταβλητές υπολογισμού της πολυπλοκότητας.

Μήπως αυτό βοηθήσει να ξεκολλήσουμε από τα bits της εισόδου; Σε αυτούς τους αλγόριθμους η πολυπλοκότητα για να εκφραστεί σωστά χρειάζεται και τα bits της εξόδου:
https://en.wikipedia.org/wiki/Output-sensitive_algorithm

Γενική συζήτηση για τις παραδοχές που κάνουμε, όπου αναφέρει ότι και ο υπολογισμός με βάση την τιμή είναι αποδεκτός τρόπος:
https://en.wikipedia.org/wiki/Context_of_computational_complexity

ether

Παράθεση από: alkisg στις 20 Μαΐου 2016, 12:16:40 ΠΜ
Βρήκα αντίστοιχο παράδειγμα στη βιβλιογραφία (υπολογισμό του r = xy με επαναληπτικούς πολλαπλασιασμούς):
https://books.google.gr/books?id=Yxxw90d9AuMC&pg=PA3&redir_esc=y#v=onepage&q&f=false - τέλος σελίδας 3.

Στο uniform model αναφέρει ότι η πολυπλοκότητά του είναι πολυωνυμική και ίση με 2+3*y. Την μετράει ως προς την τιμή του y. Δεν την μετράει ως προς το πλήθος των bits και δεν την λέει εκθετική - αν και ακριβώς παρακάτω αναφέρει ότι τυπικά μετράμε το input size σε bits. Ακόμα και μετά τον ορισμό του input size, στη σελίδα 6, συνεχίζει να αναφέρει το πρόβλημα ως Ο(y) στο uniform model.
Λέει ότι είναι 2+3*y. Τη χαρακτηρίζει όμως κάπου ως πολυωνυμική; Στις σελίδες 3 και 4 που διάβασα (λίγο βιαστικά είναι η αλήθεια) δεν είδα να χαρακτηρίζει το 2+3*y ως πολυωνυμικό.

gpapargi

Απαντάω ξεχωριστά σε αυτό γιατί μάλλον είναι το πιο σημαντικό από όλα.
Παράθεση από: alkisg στις 20 Μαΐου 2016, 11:51:59 ΠΜ
Εσένα Γιώργο αν κατάλαβα καλά η βασική σου ένσταση είναι ότι ποτέ δεν δέχεσαι κάτι άλλο από τα bits της εισόδου για την μέτρηση της πολυπλοκότητας ενός προβλήματος. Οι υπόλοιπες διαφωνίες μας μάλλον είναι αποτέλεσμα αυτής. Σωστά;

Περίπου αλλά όχι ακριβώς. Δέχομαι και τα αριθμητικά πολλαπλάσια των bits εισόδου, όπως πχ τα ψηφία, τις λέξεις, τα bytes και κάθε πολλαπλάσιο γιατί δεν μου αλλάζουν την τάξη και καταλήγουν και σε πιο βολικές μεταβλητές. Το κρίσιμο σημείο είναι το εξής: Σε ένα πίνακα με ν στοιχεία τα οποία έχουν άνω φραγμένο μέγεθος για τη μεταβλητή που μπαίνει σε κάθε κελί,  το πλήθος των στοιχείων του πίνακα είναι τελικά πολλαπλάσιο των bits. Άρα δεν έχω πρόβλημα σε οποιοδήποτε πίνακα με μέγιστο μήκος σε κάθε μεμονωμένο κελί, να βρίσκω την πολυπλοκότητα με βάση των πλήθος των κελιών. Έτσι καταλήγω σε γραμμική πολυπλοκότητα στη σειριακή. Δεν μπορώ όμως να το κάνω αυτό στον έλεγχο πρώτου ή στον πίνακα που ο αριθμός σε κάθε κελί μπορεί να αυξάνει απεριόριστα.
Γιώργος Παπαργύρης

ether

Παράθεση από: alkisg στις 20 Μαΐου 2016, 12:16:40 ΠΜ
Βρήκα αντίστοιχο παράδειγμα στη βιβλιογραφία (υπολογισμό του r = xy με επαναληπτικούς πολλαπλασιασμούς):
https://books.google.gr/books?id=Yxxw90d9AuMC&pg=PA3&redir_esc=y#v=onepage&q&f=false - τέλος σελίδας 3.

Στο uniform model αναφέρει ότι η πολυπλοκότητά του είναι πολυωνυμική και ίση με 2+3*y. Την μετράει ως προς την τιμή του y. Δεν την μετράει ως προς το πλήθος των bits και δεν την λέει εκθετική - αν και ακριβώς παρακάτω αναφέρει ότι τυπικά μετράμε το input size σε bits. Ακόμα και μετά τον ορισμό του input size, στη σελίδα 6, συνεχίζει να αναφέρει το πρόβλημα ως Ο(y) στο uniform model.

Εξηγεί και το πρόβλημα των μεγεθών στο uniform καθώς και το πρόβλημα του ότι στο λογαριθμικό μοντέλο, μια εντολή a := b + 5 κοστίζει log|b| + log5, οπότε καταλαβαίνουμε ότι σίγουρα δεν θέλουμε το λογαριθμικό μοντέλο στην ΑΕΠΠ.
Το βιβλίο που αναφέρεις, στη σελίδα 4 λέει:
"...
In the following, we will refer to the uniform cost model in all (time and space) complexity evaluations performed.
..."

Στο τέλος της σελίδας 5, ξεκινάει να αναλύει την πολυπλοκότητα του τετριμμένου αλγορίθμου (που ελέγχει όλους τους δυνατούς διαιρέτες μέχρι την τετραγωνική ρίζα του αριθμού) για έλεγχο πρώτου (ουσιαστικά του αλγορίθμου που ανέφερε πιο πάνω ο gpapargi, αν αλλάξει η τιμή μέχρι στη ΓΙΑ). Λέει ότι αν ο αριθμός x είναι πρώτος, ο αλγόριθμος εκτελεί πλήθος βημάτων ανάλογο του ρίζα(x).
Η σελίδα 6 δεν είναι διαθέσιμη στην προεπισκόπηση, στην αρχή της σελίδας 7 όμως αναφέρει ότι το κόστος εκτέλεσης είναι ανάλογο του 2^(n/2), (σελ 5)"...if we use the natural encoding scheme which represents integer x as a binary string of length n = logx".

Και αναφέρει:
¨...
Even if the two values are equal, the second one gives greater evidence of the complexity of the algorithm, which grows exponentially with the size of the input.
..."

Κι αυτός λοιπόν, που έχει δηλώσει ότι θα χρησιμοποιεί το uniform cost model, εκθετικό θεωρεί τον τετριμμένο αλγόριθμο για τον έλεγχο πρώτου αριθμού.

Και παρακάτω λέει ότι δεν είναι γνωστό μέχρι τώρα (δηλαδή τότε που έγραφε το βιβλίο) αν υπάρχει αλγόριθμος πολυωνυμικού χρόνου για το συγκεκριμένο πρόβλημα. Προφανώς εννοεί ντετερμινιστικός, γιατί πιθανοτικοί υπήρχαν και τότε. Τώρα βέβαια ξέρουμε ότι υπάρχει πολυωνυμικός ντετερμινιστικός (AKS), αν και στην πράξη χρησιμοποιούνται πιθανοτικοί.

Και καταλήγει λέγοντας:
"...
Notice that using a unary base encoding (an unnatural scheme) would result in an evaluation of the execution cost as the square root of the instance size.
..."

ether

Παράθεση από: alkisg στις 20 Μαΐου 2016, 11:51:59 ΠΜ
Εγώ θεωρώ ότι η ΑΕΠΠ χρησιμοποιεί το uniform, οπότε σαν απάντηση στον ether, όσα περιγράφονται σωστότερα με το logarithmic, αυτά είναι που θα χαρακτήριζα εκτός ύλης. Άρα το primality test ως προς την τιμή θα το θεωρούσα εντός ύλης, ενώ ως προς τα bits εισόδου εκτός ύλης.
Αφού στη βιβλιογραφία τέτοιοι αλγόριθμοι -όπως ο τετριμμένος brute force για τον έλεγχο πρώτου, ο κλασικός DP για το knapsack, ο DP για το subset sum και άλλοι- που είναι πολυωνυμικοί ως προς την αριθμητική τιμή της εισόδου δεν αναφέρονται ως πολυωνυμικοί αλλά ως ψευδοπολυωνυμικοί, και οι ψευδοπολυωνυμικοί στη βιβλιογραφία θεωρούνται εκθετικοί ως προς το input size, πώς εμείς στην ΑΕΠΠ θα τους χαρακτηρίζουμε πολυωνυμικούς;

alkisg

Χαρακτηρίζονται εκθετικοί ως προς input size αλλά πολυωνυμικοί ως προς την τιμή:
Παράθεση από: https://en.wikipedia.org/wiki/Pseudo-polynomial_time
a numeric algorithm runs in pseudo-polynomial time if its running time is polynomial in the numeric value of the input

Και τα δύο είναι επιστημονικώς αποδεκτά, δεν είναι ντροπή ή λάθος να πεις ότι ένας ψευδοπολυωνυμικός είναι πολυωνυμικός ως προς την τιμή. Είναι δύο διαφορετικές μέθοδοι προσδιορισμού της πολυπλοκότητας, αυτή με βάση τα bits εισόδου την εκφράζει καλύτερα για μεγάλα ν, αλλά σίγουρα και ο χαρακτηρισμός ως προς την τιμή δεν είναι λάθος.

Να κι ένα ακόμα από τη wikipedia, ειδικά για το primality test που αναφέρεσαι:
Παράθεση από: https://en.wikipedia.org/wiki/Context_of_computational_complexity
For example, the complexity of primality tests and multiplication algorithms can be measured in two different ways: one in terms of the integers being tested or multiplied, and one in terms of the number of binary digits (bits) in those integers. For example, if n is the integer being tested for primality, trial division can test it in Θ(n1/2) arithmetic operations; but if n is the number of bits in the integer being tested for primality, it requires Θ(2n/2) time. In the fields of cryptography and computational number theory, it is more typical to define the variable as the number of bits in the input integers.

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

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


Πάμε λίγο στο βιβλίο της ΑΕΠΠ. Αυτό σε πολλές περιπτώσεις λέει είτε πιο άμεσα είτε πιο έμμεσα ότι το μέγεθος του προβλήματος δεν ταυτίζεται με το μέγεθος της εισόδου, αλλά ένα παράδειγμα που μας ταιριάζει ιδιαίτερα εδώ είναι ο υπολογισμός fibonacci:
Παράθεση από: σελίδα 52 του τετραδίου μαθητή
Η επαναληπτική διαδικασία, λοιπόν, βασίζεται σε ένα και μόνο βρόχο, άρα η πολυπλοκότητα της μεθόδου είναι τάξης O(n).

Είναι το ίδιο με το παράδειγμα "γράψε ν αριθμούς" του Γιώργου, με τον υπολογισμό της δύναμης, και με το trivial primarity test. Και το βιβλίο το λέει Ο(n), όχι εκθετικό.

Εν τέλει η ουσία νομίζω είναι ότι έχουμε δύο επιλογές:
είτε ακολουθούμε το πνεύμα του βιβλίου της ΑΕΠΠ και μετράμε την πολυπλοκότητα άλλοτε ως προς το μέγεθος της εισόδου, άλλοτε ως προς την τιμή κλπ, και τα ψευδοπολυωνυμικά προβλήματα τα αναφέρουμε είτε ως πολυωνυμικά (χωρίς επιστημονικό λάθος) είτε ως εκτός ύλης,
είτε μετράμε πάντα την πολυπλοκότητα σε σχέση με το μέγεθος της εισόδου σε bits, βγάζουμε λάθος κάμποσα παραδείγματα του βιβλίου, και βγάζουμε ένα σωρό απλούς αλγορίθμους (π.χ. γράψε ν αριθμούς) ως εκτός ύλης.

Ο λόγος που αναμείχθηκα στην παρούσα συζήτηση είναι επειδή η πρώτη επιλογή μου φαίνεται σοφότερη.

Καλό ΣΚ σε όλους!

ether

Παράθεση από: alkisg στις 20 Μαΐου 2016, 10:16:32 ΜΜ
Χαρακτηρίζονται εκθετικοί ως προς input size αλλά πολυωνυμικοί ως προς την τιμή:
Και τα δύο είναι επιστημονικώς αποδεκτά, δεν είναι ντροπή ή λάθος να πεις ότι ένας ψευδοπολυωνυμικός είναι πολυωνυμικός ως προς την τιμή. Είναι δύο διαφορετικές μέθοδοι προσδιορισμού της πολυπλοκότητας, αυτή με βάση τα bits εισόδου την εκφράζει καλύτερα για μεγάλα ν, αλλά σίγουρα και ο χαρακτηρισμός ως προς την τιμή δεν είναι λάθος.
Και βέβαια δεν είναι ντροπή ούτε λάθος να πεις ότι είναι πολυωνυμικός ως προς την αριθμητική τιμή της εισόδου. Αν όμως πεις απλά ότι είναι πολυωνυμικός (χωρίς να αναφέρεις το "ως προς την αριθμητική τιμή της εισόδου"), απλά λες κάτι που είναι διαφορετικό από αυτό που αναφέρεται εκτενώς και εννοείται στη βιβλιογραφία.

Παράθεση από: alkisg στις 20 Μαΐου 2016, 10:16:32 ΜΜ
Φαντάσου το σαν τη Φυσική, όπου στο σχολείο τους διδάσκουν κλασσική μηχανική, και αργότερα στο πανεπιστήμιο μαθαίνουν ότι αυτά ίσχυαν μόνο για μικρές ταχύτητες και δεν ισχύουν όσο πλησιάζουμε την ταχύτητα του φωτός. Έτσι κι εδώ, όσο το ν αυξάνεται, το uniform μοντέλο δεν περιγράφει τόσο καλά τους αλγορίθμους που απειρίζουν τα bits του τύπου δεδομένων, αλλά δεν κάνουμε και επιστημονικό λάθος αν χρησιμοποιήσουμε το uniform μοντέλο στο Λύκειο για να μην κουράσουμε τους μαθητές.

Πάμε λίγο στο βιβλίο της ΑΕΠΠ. Αυτό σε πολλές περιπτώσεις λέει είτε πιο άμεσα είτε πιο έμμεσα ότι το μέγεθος του προβλήματος δεν ταυτίζεται με το μέγεθος της εισόδου, αλλά ένα παράδειγμα που μας ταιριάζει ιδιαίτερα εδώ είναι ο υπολογισμός fibonacci:
Είναι το ίδιο με το παράδειγμα "γράψε ν αριθμούς" του Γιώργου, με τον υπολογισμό της δύναμης, και με το trivial primarity test. Και το βιβλίο το λέει Ο(n), όχι εκθετικό.

Εν τέλει η ουσία νομίζω είναι ότι έχουμε δύο επιλογές:
είτε ακολουθούμε το πνεύμα του βιβλίου της ΑΕΠΠ και μετράμε την πολυπλοκότητα άλλοτε ως προς το μέγεθος της εισόδου, άλλοτε ως προς την τιμή κλπ, και τα ψευδοπολυωνυμικά προβλήματα τα αναφέρουμε είτε ως πολυωνυμικά (χωρίς επιστημονικό λάθος) είτε ως εκτός ύλης,
είτε μετράμε πάντα την πολυπλοκότητα σε σχέση με το μέγεθος της εισόδου σε bits, βγάζουμε λάθος κάμποσα παραδείγματα του βιβλίου, και βγάζουμε ένα σωρό απλούς αλγορίθμους (π.χ. γράψε ν αριθμούς) ως εκτός ύλης.
Όπως είδαμε, ο brute force για το primality testing θεωρείται εκθετικός στη βιβλιογραφία και με το uniform μοντέλο.
Ο DP για το knapsack θεωρείται εκθετικός στη βιβλιογραφία με το RAM μοντέλο, το οποίο θεωρεί ότι οι αριθμητικές λειτουργίες σε αριθμούς που χωράνε στη λέξη του υπολογιστή εκτελούνται σε Ο(1).
Και προφανώς δεν είναι καθόλου λάθος να πεις ότι ο DP για το knapsack είναι Ο(nW), ούτε ότι ο brute force για το primality testing είναι O(n). Αν όμως πεις απλά ότι είναι πολυωνυμικοί, απλά λες κάτι που είναι διαφορετικό από αυτό που αναφέρεται εκτενώς και εννοείται στη βιβλιογραφία.

Παράθεση από: alkisg στις 20 Μαΐου 2016, 10:16:32 ΜΜ
Καλό ΣΚ σε όλους!
Καλό ΣΚ

gpapargi

Παράθεση από: alkisg στις 20 Μαΐου 2016, 10:16:32 ΜΜ
Χαρακτηρίζονται εκθετικοί ως προς input size αλλά πολυωνυμικοί ως προς την τιμή:
Και τα δύο είναι επιστημονικώς αποδεκτά, δεν είναι ντροπή ή λάθος να πεις ότι ένας ψευδοπολυωνυμικός είναι πολυωνυμικός ως προς την τιμή. Είναι δύο διαφορετικές μέθοδοι προσδιορισμού της πολυπλοκότητας, αυτή με βάση τα bits εισόδου την εκφράζει καλύτερα για μεγάλα ν, αλλά σίγουρα και ο χαρακτηρισμός ως προς την τιμή δεν είναι λάθος.
Αρκεί όμως ο χαρακτηρισμός ως προς την τιμή για να τοποθετήσεις τον trivial αλγόριθμο ελέγχου πρώτου στην κλάση P των πολυωνυμικών αλγορίθμων; (εννοείται πριν ανακαλυφθεί ο AKS). Αυτό είναι το κρίσιμο ερώτημα.
Γιώργος Παπαργύρης

alkisg

Παράθεση από: gpapargi στις 22 Μαΐου 2016, 10:10:36 ΠΜ
Αρκεί όμως ο χαρακτηρισμός ως προς την τιμή για να τοποθετήσεις τον trivial αλγόριθμο ελέγχου πρώτου στην κλάση P των πολυωνυμικών αλγορίθμων; (εννοείται πριν ανακαλυφθεί ο AKS). Αυτό είναι το κρίσιμο ερώτημα.

Γιώργο θεωρώ ότι ο εξ' ορισμού χαρακτηρισμός του εν λόγω αλγορίθμου είναι "ψευδοπολυωνυμικός, δηλαδή πολυωνυμικός ως προς την τιμή και εκθετικός ως προς το μέγεθος της εισόδου σε bit".
Γιατί να θέλουμε να τον βάλουμε στην κλάση P; Τα P/NP σε κάποιες πηγές που διάβασα ορίζονται συγκεκριμένα ως προς το μέγεθος της εισόδου, όχι ως προς την τιμή, ενώ η πολυπλοκότητα είναι πιο ευέλικτη και μπορεί να οριστεί και με βάση άλλες παραμέτρους και μοντέλα κόστους.

Στα πλαίσια της ΑΕΠΠ, το βιβλίο περιέχει εκφράσεις του στυλ "ο αλγόριθμος υπολογισμού του ν-οστού όρου της ακολουθίας Fibonacci έχει πολυπλοκότητα Ο(ν)", και εννοεί την τιμή του ν, οπότε χωρίς να αναφέρεται σε ψευδοπολυωνυμικούς/P/NP επιτυγχάνει απλότητα χωρίς να είναι επιστημονικά λάθος.

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

gpapargi

Άλκη το σχολικό βιβλίο δεν αποτελεί ισχυρή βιβλιογραφική πηγή. Περιέχει αρκετά λάθη και ασάφειες σε διάφορα σημεία, οπότε το τι λέει δεν είναι ισχυρό επιχείρημα. Προτείνω να δούμε το θέμα με βάση τη  βιβλιογραφία.
Θα προσπαθήσω να δώσω μια περιγραφή του τι συμβαίνει κατά τη γνώμη μου. Θα πάρω για παράδειγμα τον trivial αλγόριθμο ελέγχου πρώτου που έγραψα πριν.
Ας πούμε ότι μετράμε τις διαιρέσεις. Αυτές είναι ξεκάθαρα ν. Άρα ρο πλήθος των βημάτων είναι ν. Μέχρι εδώ καλά.
Έστω τώρα ότι θέλουμε να εκφράσουμε το πλήθος των βημάτων (το ν δηλαδή) σα συνάρτηση κάποιας ανεξάρτητης μεταβλητής.
Αν αυτή η μεταβλητή είναι το ν τότε έχω f(ν)=ν. Δηλαδή ο αλγόριθμος είναι γραμμικός ως προς το ν.
Αν αυτή η μεταβλητή είναι το log(ν) τότε έχω f(logν)=ν. Με αλλαγή μεταβλητής καταλήγω σε f(κ)=10^κ που είναι το ίδιο με f(ν)=10^ν. Δηλαδή ο αλγόριθμος έχει εκθετική πολυπλοκότητα ως προς το logν.
Αν αυτή η μεταβλητή είναι το 10^ν τότε έχω f(10^ν)=ν και με κατάλληλη αλλαγή μεταβλητής έχω f(ν)=log(ν). Δηλαδή ο αλγόριθμος είναι λογαριθμικός ως προς το 10^ν.
Θέλω να πως ότι εγώ κάνοντας μαθηματικό παιχνίδι, δηλαδή επιλέγοντας ανεξάρτητη μεταβλητή μπορώ να βγάζω τον αλγόριθμο γραμμικό, εκθετικό λογαριθμικό και ότι άλλο θέλω. Εδώ λοιπόν κάτι συμβαίνει. Μπορώ εγώ αλλάζοντας απλά  μεταβλητές να μεταφέρω τον αλγόριθμο από την P στην NP , στην Ο(ν), στην Ο(ν^2) κλπ;
Αυτό που συμβαίνει είναι ότι για να χαρακτηρίσω έναν αλγόριθμο αν είναι πολυωνυμικός ή εκθετικός (σκέτο χωρίς να αναφέρω τη μεταβλητή), θα πρέπει να χρησιμοποιήσω υποχρεωτικά το μέγεθος εισόδου (δηλαδή τα bits ή κάποιο αριθμητικό πολλαπλάσιό τους). Έτσι από τις 3 προηγούμενες πιθανές μεταβλητές η δεύτερη (logn) είναι αυτή που θα καθορίσει αν ο αλγόριθμος είναι εκθετικός πολυωνυμικός ή γραμμικός.
Οπότε ο συγκεκριμένος αλγόριθμος είναι εκθετικός (σκέτο) χωρίς να αναφέρω τη μεταβλητή ως προς την οποία μετράω. Επίσης δεν ανήκει στην P. Μόνο με αυτή τη μεταβλητή αποφασίζω αν ανήκει στην P.
Τώρα... μπορώ να πω τη φράση ότι ο αλγόριθμος είναι γραμμικός ως προς το ν. Αλλά μπορώ να πω επίσης ότι είναι λογαριθμικός ως προς το 10^ν. Ο λόγος που το δεν το κάνω είναι ότι η συγκεκριμένη επιλογή μεταβλητής είναι δύσχρηστη και δεν έχει και φυσικό νόημα όπως η επιλογή του ν που είναι η τιμής της εισόδου. Δεν είναι όμως μαθηματικό σφάλμα.
Με άλλα λόγια το πλήθος των bits είναι κάτι σαν «προεπιλεγμένη» ανεξάρτητη μεταβλητή, αν μου επιτρέπεται η έκφραση. Αν θέλεις να κατατάξεις τον αλγόριθμο στους «πολυωνυμικού χρόνου» ή «εκθετικού χρόνου», και να τον πεις πολυωνυμικό (σκέτο) ή εκθετικό (σκέτο) το κάνεις μέσω του πλήθους των bits.
Δεν είναι λάθος το να πεις ότι έχω γραμμική πολυπλοκότητα ως προς την είσοδο, όπως δεν είναι λάθος (αν και είναι δύσχρηστο) να πεις ότι έχω λογαριθμική πως προς το 10^ν.
Δεν μπορείς όμως να κατατάξεις στην κλάση P τον αλγόριθμο και το πρόβλημα με βάση την τιμή εισόδου αλλά μόνο τα bits εισόδου.
Οι ψευδοπολυωνυμικοί είναι οι εκθετικοί αλγόριθμοι (χωρίς να λέμε ως προς ποια μεταβλητή, δηλαδή εννοώντας τα bits) που είναι γραμμικοί ως προς την τιμή εισόδου.
Γιώργος Παπαργύρης

gpapargi

Ένα σημείο σύγκλισης των απόψεων στα πλαίσια του μαθήματος μπορεί να είναι το εξής:
Να μπορούμε να χρησιμοποιήσουμε όποια μεταβλητή θέλουμε αρκεί να την αναφέρουμε ρητά. Πχ ο αλγόριθμος είναι γραμμικός ως προς το μέγεθος της εισόδου ν. Αν δεν αναφέρουμε τίποτα για το ποια είναι η μεταβλητή σημαίνει ότι είναι τα bits ή κάποιο πολλαπλάσιο (ψηφία, χαρακτήρες κλπ). Πχ αν πεις ότι ο αλγόριθμος είναι γραμμικός (σκέτο) σημαίνει ως προς τα bits. Αν θέλεις άλλη μεταβλητή θα πρέπει να την αναφέρεις ρητά.
Επίσης όταν αναφέρουμε παράγωγα της λέξης χρόνος (πχ χρονική πολυπλοκότητα, αλγόριθμος πολυωνυμικού χρόνου) θα εννοούμε τα bits ή πολλαπλάσιό τους.
Ο συμβολιμός Ο() αφορά συναρτήσεις οπότε μπορεί να χρησιμοποιηθεί και όταν δεν έχουμε bits αρκεί να δηλώνουμε τη μεταβλητή. Πχ όταν λέμε ότι ο αλγόριθμος είναι Ο(ν) σκέτο εννοούμε ως προς τα bits. Αν είναι άλλη η μεταβλητή θα πρέπει να τη δηλώνουμε. Πχ ο trivial αλγόριθμος εύρεσης πρώτου είναι Ο(ν), όπου ν είναι η τιμή εισόδου. Αν δεν αναφέρεις τι είναι το ν εννοείται ως προς τα bits. Δεν μπορείς δηλαδή να πεις ότι ο συγκεκριμένο αλγόριθμος είναι Ο(ν) (σκέτο).
Επίσης καλό είναι να πούμε ότι το πλήθος των bits είναι κάτι σαν τη «φυσική» μας  μεταβλητή. Αλλά επειδή είναι δύσχρηστη αν θέλουμε να χρησιμοποιήσουμε κάποια πιο βολική θα πρέπει να τη δηλώνουμε ρητά. Οι χαρακτηρισμοί προβλημάτων και αλγορίθμων σαν πολυωνυμικοί, εκθετικοί κλπ γίνεται ως προς τη φυσική μεταβλητή.
Στα παραπάνω συμφωνούμε; Νομίζω ότι βιβλιογραφικά είμαστε εντάξει.
Γιώργος Παπαργύρης

alkisg

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

Όμως αν δεν αναφερθεί, και φτάσουμε αφού γίνει το κακό να συζητάμε το αν "ο αλγόριθμος υπολογισμού του ν-οστού όρου της ακολουθίας Fibonacci έχει πολυπλοκότητα Ο(ν)" εννοεί βάσει τιμής ή μεγέθους εισόδου, φοβάμαι ότι εκεί θα υπάρξουν γενικευμένες διαφωνίες...

ΟΚ νομίζω ότι αναφέρθηκαν όλες οι πλευρές του θέματος, καλή συνέχεια να έχουμε με τα υπόλοιπα... :)