DAVID MALAN: Εντάξει.
Έτσι, αυτό είναι CS50, και αυτό είναι τώρα η έναρξη των τριών εβδομάδων.
>> Έτσι, μέχρι σήμερα, έχουμε γράφει προγράμματα σε C
ότι κοιτάξουμε λίγο κάτι σαν αυτό εδώ.
Έτσι, έχουμε ένα ζευγάρι από απότομη περιλαμβάνει στην κορυφή.
Έχουμε int, κύρια, άκυρη, και τότε κάτι να κάνει στη μέση,
κάποια κομμάτι του κώδικα μέσα αυτής της λειτουργίας.
Αλλά πλήκτρο υπήρξε το γεγονός ότι έχουμε πει άκυρη εδώ.
Έτσι, κενό, όλη αυτήν την περίοδο, διευκρινίζει ότι το πρόγραμμα αυτό, όταν εκτελείται,
μπορεί να τρέξει μόνο μέσω όνομά του.
Δεν μπορείτε να πληκτρολογήσετε οποιεσδήποτε άλλες λέξεις ή αριθμοί μετά το όνομα του προγράμματος, όταν
το τρέξιμο.
Έτσι, για παράδειγμα, εάν το πρόγραμμα ήταν συγκεντρώνονται σε ένα αρχείο που ονομάζεται Γεια σας,
θα μπορούσατε να κάνετε ./hello, αλλά ότι είναι αυτό.
>> Ο μόνος τρόπος που θα μπορούσε να συνεισφέρουν σε αυτό το πρόγραμμα
Είναι καλώντας μια συνάρτηση.
Για παράδειγμα, ποια λειτουργία έχουμε χρησιμοποιήσει μέχρι τώρα
για να πάρετε είσοδο από το χρήστη;
>> ΚΟΙΝΟ: Πάρτε κορδόνι.
DAVID MALAN: Για να πάρετε εγχόρδων, ή πάρετε int, ή έχετε δει άλλους,
ακόμη και αν δεν έχετε χρησιμοποιήσει ακόμα, σαν να πάρει μακρύ, μακρύ και τα παρόμοια.
Αλλά ας υποθέσουμε ότι έχουμε πραγματικά θέλετε να ξεκινήσετε
προγράμματα γραφής που είναι λίγο πιο ευέλικτο, και, ειλικρινά, λίγο πιο
όπως τις εντολές που έχετε έχουν πάρει, ελπίζουμε,
λίγο συνηθίσει.
Όπως cd χώρο Dropbox.
Αυτό, βεβαίως, οι αλλαγές directory σας, υποθέτοντας
είστε στο σπίτι John Χάρβαρντ κατάλογο, στο φάκελο Dropbox σας.
Εν τω μεταξύ, μια εντολή όπως αυτή Δημιουργεί ένα νέο κατάλογο που ονομάζεται pset2,
όπως μπορεί να έχετε ήδη ή σύντομα για το πρόβλημα θα ορίσετε δύο.
Γεια κάνουν, φυσικά, είναι μια εντολή που χτίζει ένα πρόγραμμα που ονομάζεται γεια
από ένα αρχείο που ονομάζεται γεια dot c.
Και σε κάθε μία από αυτές περιπτώσεις, τώρα, είχαμε
παρέχουν ένα επιχείρημα σχετικά με το λεγόμενο γραμμή εντολών, η γραμμή που αναβοσβήνει,
έτσι ώστε να κάνουν ξέρει τι πρέπει να οικοδομήσουμε, και έτσι ότι mkdir ξέρει τι φάκελο για να δημιουργήσει,
και έτσι ώστε cd γνωρίζει όπου θέλετε να πάτε.
Αλλά μέχρι τώρα, έχουμε κρατήσει λέγοντας ότι η κύρια, προεπιλεγμένη λειτουργία σας,
έχει μια έκφραση κενό μέσα από αυτές τις παρενθέσεις,
πράγμα που σημαίνει ότι δεν μπορεί να λάβει κανένα επιχείρημα.
>> Έτσι, ξεκινώντας από σήμερα, τι θα πάμε να κάνουμε
είναι, θα πάμε για να ξεκινήσει υποστηρίζουν τα πράγματα όπως αυτό ακόμα.
Στην πραγματικότητα, σε αυτή την περίπτωση, η οποία θα συνήθως δεν πληκτρολογήσετε,
Κάνε έχει κάνει αυτό για εμάς, δεν υπάρχουν
μία αλλά ένα, δύο, τρία επιπλέον χορδές, μετά το πρόγραμμα του όνομα
κλαγγή.
Επομένως, πώς θα το επιτύχουμε αυτό;
>> Λοιπόν, ξεκινώντας από σήμερα, σε περιπτώσεις όπου θέλουμε
να παρέχουν τη συμβολή τους μέσω της λεγόμενη γραμμή εντολών,
θα πάμε για να ξεκινήσει την προσθήκη εδώ τι είναι yellow--
αντικαθιστώντας το κενό με int argc κόμμα κορδόνι argv ανοιχτό βραχίονα κλείσιμο παρένθεσης.
Τώρα αυτό είναι ενδιαφέρον για δυο λόγους.
Ένα, πρόκειται να μας γράψετε προγράμματα που είναι λίγο πιο δυναμική.
Αλλά, πιο συναρπαστικά, πρόκειται να ανοίξει
τώρα μια συζήτηση ως προς το τι συστοιχίες μπορούν πραγματικά
να χρησιμοποιηθούν, για ό, τι ένα κορδόνι πραγματικά είναι κάτω από την κουκούλα,
μέχρι την επόμενη εβδομάδα, όταν θα αρχίσουν οι καταδύσεις σε ακόμη βαθύτερα ως προς το πώς το μηχάνημα είναι
κάνοντας όλη αυτήν την εργασία τα πράγματα.
Αλλά για τώρα, ας συντάξει, ίσως, μια εικόνα.
>> Όταν γράφετε ένα πρόγραμμα με κύριο δηλώνονται
με τον τρόπο αυτό, όπως ότι η κύρια παίρνει δύο επιχειρήματα, μια int
και-- τι τύπο δεδομένων είναι το δεύτερο επιχείρημα;
>> ΚΟΙΝΟ: Array.
DAVID MALAN: Array.
Έτσι φαίνεται με την πρώτη ματιά σαν να είναι ένα εγχόρδων, αλλά παρατηρήσετε τις αγκύλες.
Θυμηθείτε την τελευταία φορά που εισάγεται η έννοια ενός πίνακα.
Και συστοιχίες χρησιμοποιούν αγκύλες σε ένα ζευγάρι των πλαισίων.
Μπορείτε να χρησιμοποιήσετε το τετράγωνο παρένθεση για να πάει σε μια σειρά
και να πάρει ένα συγκεκριμένο στοιχείο, όπως βραχίονα 0 ή 1 βραχίονα ή βραχίονα 2.
Αλλά είδαμε, αν εν συντομία, την περασμένη εβδομάδα ότι μπορείτε επίσης
χρησιμοποιήσετε αυτές τις αγκύλες για να δηλώνουν το μέγεθος ενός πίνακα,
αν γνωρίζετε εκ των προτέρων πόσα ints ή πόσες χορδές ή οτιδήποτε άλλο σας
πραγματικά θέλουν.
Έτσι αποδεικνύεται εκεί έξω είναι ένα τρίτο πλαίσιο εδώ
ότι δεν έχει καμία αριθμός μέσα από τις αγκύλες.
Όταν έχετε ορίσει, όπως έχω εδώ, το όνομα του κάτι σαν argv,
το οποίο είναι ακριβώς ένα φανταχτερό τρόπο λέγοντας φορέα επιχείρημα, το οποίο
είναι ένα άλλο φανταχτερό τρόπο λέγοντας ότι μια σειρά από επιχειρήματα,
ανοιχτό βραχίονα κλείσιμο παρένθεσης μόνο σημαίνει ότι δεν έχετε απαραίτητα
γνωρίζουν εκ των προτέρων πόσο μεγάλο η συστοιχία πρόκειται να είναι,
αλλά ξέρετε ότι πρόκειται να είναι ένας πίνακας.
Έτσι, αν δεν ξέρετε το Αριθμός μην το βάζετε εκεί,
για ανοιχτό βραχίονα κλείσιμο παρένθεσης σημαίνει ότι argv δεν είναι ένα string,
αλλά μια σειρά από strings.
Έτσι, συντακτικά, αν σκεφτείτε ξανά την περασμένη εβδομάδα,
Είναι πολύ παρόμοια με λένε κάτι σαν int ηλικιών ανοιχτό βραχίονα,
και, στη συνέχεια, κάτι που στη συνέχεια.
Λοιπόν, τι σημαίνει αυτό μοιάζει;
Ας πραγματικά να σχεδιάσετε μια εικόνα.
Έτσι, όταν τρέχετε αυτό το πρόγραμμα με την κύρια έχοντας δύο επιχειρήματα που ορίζονται στο εσωτερικό
από αυτές τις παρενθέσεις, μπορείτε έχουν ουσιαστικά τουλάχιστον δύο κομμάτια
της μνήμης παραδοθεί σε εσάς κάτω από την κουκούλα.
One, όπως εγώ θα τραβάει αυτό το ορθογώνιο, πρόκειται να κληθεί argc.
Και ακριβώς όπως μια γρήγορη ανακεφαλαίωση, τι είναι ο τύπος δεδομένων του argc;
Έτσι είναι ένα int.
Έτσι ένας αριθμός πρόκειται να πάει σε argc-- στροφές
από το οποίο ξεχωρίζει για την καταμέτρηση επιχείρημα.
Εν τω μεταξύ, έχω σχεδιάσει argv ως μια σειρά.
Και εγώ δεν ξέρω πραγματικά πόσο καιρό πρόκειται να είναι,
τόσο για σκοπούς σημερινή dot dot dot.
Θα μπορούσε να πάρει κάποια μήκους.
Αλλά έχω απεικονίζεται εδώ τουλάχιστον τέσσερα ορθογώνια.
Έτσι argv ένα κομμάτι της μνήμης που αποθηκεύει εγχόρδων dot dot dot,
και argc είναι μόνο ένα κομμάτι της μνήμης για ακεραίου.
>> Μέχρι τώρα, ας είμαστε λίγο πιο ακριβείς.
Αν, όταν έχω χορδές σε αυτήν την σειρά, που ονομάζεται
argv, θέλω να πάρω τους μεμονωμένα, όπως την περασμένη εβδομάδα,
θα πάμε να χρησιμοποιήσετε σημειογραφία σαν στήριγμα argv 0
για να πάρει το πρώτο πράγμα που μια σειρά.
Argv βραχίονα 1 για να πάρει το δευτερόλεπτα πράγμα, και ούτω καθεξής.
Το κλειδί εδώ είναι ότι είμαστε ακόμα 0 indexed-- είμαστε ακόμα ξεκινώντας από το 0.
Έτσι τώρα ας πραγματικότητα βάλει κάτι σε αυτό.
Αν ήταν να καταρτίσει ένα πρόγραμμα που ονομάζεται Γεια σας από ένα αρχείο που ονομάζεται γεια dot c,
και στη συνέχεια να τρέξει αυτό το πρόγραμμα με dot κάθετο γεια,
τι κάνει ο υπολογιστής μου, το laptop μου, μοιάζουν κάτω από την κουκούλα
η στιγμή τρέχω dot κάθετο γεια και πατήστε Enter;
Λοιπόν, αυτό είναι ίσως τι θα μπορούσαμε να περιγράψουμε
όπως το περιεχόμενο του υπολογιστή σας μνήμη ή μνήμη RAM-- Random Access.
Με άλλα λόγια, ο υπολογιστής, κατά κάποιο τρόπο για μαγικά,
τοποθετεί τον αριθμό 1 στο argc, AKA argcount, και βάζει κυριολεκτικά το string
./hello στο βραχίονα argv 0.
Δεν έχω ιδέα, ειλικρινά, τι είναι στο βραχίονα argv 1 ή 2 ή 3,
γιατί αν ο χρήστης δεν έχει πληκτρολογήσει τίποτα εκτός από ./hello,
θα πάμε να υποθέσουμε ότι αυτά είναι πιο πιθανό αξίες σκουπίδια,
να το πω έτσι.
Τα κομμάτια της μνήμης υπάρχουν, αλλά δεν είναι στο χέρι μας
να εξετάσουμε τους, επειδή η argcount είναι μόνο μία.
>> Τώρα, εν τω μεταξύ, αν γράφετε τρέξει ένα άλλο πρόγραμμα,
CD, το οποίο είναι πιο σωστά μια εντολή, ανοιγοκλείματος prompt-- cd χώρο σας
Dropbox-- όταν τρέχω ότι, ουσιαστικά, όταν το πρόγραμμα cd τρέχει, argc,
μέσα από τη μνήμη του υπολογιστή μου, είναι για το πιο συντομότερος δεύτερη ο αριθμός 2.
Και τότε argv βραχίονα o έχει cd, στήριγμα argv 1 έχει Dropbox,
και τότε φυσικά η εντολή συμπληρώνει, ώστε όλη αυτή η μνήμη
πηγαίνει ουσιαστικά μακριά και χρησιμοποιείται για κάτι άλλο.
Και γι 'αυτό λέω μόνο ένα κλάσμα του δευτερολέπτου.
>> Εν τω μεταξύ, αν κάνουμε mkdir pset2, η εικόνα είναι σχεδόν το ίδιο,
αλλά με διαφορετικές χορδές μέσα argv.
Αν κάνω κλαγγή παύλα γεια γεια dot c, ίδια ιδέα.
Περισσότερα πράγματα συμπληρώνεται για argv, και argc, φυσικά, είναι 4.
Έτσι με άλλα λόγια, ακόμα κι αν αυτό array
θα μπορούσε να dot dot dot, από κάποια μεταβλητού μήκους, να το πω έτσι,
μπορείτε πάντα να γνωρίζουμε πού το τέλος του είναι, γιατί argc πρόκειται να σας πω
σε ποιο σημείο θα πρέπει να σταματήσει κοιτάζοντας στοιχεία argv.
Μπορείτε να δείτε μόνο σε τέσσερις συνολικά σε αυτή την περίπτωση.
>> Έτσι, ας ρίξουμε μια ματιά στο, ίσως, ένα απλό πρόγραμμα.
Κάποιος που λέει μόνο ένα γεια σε κάποιον σαν Zamyla.
Γι 'αυτό και ισχυρίζονται Πάω να γράψω ένα πρόγραμμα σε μόνο μια στιγμή, μέσω του οποίου θα μπορούσα να κάνω
./hello χώρο Zamyla, και τότε θέλω το πρόγραμμά μου για να εκτυπώσετε κάτι
υπερ-απλό, όπως "Γεια σας, Zamyla."
Τώρα, στο παρελθόν έχουμε χρησιμοποιήσει GetString.
Έτσι, στο παρελθόν, ακόμα και αν είστε νέος στον προγραμματισμό,
οι πιθανότητες είναι εσείς θα μπορούσε να μαστίγιο μέχρι ένα πρόγραμμα που χρησιμοποιεί GetString
και στη συνέχεια χρησιμοποιεί printf να πω ένα γεια σε Zamyla.
Αλλά ας μην χρησιμοποιείτε GetString αυτή τη φορά.
Επιτρέψτε μου, αντί να πάει στο Appliant και δεν περιλαμβάνουν πρότυπο I O dot h.
Επιτρέψτε μου να περιλαμβάνουν επίσης CS50 dot h.
Τώρα int κύρια, και τώρα είμαι δεν πρόκειται να κάνει άκυρη σήμερα.
Αντ 'αυτού, Πάω να κάνω int argc κορδόνι argv ανοιχτό βραχίονα κλείσιμο παρένθεσης,
δεν προσδιορίζει έναν αριθμό.
Και τώρα εδώ είναι μου λεγόμενες να κάνουμε.
Τι Πάω να κάνουμε τώρα είναι, είμαι πρόκειται να κάνει ένα κομμάτι από ένα άλμα της πίστης,
Πάω να υποθέσουμε ότι το χρήστη πρόκειται να χρησιμοποιήσετε αυτό το πρόγραμμα σωστά,
και είμαι απλώς πρόκειται να κάνει printf γεια, sn%.
Έτσι, τίποτα νέο εκεί.
Αλλά θέλω να βάλω τώρα ό, τι η λέξη πληκτρολογεί ο χρήστης μετά το όνομα του προγράμματος.
Έτσι, αν κάνω ./hello χώρο Zamyla, I θέλουν να με κάποιο τρόπο την πρόσβαση μέσω προγραμματισμού
παραθέτω σε εισαγωγικά "Zamyla." γι 'αυτό μπορεί να πάει σε φορέα το επιχείρημά μου,
σειρά μου χορδές, και αν η εντολή, και πάλι, ήταν ./hello χώρο Zamyla,
ποιος είναι ο αριθμός θέλω να θέσει σε argv εδώ;
ΚΟΙΝΟ: 1.
DAVID MALAN: 1, επειδή κλίμακα 0 Αποδεικνύεται
πρόκειται να είναι ο όνομα του προγράμματος, όπως είδαμε.
Έτσι υποστήριγμα 1 είναι η πρώτη λέξη ότι εγώ, ο χρήστης έχει πληκτρολογήσει.
Πάω να πάει μπροστά και να σώσει αυτό.
Πάω να πάει στο φάκελο μου όπου έχω τοποθετηθεί αυτό το αρχείο.
Πάω να κάνουν ένα γεια 3.
OK Comp ΔΟ.
./hello Zamyla Enter.
Τι έκανα λάθος;
Ήμουν αλιευθεί από έκπληξη τον εαυτό μου για μια στιγμή εκεί.
Τι έκανα λάθος;
>> ΚΟΙΝΟ: Όνομα.
>> DAVID MALAN: Η αρχείου στην πραγματικότητα ονομάζεται hello3.c.
Και το έκανα αυτό μόνο για συνέπειας, γιατί έχουμε
είχε hello.c σε η παρελθόν σε απευθείας σύνδεση κώδικα.
Ας διορθώσετε αυτό ./hello στήριγμα παύλα 3 Zamyla.
Enter.
Και τώρα έχουμε ένα γεια, Zamyla.
Εν τω μεταξύ, μπορώ να αλλάξω αυτό να είναι Rob, πραγματικά ή οποιαδήποτε άλλη λέξη.
>> Αλλά ας εξετάσει μια υπόθεση γωνία.
Τι μπορεί να περιμένετε να συμβεί εάν Δεν πληκτρολογήσετε το όνομα κανενός σε όλα;
>> ΚΟΙΝΟ: Error.
>> DAVID MALAN: Παρουσιάστηκε σφάλμα κάποιου είδους, ίσως.
Ας δούμε.
Enter.
Null.
Έτσι printf είναι στην πραγματικότητα είναι ένα μικρό προστατευτικό μας
εδώ, και κυριολεκτικά εκτύπωση ανοιχτό paren null, αλλά ακόμα χειρότερα τα πράγματα μπορούν να συμβούν.
Και ακριβώς για να αποδείξει κάτι που είναι απολύτως
Δεν πρέπει να κάνουμε, ας πάμε σε εδώ και να αρχίσετε να σπρώξει γύρω.
Σωστά;
Αν ξέρω ότι η εικόνα στο μνήμη είναι ουσιαστικά αυτό,
argv βραχίονας 1 έχει Zamyla, argv κλίμακα 0 έχει ./hello, ή ./hello-3.
Τι είναι το στήριγμα 2;
Έτσι, μπορώ να απαντήσω ότι αμφισβητούν τον εαυτό μου, σωστά;
Μπορώ να αλλάξω μόνο το 1 σε 2.
Θα ήθελα τώρα να μεταγλωττίσετε γεια 3, ./hello3 Ας μεγέθυνση και πατήστε Enter.
Ωχ.
Δεν σήμα απόσπασμα.
Ενδιαφέρουσες.
Έτσι, αυτό είναι το είδος της δροσερό για να να δούμε τι άλλο είναι εδώ.
>> Λοιπόν, τι άλλο είναι στο εσωτερικό του φορητού υπολογιστή μου;
Ας το αποθηκεύσετε με το βραχίονα 3.
Κάντε hello3, ./hello-3.
Περίεργος.
Και τώρα ας πάρει πραγματικά bold-- 50.
Έτσι, αυτό είναι πραγματικά βαθιά κατάδυση στη μνήμη του υπολογιστή μου.
50 ευρετήρια.
Έτσι κάνουν γεια 3 ./hello-3.
Περίεργος.
Εντάξει, τώρα είμαι απλά πρόκειται να πάρει απερίσκεπτη.
Ας πάμε στο 5000.
Εντάξει.
Έτσι, επιτρέψτε μου να μεταγλωττίσετε ξανά.
Κάντε hello3, ./hello-3.
OK.
Τώρα, κάποιοι από εσάς, ίσως υπάρχει είναι μια λάμπα πηγαίνει μακριά.
Πόσοι από εσάς έχετε δει αυτό το μήνυμα πριν;
OK.
Έτσι, γιατί;
>> Αποδόσεις are-- και υπάρχει διαφορετική πράγματα που μπορεί να προκαλέσει αυτό,
και προφανώς είστε σε καλή company-- έχουμε σαφώς
προκάλεσε ό, τι λέγεται ένα σφάλμα κατάτμησης.
Και τα πολυλογώ για σήμερα, έχουν αγγίξει ένα τμήμα της μνήμης
ότι δεν θα πρέπει να έχουν.
Όταν ένα τμήμα σημαίνει μόνο ένα κομμάτι της μνήμης που πρέπει να έχουν.
Τώρα ο υπολογιστής εγγυάται ότι αν τρέχει ./helloZamyla ότι μπορώ να αγγίξει argv
είναι στήριγμα 0 και argv βραχίονα 1.
Αλλά argc είναι αξίας 2, αυτό σημαίνει ότι είμαι μόνο allowed-- αυτό είναι το είδος της τιμής
system-- να αγγίξει βραχίονα 0 και στήριγμα 1.
Αν πάω μακρύτερα οποιοδήποτε, υπάρχει απολύτως πρόκειται να είναι μνήμη στη θέση αυτή.
RAM μου φυσικά υπάρχει στον υπολογιστή.
Αλλά ποιος ξέρει τι είναι εκεί;
Πράγματι, τρέχω πολλαπλές προγράμματα σε ένα χρόνο.
Θα ήθελα να έχουμε seen-- αν δεν ήταν να κάνει αυτό για το Appliant
αλλά στο Mac μου ή PC-- να έχω δει τα περιεχόμενα ενός μηνύματος ηλεκτρονικού ταχυδρομείου.
Ίσως να είχα δει μια στιγμιαία μήνυμα που έχω στείλει πρόσφατα.
Οτιδήποτε θα μπορούσε να είναι πλανάται γύρω στη μνήμη
θα μπορούσαν να έχουν πρόσβαση μέσω αυτή η αυθαίρετη αγκύλη σημειογραφία.
Ή, ακόμα χειρότερα, μπορεί να έχετε βρέθηκε ένα από τους κωδικούς μου
ότι είχα πρόσφατα πληκτρολογήσει, ότι ένα πρόγραμμα είχε αποθηκευτεί στη μνήμη, έτσι ώστε
να μου ταυτότητας, και τότε ακριβώς το είδος της άφησε
στη μνήμη RAM μέχρι να σταματήσει αυτό το πρόγραμμα.
>> Και πράγματι, αυτό είναι ένα από τα ο κίνδυνος και μία από τις αρμοδιότητες
της χρησιμοποιώντας μια γλώσσα όπως η C. Έχετε απεριόριστη πρόσβαση
σε όλο το περιεχόμενο της μνήμης ενός προγράμματος,
και ποιες κακούς μπορεί ακόμα και να κάνει σε αυτές τις cases--
ειδικά όταν έχουμε φτάσετε στο web προγραμματισμό
προς το τέλος του εξαμήνου, θα επανεξετάσουμε αυτό topic-- είναι σακί γύρω,
ενδεχομένως, κάποιος είναι υπολογιστή μνήμης και να βρουν τέτοια περίεργα πράγματα
όπως είδαμε εκεί.
Ή ακόμη χειρότερα, τους κωδικούς πρόσβασης που έχει ή αυτή μπορεί στη συνέχεια να χρησιμοποιήσει για να κάνει κακά πράγματα.
>> Έτσι, προφανώς δεν θα έπρεπε να γίνει αυτό, επειδή παράξενα πράγματα αρχίζουν να συμβαίνουν.
Πράγματι, αυτό είναι ένα πρόγραμμα συντρίβεται.
Αυτό θα είναι το ισοδύναμο του Mac OS ή Windows
ένα παράθυρο του προγράμματος απλά εξαφανίζονται.
Παρουσιάστηκε μη αναμενόμενο σφάλμα.
Στο περιβάλλον της γραμμής εντολών βλέπουμε κάτι σαν αυτό.
Αλλά γι 'αυτό, είναι είμαι απλά αγγίζοντας μνήμης που δεν ανήκουν σε μένα.
>> Έτσι, ας υπερασπιστούμε εναντίον αυτής της μια λίγο διαφορετικό τρόπο
κοιτάζοντας αυτό το πρόγραμμα εδώ.
Έτσι, και πάλι, ο σκελετός ότι είδαμε earlier--
και έχω τονίσει αυτή την φορά int.
Και όλο αυτό το διάστημα έχει κύρια Πράγματι επέστρεψε μια τιμή.
Ακόμα κι αν το μεγαλύτερο μέρος της διάλεξης μας παραδείγματα που ποτέ δεν έχω χρησιμοποιήσει μία φορά
επιστρέψει τίποτα στην κύρια.
Γράφουμε μόνο printf κοντά σγουρά στήριγμα και αυτό είναι όλο.
Αλλά για δωρεάν, ποια είναι η compiler κάνει για σας,
αποτελεσματικά, επιστρέφει 0 για εσάς.
Ενεργοποιεί out-- και είναι λίγο counterintuitive-- ότι το 0 είναι καλό.
Αυτό δεν σημαίνει ψευδής per se.
0 είναι καλό, καθώς και κάθε μη-0 αξία, ο κόσμος έχει αποφασίσει,
μπορεί να σημαίνει ένα σφάλμα.
Έτσι, αν έχετε ποτέ μπέρδεμα κάτι στον υπολογιστή σας,
ή ένα πρόγραμμα έχει μόλις πεθάνει για σας και έχετε πάρει κάποια λανθασμένη παράθυρο
στην οθόνη σας, λέγοντας σφάλμα 49 αρνητικές ή λάθος 23--
μερικές φαινομενικά αυθαίρετη value-- που είναι επειδή ένας προγραμματιστής έχει σκληρό κωδικοποιημένο
μια τιμή, όπως αρνητική 49 ή θετική 23 να αντιπροσωπεύει οποιοδήποτε αριθμό, τολμώ να πω,
από 4 δισεκατομμύρια πιθανές πράγματα ότι θα μπορούσε να πάει στραβά σε ένα πρόγραμμα.
>> Λοιπόν, πώς θα μπορούσε να πάρω επωφεληθούν από αυτό τον εαυτό μου;
Λοιπόν, επιτρέψτε μου να ανοίξει ένα πρόγραμμα ότι έγραψα εκ των προτέρων,
και σακί γύρω σε απευθείας σύνδεση ονομάζεται γεια 4.
Και είναι σχεδόν ταυτόσημη, εκτός του ότι του πήρε λίγο σφάλματος ελέγχου.
Σε αυτή την περίπτωση, έχω και πάλι δηλώνονται κύρια ως λήψη δύο επιχειρήματα,
αλλά αυτή τη φορά, στη γραμμή 17, ειδοποίηση Κάνω ένα κομμάτι ενός ελέγχου ασφαλείας.
Είμαι σίγουρος ότι κάνει argc ισούται ισούται με 2.
Γιατί αν είναι, ότι σημαίνει ότι μπορώ με ασφάλεια
αγγίζουν όχι μόνο βραχίονα 0, αλλά στήριγμα 1.
Και πάω μπροστά και να εκτυπώσετε, σε αυτή την περίπτωση, Zamyla ή Rob
ή ό, τι λέξη που πληκτρολογήσατε έξω.
Και τώρα απλά για να πάρει λίγο πιο σωστή,
Πάω να επιστρέψει ρητά 0 για να δηλώσει ότι όλα είναι καλά.
Τίποτα κακό συνέβη.
>> Αλλά με σύμβαση, Πάω να επιστροφή 1, ή ειλικρινά οποιαδήποτε μη-0 αξίας,
αν κάτι πήγε στραβά.
Τώρα ο χρήστης δεν πρόκειται να πραγματικά να παρατηρήσετε τι συμβαίνει.
Πράγματι, αν πάω σε αυτόν τον κατάλογο, εμείς μεγεθύνετε και να κάνουν ένα γεια 4,
./hello-4 Zamyla συμπεριφέρεται όπως θα περίμενε κανείς.
Αλλά αν αντί να μην πληκτρολογήσετε τίποτα, τίποτα δεν φαίνεται να συμβαίνει,
αλλά δεν συντριβή.
Και αν, αντί να κάνει κάτι όπως Rob είναι ένας επιτηρητής
σε Thayer-- ανταλλαγή αυθαίρετες πληροφορίες.
Αλλά προσέξτε, argv 1, 2, 3, 4, και 5 θα πρέπει να υπάρχει τώρα στη μνήμη.
Αυτό, επίσης, δεν είναι ό, τι είναι το πρόγραμμά μου αναμένει,
γιατί έχω ελεγχθεί αν argc ισούται ίσων 2 ή όχι.
Έτσι είμαι τώρα την υπεράσπιση ενάντια σε αυτό.
>> Τώρα, ως ένα μέρος, που η programmer-- ή μάλλον η users--
Ποτέ δεν θα δείτε ότι 0 ή 1, αλλά χρησιμοποιώντας ένα εργαλείο που ονομάζεται εντοπισμού σφαλμάτων, ή άλλα εργαλεία,
όπως θα δούμε πριν καιρό, μπορείτε ο προγραμματιστής
μπορεί πραγματικά να δούμε τι θα μπορούσε να είναι πηγαίνει στραβά μέσα από το πρόγραμμά σας.
>> Έτσι, οποιεσδήποτε ερωτήσεις σχετικά με argc;
Ναι.
>> ΚΟΙΝΟ: Έχω δει όπου δεν είχε το χαρακτήρα, [δεν ακούγεται]
μόλις είπε αστέρι εγχόρδων d, όπως αστερίσκο κόμμα.
Είναι ισοδύναμο εδώ;
>> DAVID MALAN: Είναι.
Έτσι, το ερώτημα είναι, έχετε σπίνοι προγράμματα
όπως αυτό που δεν κάνουν λένε βραχίονα εγχόρδων argv
αλλά αντ 'αυτού να πω κάτι όπως char βραχίονα argv αστέρι.
Και υπάρχουν ακόμα και άλλα παραλλαγές που μπορείτε να δείτε.
Είναι πράγματι ισοδύναμες.
Προς το παρόν, έχουμε αυτά είδος των ρόδες
για τη μορφή της συμβολοσειράς στην CS50 βιβλιοθήκη, αλλά σε λίγο περισσότερο από μία εβδομάδα
και έτσι θα πάμε να αφαιρέσετε ότι απόφραξη συνολικά και στην πραγματικότητα
να δούμε τι το char και το αστέρι είναι, και πώς αυτά αφορούν στη μνήμη
εκπροσώπηση γενικότερα.
Γι 'αυτό και θα επανέλθω σε αυτό.
>> Άλλες ερωτήσεις σχετικά με argv ή argc μας;
Ναι.
ΚΟΙΝΟ: Γιατί να το επιστρέψετε σφάλμα [δεν ακούγεται];
DAVID MALAN: Γιατί το έκανε επιστρέψει ένα σφάλμα only-- oh!
Στην προηγούμενη περίπτωση, όταν εμείς ήταν futzing γύρω με τη μνήμη,
γιατί να επιστρέψει μόνο ένα λάθος όταν πληκτρολογήσει πραγματικά ένα μεγάλο αριθμό;
Σύντομη απάντηση είναι, εμείς απλά τυχερός.
Σε γενικές γραμμές, ένας υπολογιστής Διαθέτει μνήμη σε κομμάτια,
και μου έδωσε ένα αρκετά μεγάλο κομμάτι ότι Πήρα μακριά, χωρίς να γίνονται αντιληπτοί,
συγκινητικό βραχίονα 2, βραχίονα 3, βραχίονα 50, αλλά μόλις πίεσα
την τύχη μου, πήγα πέρα ​​από το όρια της κομμάτι της μνήμης
το λειτουργικό σύστημα μου είχε δώσει.
Και αυτό είναι, όταν στερεώνεται κάτω και είπε, όχι.
Σφάλμα τμηματοποίησης.
Ναι.
>> ΚΟΙΝΟ: Πώς λειτουργεί ο υπολογιστής γνωρίζουν την αξία του argc;
>> DAVID MALAN: Πώς η ηλεκτρονικών υπολογιστών γνωρίζουν την αξία του argc;
Όταν εκτελείτε ένα πρόγραμμα, το πρόγραμμα, από τη φύση του να αναβοσβήνει εντολών,
παραδίδεται το φάσμα των λέξεις που έχουν πληκτρολογηθεί
στη γραμμή εντολών, που ήταν πληκτρολογείται στη γραμμή.
Και έτσι είναι το λειτουργικό σας σύστημα που ουσιαστικά
συμπληρώνει τα επιχειρήματα κύρια για εσάς.
Έτσι, αυτό είναι μια από τις υπηρεσίες ότι μπορείτε να πάρετε, το είδος της κρυφά
κάτω από την κουκούλα του ένα λειτουργικό σύστημα.
Άλλες ερωτήσεις;
Ναι.
>> ΚΟΙΝΟ: Τι χωματερή πυρήνα σημαίνει;
DAVID MALAN: Τι χωματερή πυρήνα σημαίνει;
Έτσι, αυτό είναι μια καλή ερώτηση.
Και επιτρέψτε μου να επιστρέψω σε αυτό τον κατάλογο εδώ.
Και θα παρατηρήσετε ότι Έχω ένα νέο αρχείο εκεί.
Είναι πράγματι ονομάζεται πυρήνας, και αυτό είναι στην πραγματικότητα συνήθως ένα αξιοπρεπές μέγεθος αρχείου.
Αυτό είναι ουσιαστικά ένα στιγμιότυπο της τα περιεχόμενα της μνήμης του προγράμματος μου
ή RAM, όταν συνετρίβη.
Και αυτό θα είναι χρήσιμος, δυνητικά, διαγνωστικά,
φορά μιλάμε σε μια μελλοντική διάλεξη και το τμήμα σχετικά με τον εντοπισμό σφαλμάτων,
επειδή μπορείτε να κάνετε πραγματικότητα το ισοδύναμο ενός ψηφιακού αυτοψία
σε αυτό το αρχείο για να βοηθήσει να καταλάβω τι έκανες λάθος στο πρόγραμμα σας.
Ναι.
>> ΚΟΙΝΟ: Είναι argc μια εντολή στο ίδια, ή μπορείτε να το ονομάσετε τίποτα;
>> DAVID MALAN: Καλή ερώτηση.
Είναι argc μια εντολή από μόνη της, ή μπορείτε να το ονομάσετε τίποτα;
Είναι σίγουρα δεν είναι μια εντολή.
Είναι απλά μια μεταβλητή του το όνομα ή το όνομα ενός επιχειρήματος,
και έτσι απολύτως εμείς θα μπορούσε να θέσει αυτό το foo,
θα μπορούσαμε να ονομάσουμε αυτό το μπαρ, που τείνουν να είναι ο go-to λέξεις που ένας υπολογιστής
επιστήμονας πηγαίνει.
Αλλά με σύμβαση, χρησιμοποιούμε argc και argv.
Αλλά αυτό είναι μόνο ένα ανθρώπινο σύμβαση, τίποτα περισσότερο.
Εντάξει.
Έτσι αποδεικνύεται, έχω πάει λέει ένα κομμάτι από ένα λευκό lie--
και ειλικρινά, στο μέλλον, θα δείτε έχουμε πει σε άλλα λευκά ψέματα.
Αλλά για τώρα, θα πάμε να ξεκολλήσετε ένα από αυτά.
Σε αυτή την περίπτωση εδώ όταν στο παρελθόν έτρεξε ένα πρόγραμμα όπως ./hello ή ./hello-3
Zamyla, είχαμε τα περιεχόμενα μου μνήμη του υπολογιστή που αναζητούν σχεδόν σαν
αυτό.
Αλλά θυμηθούμε τι ένα string είναι.
Τι λέμε πριν από μία εβδομάδα τι κορδόνι στην πραγματικότητα είναι κάτω από την κουκούλα;
ΚΟΙΝΟ: Array των χαρακτήρων.
DAVID MALAN: Είναι ένα σειρά από χαρακτήρες, σωστά;
Έτσι, μπορούμε να έχουμε μια σειρά από χορδές, αλλά, με τη σειρά της, μια συμβολοσειρά
είναι μία σειρά χαρακτήρων.
Έτσι, αν θέλω πραγματικά να είναι πρωκτικό, όταν ήθελα να επιστήσω αυτή την εικόνα,
Θα πρέπει πραγματικά να αντλώντας είναι λίγο περισσότερο σαν αυτό,
σύμφωνα με την οποία σε κάθε ένα από αυτά ευρετήρια του πίνακα argv μου,
υπάρχει η ίδια μια ολόκληρη σειρά ότι η ίδια είναι σε μία συστοιχία.
Και τώρα το λευκό ψέμα που λέτε σήμερα
είναι ότι η εικόνα δεν φαίνονται αρκετά σαν αυτό.
Στην πραγματικότητα, οι μικρές πλατείες είναι συνήθως έξω από τα μεγάλα ορθογώνια
εκεί.
Αλλά θα επανέλθω στο θέμα αυτό πριν από καιρό.
Αλλά αυτό είναι ./hello backslash 0, ότι είναι ο ειδικός χαρακτήρας που
οριοθετεί το τέλος μιας συμβολοσειράς, και έχουμε άλλο ένα μετά
Το όνομά Zamyla του.
Λοιπόν, τι σημαίνει αυτό;
>> Λοιπόν, επιτρέψτε μου να πάει μπροστά και ανοίξει άλλα δύο παραδείγματα
που είναι διαθέσιμα στο διαδίκτυο.
Ένα ονομάζεται argv1.c και η άλλη είναι argv2.
Είναι ένας σούπερ-απλό πρόγραμμα το οποίο είναι διαφορετικό από τα προηγούμενα προγράμματα
στο ότι τώρα είμαι με τη χρήση argc και argv εδώ.
Και τώρα είμαι ενσωμάτωση με ένα βρόχο στη γραμμή 18, από i = 0 για μέχρι argc.
Και τι θα πάω να κάνω με αυτή τη γραμμή κώδικα εδώ;
Στην αγγλική γλώσσα.
Αυτό δείχνει προφανώς τη χρήση του argc.
Αλλά στα αγγλικά, τι κάνει το έκανα αν τρέχει αυτό το πρόγραμμα;
Ναι;
>> ΚΟΙΝΟ: Δεν πρόκειται να εκτυπώσετε σας οθόνη όσες φορές θέλετε.
DAVID MALAN: Ακριβώς.
Έτσι, ανεξάρτητα από τα λόγια μου πληκτρολογήστε στη γραμμή εντολών, είναι
πρόκειται να αναμασούν τους σε μένα μία ανά γραμμή.
Ας πάμε μπροστά και να το κάνουμε αυτό.
Επιτρέψτε μου να πάω σε κατάλογο μου και κάνουν argv1 ./argv1.
Και τώρα, ας το κρατήσουμε απλό.
Ας κάνουμε τίποτα στο πρώτο.
Το έκανε εκτυπώσετε ένα πράγμα, και αυτό είναι πράγματι το όνομα του προγράμματος,
γιατί αυτό είναι στην κλίμακα 0.
Αν λέω τώρα foo, πρόκειται να κάνει αυτά τα δύο, και αν μπορώ να πω bar foo,
πρόκειται να πω αυτά τα τρία πράγματα.
Τώρα αυτό είναι κάπως ενδιαφέρουσα, ίσως.
Αλλά υπενθυμίζουν ότι argv είναι μια σειρά από strings,
αλλά ένα string είναι μια σειρά από χαρακτήρες, έτσι μπορούμε να πάρουμε τα πράγματα επάνω μια εγκοπή
και να εφαρμόζει το βασικό λογική και κάνετε κωδικό που
μοιάζει λίγο πιο αινιγματικό, ομολογουμένως.
Αλλά έχοντας μια ένθετη βρόχο, κάτι ανάλογο
σε ό, τι μπορείτε να ανακαλέσετε από το Mario, Για παράδειγμα, αν το έκανε με αυτό τον τρόπο.
>> Έτσι, σήμερα παρατηρούμε ότι στη γραμμή 19, είμαι και πάλι επανάληψη επί των επιχειρημάτων μου,
από 0 μέχρι και σε argc.
Και τώρα, σύμφωνα 21-- είμαι δανείζονται ένα τέχνασμα από την τελευταία week--
Είμαι έλεγχο ποια είναι η μήκος του βραχίονα argv i.
Είμαι αποθηκεύοντας την απάντηση στο n.
Και τότε είμαι ενσωμάτωση από j σε έως n, όπου το j αρχικοποιείται σε 0.
Έτσι, σύμβαση για την καταμέτρηση.
Μόλις i χρησιμοποιείται, αν έχετε ένα βρόχο, και δεν μπορώ να το χρησιμοποιήσετε ξανά,
αλλιώς θα κοπανάω, ενδεχομένως, η αξία εκτός του εσωτερικού βρόχου.
Έτσι είμαι χρησιμοποιώντας j με σύμβαση.
Θα μπορούσε να χρησιμοποιήσει k.
Αν έχετε περισσότερα από k, τότε μάλλον έχει πάρα πολύ ωοτοκίας, συνήθως.
Αλλά τώρα, παρατηρήσετε printf μου γραμμή είναι ελαφρώς διαφορετική.
Δεν είμαι εκτύπωση% s, είμαι εκτύπωση% C, η οποία, φυσικά,
είναι ένα σύμβολο κράτησης θέσης για μια χαρα.
>> Και τώρα παρατηρήσετε αυτή τη σύνταξη.
Νέα.
Δεν το έχουμε ξαναδεί.
Όμως, λογικά, αυτό σημαίνει απλά να πάρει το string i-στο argv
και να πάρει το j-οστού τι;
ΚΟΙΝΟ: χαρακτήρων.
DAVID MALAN: Χαρακτήρα σε αυτή τη χορδή.
Έτσι, χρησιμοποιώντας αγκύλες ακολουθούμενη από αγκύλες,
αυτή είναι η πρώτη κατάδυση στο χορδές argv του,
και στη συνέχεια η δεύτερη αγκύλες με j
είναι καταδύσεις στους χαρακτήρες των ότι η συγκεκριμένη σειρά στο argv.
Και τότε, μόνο για το καλό μέτρο, Είμαι εκτύπωση μια νέα γραμμή εδώ.
Έτσι, τώρα επιτρέψτε μου να πάει μπροστά και να ανοίξει μέχρι ένα ελαφρώς μεγαλύτερο παράθυρο
έτσι μπορούμε να δούμε αυτό στην πράξη.
Επιτρέψτε μου να μπω σε αυτόν το φάκελο.
Και τώρα κάνουν argv-2-- whoops-- να argv-2, ./argv 2.
Enter.
Και αυτό είναι λίγο δύσκολο να διαβάσετε κάθετα,
αλλά αυτό είναι πράγματι το όνομα του πρόγραμμα, που ακολουθείται από μια κενή γραμμή.
Τώρα, επιτρέψτε μου να πάει μπροστά και να κάνουμε foo.
Ομοίως δύσκολο να διαβαστούν, αλλά είναι Πράγματι, η εκτύπωση ενός χαρακτήρα ανά γραμμή.
Και αν το κάνω μπαρ, είναι τώρα εκτύπωση εκείνες γραμμή προς γραμμή.
Έτσι, το πακέτο εδώ δεν είναι τόσο πολύ ότι, wow, να δούμε αυτό το τακτοποιημένο νέο τέχνασμα
όπου μπορείτε να πάρετε τα περιεχόμενα ειδικών χαρακτήρων ενός συστοιχίας,
αλλά μάλλον πώς θα παίρνετε αυτά τα βασικά ιδέες όπως η δημιουργία ευρετηρίου σε μια σειρά,
και, στη συνέχεια, την ευρετηρίαση σε μια συστοιχία που ήταν σε αυτή την συστοιχία,
και μόνο εφαρμόζοντας τις ίδιες ιδέες για να ελαφρώς πιο εξελιγμένα παραδείγματα.
Αλλά τα βασικά δεν έχουν πραγματικά αλλάξει, ακόμα και από την περασμένη εβδομάδα.
>> Τώρα αυτό είναι το είδος της έγκαιρης, ότι, υπενθυμίζουν, στο μηδέν εβδομάδα
παίξαμε με ένα τηλεφωνικό κατάλογο, όπως αυτό.
Και ακόμη και αν αυτό είναι προφανώς φυσικές κομμάτια χαρτιού,
μπορείτε είδος μπορώ να σκεφτώ ένα τηλεφωνικό κατάλογο ως μια σειρά.
Βέβαια, αν ήταν να reimplement αυτό τα κομμάτια αυτά τα κομμάτια χαρτιού
σε έναν υπολογιστή, πιθανώς θα πρέπει να χρησιμοποιήσετε κάτι
όπως και μια σειρά για την αποθήκευση όλων εκείνων ονόματα και τους αριθμούς από το Α σε όλη τη διαδρομή
μέσω Z. Έτσι, αυτό είναι καλό, γιατί μας επιτρέπει μια ευκαιρία,
ίσως, να εξετάσει πώς θα μπορούσε πραγματικά εφαρμόσει κάτι τέτοιο.
Όπως και με μια σειρά από πόρτες εδώ.
Έτσι, αν could-- χρειαζόμαστε ένα εθελοντικά να έρθει πάνω.
Ας δούμε.
Ένα άγνωστο πρόσωπο, ίσως, άγνωστο πρόσωπο, ίσως.
Πόσο περίπου το πορτοκαλί;
Εδώ.
Πορτοκαλί πουκάμισο, έλα επάνω.
>> Ας προχωρήσουμε τώρα και κίνηση αυτές οι πόρτες προς την πλευρά,
μετακινήσετε αυτά έξω από το δρόμο για μια στιγμή.
Ποιο είναι το όνομά σου;
>> AJAY:
>> DAVID MALAN: Ajay.
David.
Χαίρω πολύ.
Εντάξει.
Έτσι έχουμε πίσω από αυτά τα έξι πόρτες ψηφιακά στο screen--
ή, μάλλον, επτά πόρτες για το screen-- ένα σωρό αριθμούς.
Και σας έχω πει τίποτα σε advance-- συμφωνηθεί;
AJAY: Τίποτα εκ των προτέρων.
DAVID MALAN: Το μόνο που θέλω να κάνω τώρα είναι να βρει για μένα, και για μας,
Πραγματικά, ο αριθμός 50, ένα βήμα τη φορά.
>> AJAY: Number 50;
>> DAVID MALAN: Ο αριθμός 50.
Και μπορείτε να αποκαλύψει ό, τι είναι πίσω από κάθε μία από αυτές τις πόρτες
απλά αγγίζοντας με το δάχτυλο.
Γαμώτο. [Γέλια]
>> [Χειροκρότημα]
>> Πολύ καλά κάνει.
OK.
Έχουμε ένα υπέροχο δώρο βραβείο για σας εδώ.
Το ποντάρισμά σας ταινίες μας συζητήθηκε την περασμένη εβδομάδα.
>> AJAY: Ω, ο άνθρωπος.
Ω, ποτέ δεν έχω δει Διαστημόμπαλοι.
>> DAVID MALAN: Spaceballs.
Εντάξει.
Έτσι κρατήσει μόνο για μια στιγμή.
How-- ας κάνουν αυτό μια ευκολοδίδακτος moment--
πώς πηγαίνετε για την βρίσκοντας τον αριθμό 50;
AJAY: επέλεξα τυχαία.
DAVID MALAN: Έτσι που επιλέξατε τυχαία και στάθηκε τυχερός.
AJAY: Ναι.
DAVID MALAN: OK.
Εξαιρετική.
Μέχρι τώρα, δεν είχατε πάρει τυχερός, τι άλλο
θα μπορούσε να έχει συμβεί πίσω από αυτές τις πόρτες;
Έτσι, αν πάω μπροστά και να αποκαλύψει αυτούς τους αριθμούς εδώ,
στην πραγματικότητα είναι σε τυχαία σειρά.
Και το καλύτερο που θα μπορούσε να έχει γίνει, ειλικρινά, είναι κατά, τελικά,
στη χειρότερη περίπτωση, ελέγχοντας όλα αυτά.
Έτσι έχεις υπερ-τυχερός, που Δεν είναι αυτό που λέμε έναν αλγόριθμο.
Ναι, congrats.
Αλλά τώρα let's-- χιούμορ μου, αν μπορούσα.
Ας πάμε σε αυτήν την καρτέλα εδώ.
Και εδώ είναι οι αριθμοί σε σαφώς τι φαίνεται να είναι μια τυχαία σειρά,
και ήταν.
Αλλά τώρα αν αντί αξίωση ότι πίσω από αυτές τις πόρτες
είναι οι αριθμοί που έχουν ταξινομηθεί.
Ο στόχος τώρα είναι να επίσης βρείτε μας τον αριθμό 50.
Αλλά το κάνουμε αλγοριθμικά, και να μας πείτε πώς θα πάμε για αυτό.
Και αν το βρείτε, θα κρατήσει την ταινία.
Δεν βρίσκετε αυτό, να το δώσει πίσω.
AJAY: Έτσι, Πάω να ελέγξει τα άκρα πρώτη, για να καθορίσει εάν there's--
[Γέλια και χειροκροτήματα]
DAVID MALAN: Ορίστε.
Ας ρίξουμε μια ματιά σε ένα των προκατόχων Ajay του,
Sean, ο οποίος δεν ήταν τόσο τυχεροί.
Εντάξει, έτσι ώστε το έργο σας εδώ, Σων, είναι η ακόλουθη.
Έχω κρυμμένο πίσω από αυτά θυρών, ο αριθμός επτά,
αλλά κρυμμένο σε ορισμένες από αυτές τις πόρτες καθώς είναι άλλα μη-αρνητικούς αριθμούς.
Και ο στόχος σας είναι να σκεφτείτε αυτό πάνω σειρά των αριθμών ως απλά μια σειρά.
Είμαστε απλά μια ακολουθία των κομματιών από χαρτί με αριθμούς πίσω τους.
Και ο στόχος σας είναι, χρησιμοποιώντας μόνο την κορυφή array εδώ, βρείτε μου τον αριθμό επτά.
Και εμείς στη συνέχεια πρόκειται να κριτικάρω πώς μπορείτε να κάνετε για αυτό.
Βρείτε μας τον αριθμό επτά, παρακαλώ.
Όχι
5, 19, 13.
Δεν είναι μια ερώτηση παγίδα.
1.
Σε αυτό το σημείο το σκορ σου δεν είναι πολύ καλά, οπότε ίσως και να συνεχίζω.
3.
Πηγαίνετε στο.
Ειλικρινά, δεν μπορώ να βοηθήσει, αλλά αναρωτιέμαι τι είστε καν να το σκεφτούμε.
>> SEAN: μπορώ να πάρω από μόνη της πάνω σειράς.
DAVID MALAN: Μόνο η επάνω σειρά.
Έτσι, έχετε τρεις αριστερά.
Έτσι, βρείτε μου 7.
>> [ΚΟΙΝΟ φωνάζει ΠΡΟΤΑΣΕΙΣ]
Έτσι, και οι δύο από αυτούς ήταν καταπληκτικό για πολύ διαφορετικούς λόγους.
Έτσι, αυτό είναι όπου εμείς σταμάτησε πριν από λίγο,
και η βασική αντίληψη εδώ ήταν αυτές οι πόρτες είχαν αριθμούς
πίσω από αυτές που έχουν ταξινομηθεί, το ιδανικό πακέτο για το οποίο είναι ότι θα μπορούσε να κάνει
θεμελιωδώς καλύτερα σε αυτό το δεύτερο example--
και, μάλιστα, ότι ήταν Σον πρώτη προσπάθεια με τυχαίους αριθμούς
ακριβώς όπως before-- αλλά μόλις όπως αυτοί οι αριθμοί ταξινομούνται,
μοιάζει πολύ με το βιβλίο του τηλεφώνου, τι μπορεί προφανώς να κάνω;
Ή πώς μπορείτε να αξιοποιήσουν αυτή τη γνώση;
Ναι.
>> ΚΟΙΝΟ: Θα πάει στα μισά του δρόμου [δεν ακούγεται].
DAVID MALAN: Ναι.
Ακριβώς.
Έτσι αρχική ένστικτο Ajay ήταν να ελέγξει τα άκρα, όπως θυμάμαι,
και τότε το είδος του τελικού Το παράδειγμα γρήγορα.
Αλλά αν αρχίσαμε να κάνουμε αυτό πιο μεθοδικά κατά μήκος αυτών των γραμμών,
αλλά ξεκινώντας ίσως η μέση, επειδή είναι ταξινομημένα,
μόλις έχουμε αποκαλύψει το αριθμός 16, εμείς, ως εκ τούτου know--
και ας κάνουμε ακριβώς αυτό-- μας Ως εκ τούτου, γνωρίζουμε ότι το 50, στη σημερινή περίπτωση,
έχει να είναι προς τα δεξιά.
Έτσι ακριβώς όπως και στην εβδομάδα μηδέν όταν που έσκισε το βιβλίο του τηλεφώνου κατά το ήμισυ
και έριξε το ήμισυ του πρόβλημα μακριά, ίδια ιδέα εδώ.
Μπορούμε να ρίξει αυτό το εξάμηνο του προβλήματος μακριά.
Και ίσως ό, τι θα μπορούσε να κάνει αλγοριθμικά,
μόλις ξέρετε ότι το 50 πρέπει να είναι προς τα δεξιά, αν είναι οπουδήποτε,
είναι να προσπαθήσουμε εκεί, στη μέση των υπολοίπων θυρών.
Φυσικά, 50 είναι υψηλότερη από 42, ώστε να μπορούμε να
ρίξει αυτό το υπόλοιπο τρίμηνο του προβλήματος μακριά,
και, τέλος, να εντοπίσει κάτι σαν 50.
Αλλά ακριβώς όπως και με το τηλεφωνικός κατάλογος, οι αριθμοί
μας δόθηκαν ήδη στο ταξινομημένη σειρά, η οποία μας αφήνει
με το ερώτημα, πώς να το κάνεις να πάρει τα πράγματα σε σειρά ταξινόμησης;
Και, ειλικρινά, με ποιο κόστος;
Είναι ένα πράγμα να είναι παρέδωσε το βιβλίο του τηλεφώνου
και στη συνέχεια να εντυπωσιάσετε τους φίλους σας με την εύρεση ένας αριθμός τηλεφώνου πραγματικά γρήγορα, σωστά;
Δακρύρροια 32 σελίδες για να βρουν μια πρόσωπο από 4 δισεκατομμύρια σελίδες,
είπαμε ήταν ένα ακραίο παράδειγμα.
Αλλά πόσο χρόνο χρειάστηκαν Verizon να ταξινομήσετε το βιβλίο του τηλεφώνου;
Πόσο χρόνο θα μας πάρει να λύσουμε αυτά τα επτά αριθμούς;
Αυτό είναι ένα ερώτημα που έχουμε μέχρι στιγμής αγνοείται παντελώς.
>> Ας απαντήσουμε σε αυτό το ερώτημα τώρα.
Και είμαστε όλοι από τις ταινίες τώρα, αλλά έχουμε κάποιες μπάλες άγχος.
Αν, ας πούμε, οκτώ εθελοντές Δεν θα πείραζε να μας ενώνει μέχρι εδώ;
Ας πάμε μπροστά και να κάνουμε, πώς περίπου οι τέσσερις από εσάς, τρεις από εσάς εδώ;
Πάρτε μερικά νέα πρόσωπα.
Και οι τέσσερις από εσάς εκεί;
Και now-- ας μην προκατάληψη here-- και αριθμό οκτώ εδώ στο τέλος.
Έλα πάνω.
Εντάξει.
Έτσι, αυτό που έχουμε εδώ για κάθε ένας από εσάς είναι ένας αριθμός.
Αν θα θέλατε να πάτε μπροστά, να λάβει τον αριθμό αυτό.
Ποιο είναι το όνομά σου;
>> ARTIE: Άρτι.
>> DAVID MALAN: Άρτι, εντάξει.
Είσαι νούμερο 1.
>> AMIN: Amin.
DAVID MALAN: Amin.
David.
Είσαι νούμερο 2.
Και πάει μπροστά, όπως εγώ το χέρι Σας τα φύλλα χαρτιού,
παρατάξει τον εαυτό σας μπροστά από τη μουσική στέκεται στην ίδια σειρά όπως εκεί πάνω.
>> ANDY: Γεια σου, Andy.
>> DAVID MALAN: Andy, είναι ωραίο να βλέπεις.
Αριθμός 3.
>> JACOB: Jacob.
>> DAVID MALAN: Jacob, αριθμός 4.
Καλώς ήρθατε.
GRANT: Grant.
DAVID MALAN: Grant.
Αριθμός 5.
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, αριθμός 6.
>> FRANCES: Φράνσις.
DAVID MALAN: Φράνσις, τον αριθμό 7.
Και;
>> RACHEL: Rachel.
>> DAVID MALAN: Rachel, αριθμός 8.
Εντάξει.
Προχωρήστε και να πάρετε τον εαυτό σας με αυτή τη σειρά.
Επιτρέψτε μου να θέσω ένα υπόλοιπο μουσική σταθεί στη θέση του.
Σε περίπτωση που χρειάζεστε ένα περίπτερο;
OK.
Προχωρήστε και απλά βάλτε τους αριθμούς σας όπου το κοινό μπορεί να δει στην,
η μουσική σταθεί στραμμένη προς τα έξω.
Και ελπίζω, το πρώτο μας Έλεγχος λογική here-- 4, 2, 6.
Oh-oh.
Περιμένετε ένα λεπτό.
Δεν έχουμε ένα 8.
Θα πρέπει να σας εκδιώξει από Το παράδειγμα με κάποιο τρόπο.
Όχι
Όχι, αυτό είναι εντάξει.
Ας δούμε.
Μπορούμε να το κάνουμε αυτό.
Stand by.
Εκεί πάμε.
Σωστό.
Εντάξει.
Έτσι, τώρα έχουμε 8, 1, 3, 7, 5.
OK.
Εξαιρετική.
>> Έτσι, το ερώτημα στο χέρι είναι, σε με ποιο κόστος, και μέσω ποια μέθοδο,
μπορούμε να λύσουμε πραγματικά αυτούς τους αριθμούς εδώ έτσι ώστε να μπορεί να λειτουργήσει το είδος της προς τα πίσω,
τελικά, και decide-- είναι πραγματικά εντυπωσιακό, είναι πραγματικά αποτελεσματική,
ότι μπορώ να διαιρέσει και κατακτήσει ένα τηλεφωνικό κατάλογο;
Είναι πραγματικά αποδοτικό Μπορώ να διαίρει και βασίλευε
αυτά τα ψηφιακά κομμάτια χαρτί στο ταμπλό,
αν ίσως πρόκειται να μας κοστίσει μια τύχη στο χρόνο ή κύκλους ενέργειας ή CPU
να πάρει πραγματικά στοιχεία μας σε κάποια σειρά ταξινόμησης;
Οπότε ας κάνει αυτή την ερώτηση.
>> Έτσι, η πρώτη off, οι αριθμοί αυτοί είναι σε λίγο πολύ τυχαία σειρά,
και Πάω να προτείνει έναν αλγόριθμο, ή διαδικασία
με την οποία μπορούμε να λύσουμε αυτά τα παιδιά.
Πάω να προσεγγίσει αυτό το όμορφο αφελώς.
Και Πάω να αναγνωρίσουν ότι αυτό είναι το είδος της μια πολλά για μένα
να τυλίξτε το μυαλό μου γύρω από το ολόκληρο σύνολο δεδομένων ταυτόχρονα.
Αλλά ξέρεις τι;
Πάω να κάνω κάποια πολύ απλά οριακή διορθώσεις.
4 και 2 είναι εκτός λειτουργίας, εάν η Στόχος είναι να πάμε από το 1 έως και σε 8.
Έτσι, ξέρετε τι;
Πάω να έχετε παιδιά ανταλλάξουν, αν αλλάξετε
σωματικά θέσεις και κομμάτια σας από το χαρτί.
Τώρα 4 και 6, αυτά είναι σε τάξη.
Πάω να αφήσει εκείνους που είναι.
6 και 8, εκείνα που βρίσκονται σε σειρά.
Πηγαίνοντας να αφήσει τους να είναι.
8 και1, από παραγγελία.
Αν δύο δεν θα με πείραζε να αλλάζουν.
Τώρα, 8 και 3, αν τα παιδιά θα μπορούσαν να ανταλλάξουν.
8 και 7, αν τα παιδιά θα μπορούσαν να ανταλλάξουν.
Και 8 και 5, αν εσείς θα μπορούσε να ανταλλάξετε.
>> Τώρα, είμαι κάνει;
Όχι, προφανώς δεν είναι.
Αλλά έχω κάνει το κατάσταση καλύτερα, σωστά;
Ποιο ήταν και πάλι το όνομά σας, τον αριθμό 8;
>> RACHEL: Rachel.
DAVID MALAN: Έτσι Rachel έχει αποτελεσματικά διοχετεύεται μέχρι αρκετά μακριά,
σε όλη τη διαδρομή μέχρι το τέλος του σειρά μου τους αριθμούς εδώ.
Και έτσι ότι το πρόβλημα είναι το είδος της λυθεί.
Τώρα, προφανώς, 2 ακόμα χρειάζεται να μετακινήσετε ένα κομμάτι, και 4 και 6 και 1.
Αλλά φαίνεται να έχουν πάρει μια λίγο πιο κοντά στο διάλυμα.
Έτσι, ας εφαρμόσουμε την ίδια αφελής ευρετική και πάλι.
2 και 4, OK.
4 και 6, OK.
6 και 1, mm-mm.
Ας swap.
6 και 3 mm-mm.
Ας swap.
6 και 7 είναι ΟΚ.
7 και 5, nope.
Ας swap.
Και τώρα 7 και 8.
Και τι είναι το όνομά σας και πάλι;
FRANCES: Φράνσις.
DAVID MALAN: Φράνσις.
Μέχρι τώρα Frances είναι σε ακόμα καλύτερη θέση, γιατί τώρα 7 και 8
είναι σωστά διοχετεύεται μέχρι την κορυφή.
Έτσι, 2 και 4, OK.
4 και 1, swap ας.
4 και 3, swap ας.
4 και 6, είσαι ΟΚ.
6 και 5, swap ας.
Και τώρα αυτοί οι τύποι είναι καλοί.
Είμαστε σχεδόν εκεί.
2 και 1, εκτός λειτουργίας, έτσι ώστε να ανταλλάξουν.
Και τώρα επιτρέψτε μου να κάνω μια επιταγή λογική.
2 και 3, 3 και 4, 4 και 5, 5 και 6, 6 και 7, 8.
Εντάξει, έτσι τελειώσαμε.
>> Αλλά με ποιο κόστος έκανα ταξινομήσετε τους αριθμούς αυτούς εδώ;
Λοιπόν, πόσα βήματα έκανα δυνητικά λαμβάνουν κατά την ταξινόμηση αυτά τα παιδιά;
Λοιπόν, εμείς θα επανέλθουμε σε αυτό το ζήτημα.
Αλλά, ειλικρινά, αν έχεις λίγο βαρεθεί, ότι είναι
είδος του αποκαλύπτοντας το ότι αυτό δεν ήταν ίσως η πιο αποτελεσματική αλγόριθμος.
Και πράγματι, ειλικρινά, είμαι εφίδρωση όλα τα περισσότερο πόδια πίσω και εμπρός.
Αυτό δεν αισθάνονται ιδιαίτερα αποτελεσματική.
Έτσι, ας δοκιμάσουμε κάτι άλλο.
Αν έχετε παιδιά θα μπορούσαν να επαναφέρετε τον εαυτό σας σε αυτές τις οκτώ αξίες.
Καλή δουλειά.
>> Ας ρίξουμε μια ματιά σε ψηφιακή μορφή, μόνο για μια στιγμή πριν δοκιμάσετε κάτι άλλο,
σε τι ακριβώς συνέβη.
Μέχρι εδώ, είστε έτοιμοι να δείτε μια οπτικοποίηση αυτών των οκτώ ανθρώπων
οπότε μπλε και κόκκινο μπάρες αντιπροσωπεύουν τους αριθμούς.
Το ψηλότερο το μπαρ, τόσο μεγαλύτερος είναι ο αριθμός.
Όσο μικρότερη είναι η γραμμή, ο μικρότερος είναι ο αριθμός.
Και τι πρόκειται να δείτε είναι σε τυχαία σειρά περισσότερες από οκτώ από αυτούς.
Θα πάμε να δούμε αυτές τις μπάρες να πάρει κατατάσσονται σύμφωνα με τον ίδιο αλγόριθμο,
ή το σύνολο των οδηγιών, που εμείς θα αποκαλούμε πλέον bubble sort.
Έτσι παρατηρήσετε, κάθε δεύτερη ή έτσι, Οι δύο μπάρες φωτισμού με κόκκινο χρώμα,
συγκρίνονται από τον υπολογιστή.
Και στη συνέχεια, αν το μεγάλο μπαρ και το μικρό μπαρ είναι εκτός λειτουργίας,
είναι να ανταλλαχθούν για μένα.
>> Τώρα αυτό είναι απίστευτα κουραστικό για να παρακολουθήσουν αυτό, βεβαίως,
για πολύ καιρό, αλλά η ανακοίνωση της takeaway-- μεγάλο μπαρ κινείται προς τα δεξιά,
μπαράκια μετακίνηση προς τα αριστερά.
Ας εγκαταλείψετε αυτή τη διαδικασία και να επιταχύνει τη διαδικασία
να είναι πολύ πιο γρήγορα, ώστε να μπορούμε να πάρετε μια αίσθηση υψηλού επιπέδου για το τι,
Πράγματι, bubble sort κάνει.
Πράγματι, αυτό είναι ανάδευση μέχρι το δεξιά πλευρά της λίστας,
ή η συστοιχία, οι μεγαλύτερες μπάρες.
Και αντιστρόφως, τα μπαράκια είναι διοχέτευσή δρόμο τους προς τα κάτω προς τα αριστερά,
έστω και με ταχύτερους ρυθμούς από ό, τι έκανε προηγουμένως.
Έτσι, πιο δύσκολο να δούμε με τους ανθρώπους, αλλά οπτικά ότι είναι πράγματι ό, τι
συνέβαινε.
>> Αλλά ας προσπαθήσουμε μια ριζικά διαφορετική προσέγγιση τώρα.
Ας δοκιμάσουμε ένα διαφορετικό αλγόριθμο σύμφωνα με την οποία θα έχετε
παιδιά ξεκινήσει σε αυτά τα πρωτότυπα θέσεις, που ήταν αυτή τη σειρά εδώ.
Και ας προχωρήσουμε τώρα.
Και Πάω να κάνω κάτι ακόμα πιο απλή, σωστά;
Εκ των υστέρων, αλλάζουν και πάλι ανά ζεύγος και πάλι, σχεδόν λίγο έξυπνος.
Ας κάνουμε τα πράγματα ακόμα πιο αφελώς, όπου αν θέλω να ταξινομήσετε αυτά τα παιδιά,
επιτρέψτε μου να συνεχίσετε να ψάχνετε για το μικρότερο στοιχείο.
Έτσι τώρα, 4 είναι η μικρότερος αριθμός που έχω δει.
Πάω να το θυμόμαστε αυτό.
Όχι, 2 είναι καλύτερη, και να θυμάστε ότι.
1 είναι ακόμη μικρότερο.
3, 7, 5.
OK.
Ένα-- τι είναι το όνομά σας και πάλι;
>> ARTIE: Άρτι.
>> DAVID MALAN: Άρτι.
Έτσι, Άρτι, προχωρήστε.
Πάω να σας τραβήξει έξω από τη γραμμή.
Αν θα μπορούσε να έρθει πίσω εδώ.
Και εγώ πρέπει να κάνουν χώρο γι 'αυτόν.
Έχουμε ένα σημείο απόφασης εδώ.
Πώς θα μπορούσαμε να κάνουν χώρο για Artie εδώ στην αρχή όπου ο αριθμός 1 ανήκει;
>> ΚΟΙΝΟ: Shift.
>> DAVID MALAN: Εντάξει, θα μπορούσε να μετατοπιστεί σε όλους.
Αλλά Προτείνουμε μια βελτιστοποίηση.
Αυτό αισθάνεται λίγο ενοχλητικό για μένα να ζητήσω τέσσερα άτομα
να κινηθεί σε όλη τη διαδρομή προς τα κάτω.
Τι άλλο θα μπορούσα να κάνω;
>> ΚΟΙΝΟ: τους Switch.
>> DAVID MALAN: τους Switch.
Και τι είναι το όνομά σας και πάλι;
>> JACOB: Jacob.
DAVID MALAN: Jacob, να μετακινήσετε.
Πολύ πιο αποτελεσματική για να έχουν ακριβώς Jacob θέσεις ανταλλαγής με Artie,
σε αντίθεση με αναγκάζοντας οι τέσσερις από αυτούς τους λαούς,
Σας ευχαριστώ πολύ, να σωστή θέση τους.
Τι είναι ωραίο για Artie τώρα, αυτός είναι στην σωστή θέση του.
Ας το κάνουμε και πάλι.
2, αυτό είναι ο μικρότερος αριθμός που έχω δει.
3, 7, 5.
OK.
2 είναι σίγουρα το μικρότερο.
Δεν χρειάζεται να κάνει οποιαδήποτε εργασία.
Ας το κάνουμε και πάλι.
6.
Μικρότερη;
8.
Όχι.
4;
Ooh.
Ας θυμηθώ 4.
3.
Επιτρέψτε μου να θυμάστε 3.
7, 5.
Ο μικρότερος αριθμός έχω δει σε αυτό το πέρασμα είναι 3.
Αν θέλετε έλα έξω.
Πού θα πάμε για να σας βάλει;
Και τι είναι το όνομά σας;
>> Alanna: Alanna.
>> DAVID MALAN: Alanna, είμαστε Θα πρέπει να σας διώξουν.
Αλλά αυτό είναι πιο αποτελεσματική, να ανταλλάξουν μόνο δύο άτομα,
από το να έχουν πολλά άτομα στην πραγματικότητα παρακάμπτουν πάνω.
Τώρα ας κάνουμε αυτό και πάλι.
Πάω να επιλέξετε 4, οπότε έλα έξω.
Και ποιος πρόκειται να μετακινηθούν;
Αριθμός 8, φυσικά.
Αν τώρα βρείτε τον αριθμό 5, έλα έξω.
Αριθμός 8 πρόκειται να πάρει και πάλι έξωση.
Είμαι τώρα πρόκειται να βρείτε τον αριθμό 6 στη θέση του.
7 στη θέση του.
8 στη θέση του.
>> Αυτό που μόλις κάναμε τώρα είναι κάτι που ονομάζεται το είδος επιλογής,
και αν οραματιζόμαστε αυτό, είναι πρόκειται να αισθανθείτε λίγο διαφορετική.
Ας πάμε μπροστά και από αυτό μενού εδώ, αυτό visualization--
ας αλλάξουμε αυτό να-- έλα, Firefox.
Ας το αλλάξουμε αυτό το είδος επιλογής.
Και ας επιταχύνει όπως και πριν, και να αρχίσει την οπτικοποίηση τώρα.
Και αυτός ο αλγόριθμος έχει μια διαφορετική αίσθηση.
Σε κάθε επανάληψη, ειλικρινά, είναι ακόμα πιο απλή.
Είμαι απλά επιλέγοντας το μικρότερο στοιχείο.
Τώρα, ειλικρινά, πήρα λίγο τυχερός που χρόνου, υπό την έννοια ότι κατατάσσονται σούπερ-γρήγορα.
Τα στοιχεία ήταν τυχαία.
Δεν είναι, όπως εμείς τελικά θα δείτε, ουσιαστικά γρηγορότερα.
Αλλά ας δούμε το ένα τρίτο και τελικό προσεγγίσει εδώ ως προς το τι συμβαίνει.
Ας πάμε μπροστά και να επαναφέρετε παιδιά μια τελευταία φορά να είναι σε αυτή τη σειρά εδώ.
>> Και τώρα, θα πάω να να είναι λίγο πιο έξυπνος,
απλά να ολοκληρώνεται αλγορίθμων μας.
Πάω να το κάνουμε αυτό.
Πάω να μην πάει πίσω και εμπρός τόσο πολύ.
Ειλικρινά, είμαι κουρασμένος από όλα αυτά διαπεραστικός.
Είμαι ακριβώς πρόκειται να πάρει ό, τι είμαι δίδεται στην αρχή της λίστας,
και Πάω να ταξινομήσετε ότι τότε και εκεί.
Έτσι, εδώ είμαστε.
Αριθμός 4.
Πάω να εισάγετε τον αριθμό 4 σε μια ταξινομημένη λίστα.
Έγινε.
Ισχυρίζομαι τώρα, και μόνο για να κάνουν αυτό το πιο σαφής, αυτό το μέρος της λίστας μου είναι ταξινομημένο.
Είναι το είδος του ένα ηλίθιο ισχυρισμό, αλλά όντως 4 είναι ταξινομημένο σε μια λίστα του μεγέθους ενός.
Τώρα, είμαι πρόκειται να πάρει για τον αριθμό 2.
Αριθμός 2 Είμαι τώρα πρόκειται να τοποθετήσετε στη σωστή θέση.
Έτσι, όταν κάνει 2 ανήκουν;
Προφανώς, εδώ.
Έτσι προχωρήστε και να μετακινηθείτε προς τα πίσω, αν μπορούσες.
Και γιατί δεν σας παιδιά μόλις λάβει μουσική σας στέκεται μαζί σου αυτή τη φορά.
Και ας βίαια εισάγετε στην αρχή της λίστας.
Έτσι, λίγο περισσότερη δουλειά.
Έπρεπε να κινηθεί γύρω από Jacob, και τι είναι το όνομά σας;
>> AMIN: Amin.
>> DAVID MALAN: Amin.
Αλλά τουλάχιστον εγώ δεν πάω πίσω και μπρος.
Είμαι απλά να πάρει τα πράγματα όπως πάω.
Είμαι απλά να τοποθετήσετε στο σωστό μέρος.
6, αυτό είναι πραγματικά αρκετά εύκολο.
Ας τοποθετήσετε εκεί, αν απλά ήθελε να κινηθεί πάνω ελαφρώς.
Αριθμός 8, και αρκετά εύκολο.
Ακριβώς εκεί.
Γαμώτο.
Αριθμός 1 δεν μπορούμε απλά ανταλλάξουν με Amin εδώ,
γιατί αυτό συμβαίνει να χαλάσουν τη σειρά.
Έτσι πρέπει να είμαστε λίγο πιο έξυπνος.
Έτσι, Άρτι, αν θα μπορούσε δημιουργήσετε αντίγραφα ασφαλείας για μια στιγμή.
Ας πάμε μπροστά και να αλλάξει τώρα, σε αντίθεση με τις προηγούμενες αλγορίθμων μας,
για να κάνει χώρο για τον 'ρτι εδώ από την αρχή.
Έτσι, στο τέλος της ημέρας, είμαι το είδος του κάνει ό, τι ήθελα να αποφύγω πριν.
Και έτσι ο αλγόριθμος μου είναι το είδος της αντιστραφεί, πνευματικά,
από ό, τι ήταν αρχικά.
Απλά κάνω τη μετατόπιση σε διαφορετικό σημείο.
Τώρα είμαι στο 3.
Ω, γαμώτο.
Έχουμε να κάνουμε και πάλι περισσότερη δουλειά.
Οπότε ας σας ωθήσει έξω.
Ας προχωρήσουμε 8, 6, 4-- oh oh-- και 3 πρόκειται να πάει εκεί.
Έτσι τουλάχιστον μικρή εξοικονόμηση αυτή τη φορά.
7, δεν είναι πάρα πολύ δουλειά να γίνει.
Έτσι, εάν θέλετε να εμφανιστεί πίσω, ας τοποθετήσετε.
Και, τέλος, 5, αν θέλουν να σκάσει πίσω,
Πρέπει να σας αλλάξει, εσείς, σας, μέχρι πέντε είναι στη θέση του.
>> Έτσι τώρα να δούμε αυτό σε ένα υψηλού επιπέδου γραφικά,
ας κάνουμε αυτόν τον αλγόριθμο οπτικοποίηση μία επιπλέον φορά.
Έτσι, αυτό που θα καλέσει το είδος εισαγωγής.
Θα τρέξει ακριβώς όπως γρήγορα, και να αρχίσει εδώ.
Και αυτό, επίσης, έχει μια διαφορετική αίσθηση.
Είναι το είδος του να πάρει την καλύτερη και καλύτερα, αλλά δεν είναι ποτέ τέλεια
μέχρι να πάω στην ομαλή και αυτά τα κενά.
Επειδή, πάλι, είμαι μόνο λαμβάνοντας ό, τι Είμαι δίνεται από αριστερά προς τα δεξιά.
Γι 'αυτό δεν παίρνουν τόσο τυχεροί ότι τα πάντα ήταν τέλεια.
Γι 'αυτό είχαμε αυτά τα μικρά mispositions που έχουμε σταθερά την πάροδο του χρόνου.
>> Έτσι, όλες αυτές οι αλγόριθμοι φαίνεται να τρέχει σε ελαφρώς διαφορετικούς ρυθμούς.
Στην πραγματικότητα, το οποίο θα σας πω είναι ο καλύτερος ή ο πιο γρήγορος μέχρι τώρα;
Bubble sort, το πρώτο;
Είδος επιλογής, το δεύτερο;
Εισαγωγή είδος, η τρίτη;
Ακούω κάποιους είδους επιλογή.
Άλλες σκέψεις;
>> Έτσι αποδεικνύεται ότι όλοι από αυτούς τους αλγορίθμους
είναι ουσιαστικά εξίσου αποτελεσματικό ως κάθε other-- ή, αντίθετα, όπως ακριβώς
αναποτελεσματική ως το άλλο, γιατί μπορούμε να κάνουμε ουσιαστικά
καλύτερα από ό, τι οι τρεις αυτών των αλγορίθμων.
Και αυτό είναι ένα κομμάτι από ένα λευκό ψέμα, πάρα πολύ.
όταν λέω ως αποτελεσματική ή ως αναποτελεσματική,
ότι είναι, τουλάχιστον για super-μεγάλες τιμές του n.
Όταν έχουμε μόλις οκτώ ανθρώπους εδώ, ή ίσως 50 ή έτσι μπάρες στην οθόνη,
θα παρατηρήσετε απολύτως διαφορές μεταξύ αυτών των τριών αλγορίθμων.
Αλλά όπως n, ο αριθμός των ατόμων, ή ο αριθμός των αριθμών,
ή ο αριθμός των ατόμων στο τηλέφωνο βιβλίο, ή ο αριθμός των σελίδων web
στη βάση δεδομένων της Google γίνεται όλο και μεγαλύτερο,
θα δούμε ότι και οι τρεις από αυτούς αλγόριθμοι είναι στην πραγματικότητα αρκετά κακή.
Και μπορούμε να κάνουμε ουσιαστικά καλύτερα από αυτό.
>> Ας ρίξουμε μια ματιά, τέλος, σε ό, τι αυτοί οι αλγόριθμοι θα μπορούσαν
ακούγεται σαν το πλαίσιο των μερικών άλλων
καθώς και με τον τρόπο αυτό του οπτικοποίηση εδώ
ότι θα μας εισαγάγει στο ένας αριθμός αλγορίθμων.
Ας πάμε μπροστά και να συγχαρώ συμμετεχόντων μας εδώ, όλοι εκ των οποίων
κατατάσσονται οι ίδιοι πολύ καλά.
Αν θέλετε να πάρετε ένα αποχαιρετιστήριο δώρο.
Μπορείτε να κρατήσετε τους αριθμούς σας, καθώς και.
Και ό, τι θα δείτε, ή μάλλον ακούσει, τώρα,
είναι ότι βάζουμε ήχους σε κάθε μία από αυτές τις ράβδους
και το συνδέουν με το λογισμικό, διαφορετική συχνότητα του ήχου,
μπορείτε να τυλίξετε το μυαλό σας περισσότερο audioly γύρω από ό, τι το καθένα από αυτά τα πράγματα
μοιάζει.
Η πρώτη από τις οποίες είναι ένα είδος εισαγωγή
>> [ΤΟΝΟΥΣ]
>> Αυτό είναι bubble sort.
>> [ΤΟΝΟΥΣ]
>> Είδος επιλογής.
>> [ΤΟΝΟΥΣ]
>> Κάτι που ονομάζεται συγχώνευση ταξινόμησης.
>> [ΤΟΝΟΥΣ]
>> Gnome είδος.
>> [ΤΟΝΟΥΣ]
>> Αυτό είναι για το CS50.
Θα σας δούμε την Τετάρτη.
>> NARRATOR: Και τώρα, "Deep Σκέψεις, "από Daven Farnham.
Γιατί είναι ένα για βρόχο;
Γιατί να μην το κάνουμε καλύτερα;
Είχα κάνει ένα πέντε βρόχο.
>> [Γέλια]