1 00:00:00,000 --> 00:00:08,532 >> [Παίζει μουσική] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Το πρώτο πράγμα που θα μπορούσε Προκήρυξη για εύρημα είναι ότι έχουμε ήδη 3 00:00:12,060 --> 00:00:13,450 Οι κώδικα γραμμένο για μας. 4 00:00:13,450 --> 00:00:15,160 Αυτό ονομάζεται κώδικας διανομής. 5 00:00:15,160 --> 00:00:18,000 Έτσι, δεν είμαστε απλά γράφοντας τη δική μας κωδικοποίηση από το μηδέν πια. 6 00:00:18,000 --> 00:00:22,800 Αντίθετα, είμαστε συμπληρώνοντας τα κενά σε κάποια προ-υπάρχοντα κώδικα. 7 00:00:22,800 --> 00:00:27,790 >> Το πρόγραμμα ΡΓΝϋ.Ο ζητά για τους αριθμούς να γεμίσει το άχυρα, αναζητά η 8 00:00:27,790 --> 00:00:32,189 άχυρα για μια βελόνα χρήστης υπέβαλε, και το κάνει αυτό με την κλήση του είδους και 9 00:00:32,189 --> 00:00:35,590 αναζήτησης, τα καθήκοντα που ορίζονται σε helpers.c. 10 00:00:35,590 --> 00:00:37,670 Έτσι ΡΓΝϋ.Ο είναι γραμμένο ήδη. 11 00:00:37,670 --> 00:00:40,770 Η δουλειά σας είναι να γράψετε βοηθοί. 12 00:00:40,770 --> 00:00:41,870 >> Οπότε τι κάνουμε; 13 00:00:41,870 --> 00:00:44,210 Είμαστε εφαρμογής δύο λειτουργίες. 14 00:00:44,210 --> 00:00:49,030 Αναζήτηση, η οποία επιστρέφει true αν η τιμή βρίσκεται στα άχυρα, επιστρέφοντας 15 00:00:49,030 --> 00:00:51,370 false αν η τιμή είναι όχι στα άχυρα. 16 00:00:51,370 --> 00:00:57,990 Και τότε είμαστε, επίσης, την εφαρμογή της ταξινόμησης το οποίο ταξινομεί τον πίνακα που ονομάζεται αξίες. 17 00:00:57,990 --> 00:00:59,960 >> Έτσι, ας αντιμετωπίσουμε την αναζήτηση. 18 00:00:59,960 --> 00:01:04,560 Αναζήτηση εφαρμόζεται σήμερα ως γραμμική αναζήτηση, αλλά μπορείτε να το κάνετε πολύ 19 00:01:04,560 --> 00:01:05,550 καλύτερο από αυτό. 20 00:01:05,550 --> 00:01:09,910 Γραμμική αναζήτηση υλοποιείται σε O χρόνο n, η οποία είναι πολύ αργή. 21 00:01:09,910 --> 00:01:13,850 Αν και, να αναζητήσετε οποιαδήποτε λίστα που του έχουν ανατεθεί. 22 00:01:13,850 --> 00:01:20,130 Η δουλειά σου είναι να εφαρμόσει δυαδική αναζήτηση, που έχει τρέξει χρόνο O του log n. 23 00:01:20,130 --> 00:01:21,130 Αυτό είναι αρκετά γρήγορα. 24 00:01:21,130 --> 00:01:23,170 >> Αλλά υπάρχει ένας όρος. 25 00:01:23,170 --> 00:01:27,600 Δυαδική αναζήτηση μπορεί μόνο αναζήτηση μέσω προ-ταξινομημένο καταλόγους. 26 00:01:27,600 --> 00:01:30,370 Γιατί συμβαίνει αυτό; 27 00:01:30,370 --> 00:01:32,620 >> Λοιπόν ας δούμε ένα παράδειγμα. 28 00:01:32,620 --> 00:01:36,280 Λαμβάνοντας υπόψη μια σειρά τιμών, το άχυρα, θα πάμε να ψάχνει 29 00:01:36,280 --> 00:01:37,130 για μια βελόνα. 30 00:01:37,130 --> 00:01:40,460 Και σε αυτό το παράδειγμα, ο ακέραιος τρία. 31 00:01:40,460 --> 00:01:44,130 Ο τρόπος που λειτουργεί δυαδική αναζήτηση είναι ότι συγκρίνουμε την μέση τιμή του 32 00:01:44,130 --> 00:01:48,370 η σειρά με τη βελόνα, σαν τρόπο ανοίξαμε ένα τηλεφωνικό κατάλογο στη μέση 33 00:01:48,370 --> 00:01:50,660 Σελίδα εβδομάδα μηδέν. 34 00:01:50,660 --> 00:01:54,650 >> Έτσι, μετά τη σύγκριση της μέσης τιμής για την η βελόνα, μπορείτε να απορρίψετε είτε το 35 00:01:54,650 --> 00:01:58,530 αριστερό ή το δεξί ήμισυ της συστοιχίας σφίγγοντας τα όρια σας. 36 00:01:58,530 --> 00:02:03,390 Σε αυτή την περίπτωση, δεδομένου ότι τα τρία, βελόνα μας, είναι μικρότερο από 10, η μεσαία τιμή, το 37 00:02:03,390 --> 00:02:05,990 σωστά συνδεδεμένο μπορεί να μειωθεί. 38 00:02:05,990 --> 00:02:08,400 Αλλά προσπαθήστε να κάνετε όρια σας τόσο σφιχτό όσο το δυνατόν περισσότερο. 39 00:02:08,400 --> 00:02:11,630 Εάν η μέση τιμή δεν είναι η βελόνα, τότε ξέρεις ότι δεν χρειάζεται να 40 00:02:11,630 --> 00:02:13,010 συμπεριλάβετε στην αναζήτησή σας. 41 00:02:13,010 --> 00:02:17,310 Έτσι, έχεις δίκιο δεσμεύεται να σφίξετε το αναζήτηση όρια ακριβώς ένα μικροσκοπικό λίγο περισσότερο, 42 00:02:17,310 --> 00:02:21,770 και ούτω καθεξής και ούτω καθεξής έως ότου μπορείτε να βρείτε βελόνα σας. 43 00:02:21,770 --> 00:02:23,480 >> Τι κάνει λοιπόν η pseudocode μοιάζει; 44 00:02:23,480 --> 00:02:28,420 Καλά, ενώ είμαστε ακόμα ψάχνει μέσα ο κατάλογος και εξακολουθούν να έχουν στοιχεία για να 45 00:02:28,420 --> 00:02:33,690 ματιά σε, παίρνουμε τη μέση της λίστας, και η σύγκριση με μέση αξία για 46 00:02:33,690 --> 00:02:34,950 βελόνα μας. 47 00:02:34,950 --> 00:02:37,310 Αν είναι ίσες, τότε αυτό σημαίνει ότι έχουμε βρήκε τη βελόνα και μπορούμε 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Διαφορετικά, αν η βελόνα είναι μικρότερη η μέση τιμή, τότε αυτό σημαίνει ότι 50 00:02:42,870 --> 00:02:47,280 μπορεί να απορρίψει το δεξί μισό, και μόλις αναζήτηση στην αριστερή πλευρά της συστοιχίας. 51 00:02:47,280 --> 00:02:51,090 Διαφορετικά, θα αναζητήσετε το δεξιά πλευρά της συστοιχίας. 52 00:02:51,090 --> 00:02:54,410 Και στο τέλος, αν δεν έχετε καμία περισσότερα στοιχεία αριστερά προς αναζήτηση, αλλά σας 53 00:02:54,410 --> 00:02:58,050 δεν έχουν βρει ακόμα τη βελόνα σας, τότε θα return false επειδή η βελόνα 54 00:02:58,050 --> 00:03:01,890 σίγουρα δεν είναι στα άχυρα. 55 00:03:01,890 --> 00:03:05,270 >> Τώρα, ένα τακτοποιημένο πράγμα για αυτό το ψευδοκώδικα σε δυαδική αναζήτηση είναι ότι μπορεί να είναι 56 00:03:05,270 --> 00:03:09,940 ερμηνεύεται είτε ως μια επαναληπτική ή αναδρομική εφαρμογή. 57 00:03:09,940 --> 00:03:13,810 Έτσι, θα ήταν αναδρομικό αν ονομάζεται η λειτουργία αναζήτησης στο πλαίσιο αναζήτησης 58 00:03:13,810 --> 00:03:17,350 λειτουργεί σε δύο ήμισυ της συστοιχίας. 59 00:03:17,350 --> 00:03:21,030 Θα καλύψουμε αναδρομή λίγο αργότερα στο Φυσικά, αλλά ξέρω ότι είναι μια 60 00:03:21,030 --> 00:03:24,190 επιλογή, αν θέλετε να δοκιμάσετε. 61 00:03:24,190 --> 00:03:26,030 >> Τώρα, ας ρίξουμε μια ματιά σε είδος. 62 00:03:26,030 --> 00:03:30,750 Ταξινόμηση παίρνει μια σειρά και τον ακέραιο n, το οποίο είναι το μέγεθος του πίνακα. 63 00:03:30,750 --> 00:03:34,030 Τώρα υπάρχουν διάφοροι διαφορετικοί τύποι του είδους, και μπορείτε να δείτε μερικά 64 00:03:34,030 --> 00:03:36,370 σορτς για demos και εξηγήσεις. 65 00:03:36,370 --> 00:03:39,580 Ο τύπος επιστροφής για μας λειτουργία ταξινόμησης είναι άκυρη. 66 00:03:39,580 --> 00:03:43,580 Έτσι, αυτό σημαίνει ότι δεν πρόκειται να επιστρέψει κάθε πίνακα από το είδος. 67 00:03:43,580 --> 00:03:48,140 Είμαστε πραγματικά πρόκειται να αλλάξει την ίδια πίνακα που ψηφίστηκε μέσα μας. 68 00:03:48,140 --> 00:03:52,290 >> Και αυτό είναι δυνατό, επειδή συστοιχίες είναι πέρασε από την αναφορά στο C. Τώρα θα 69 00:03:52,290 --> 00:03:55,290 δείτε περισσότερα για αυτό αργότερα, αλλά η ουσιώδης διαφορά μεταξύ διερχομένων 70 00:03:55,290 --> 00:03:59,340 σε κάτι σαν ένα ακέραιο και τη μετάθεση σε μια σειρά, είναι ότι όταν 71 00:03:59,340 --> 00:04:03,490 να περάσει σε έναν ακέραιο αριθμό, C είναι ακριβώς πρόκειται να δημιουργήσετε ένα αντίγραφο του εν λόγω ακέραιο και να περάσει 72 00:04:03,490 --> 00:04:04,450 αυτό με τη λειτουργία. 73 00:04:04,450 --> 00:04:08,530 Η αρχική μεταβλητή δεν θα αλλάξει Μόλις η λειτουργία έχει ολοκληρωθεί. 74 00:04:08,530 --> 00:04:12,480 Με μια σειρά, από την άλλη πλευρά, είναι δεν πρόκειται να κάνει ένα αντίγραφο, και θα 75 00:04:12,480 --> 00:04:17,910 πραγματικότητα να επεξεργάζεστε το η ίδια πολύ συστοιχία. 76 00:04:17,910 --> 00:04:21,269 >> Έτσι, ένας τύπος του είδους είναι το είδος επιλογής. 77 00:04:21,269 --> 00:04:24,750 Το είδος επιλογής λειτουργεί αρχίζοντας από το η αρχή, και στη συνέχεια να μετακινηθείτε 78 00:04:24,750 --> 00:04:26,820 πάνω και να βρει το μικρότερο στοιχείο. 79 00:04:26,820 --> 00:04:30,710 Και τότε θα ανταλλάξουν ότι μικρότερο στοιχείου με το πρώτο. 80 00:04:30,710 --> 00:04:34,360 Και στη συνέχεια θα προχωρήσουμε στο δεύτερο στοιχείο , Βρείτε το αμέσως μικρότερο 81 00:04:34,360 --> 00:04:38,320 στοιχείο και, στη συνέχεια ανταλλάξουν ότι με την δεύτερο στοιχείο της συστοιχίας, επειδή 82 00:04:38,320 --> 00:04:41,100 το πρώτο στοιχείο είναι ήδη ταξινομημένο. 83 00:04:41,100 --> 00:04:45,370 Και ναι τότε θα συνεχιστεί για κάθε στοιχείο για τον προσδιορισμό το μικρότερο 84 00:04:45,370 --> 00:04:47,690 αξία και την εναλλαγή έξω. 85 00:04:47,690 --> 00:04:53,460 >> Για το Ι ισούται με 0, το πρώτο στοιχείο με n μείον 1, θα πάμε να συγκρίνετε 86 00:04:53,460 --> 00:04:57,820 κάθε επόμενη τιμή μετά από αυτό και να βρει ο δείκτης της ελάχιστης τιμής. 87 00:04:57,820 --> 00:05:02,520 Μόλις βρείτε την ελάχιστη τιμή του δείκτη, μπορείτε να ανταλλάξετε ότι η αξία του πίνακα 88 00:05:02,520 --> 00:05:05,930 ελάχιστο και σειρά Ι. 89 00:05:05,930 --> 00:05:09,760 >> Ένας άλλος τύπος του είδους που μπορείτε να εφαρμογή είναι bubble sort. 90 00:05:09,760 --> 00:05:14,380 Έτσι, επαναλαμβάνει bubble sort πάνω από τη λίστα συγκρίνοντας γειτονικά στοιχεία και 91 00:05:14,380 --> 00:05:17,720 εναλλαγή των στοιχείων που είναι σε λάθος σειρά. 92 00:05:17,720 --> 00:05:22,380 Και αυτό τον τρόπο, το μεγαλύτερο στοιχείο θα φούσκα μέχρι το τέλος. 93 00:05:22,380 --> 00:05:28,070 Και η λίστα είναι ταξινομημένη φορά όχι περισσότερο Όλα αυτά τα στοιχεία έχουν ανταλλαγεί. 94 00:05:28,070 --> 00:05:31,920 >> Έτσι, αυτές είναι δύο παραδείγματα της ταξινόμησης αλγόριθμους που μπορείτε να εφαρμόσετε για 95 00:05:31,920 --> 00:05:33,230 το πρόγραμμα find. 96 00:05:33,230 --> 00:05:37,350 Μόλις τελειώσετε το είδος, και έχετε γίνει αναζήτηση, έχετε τελειώσει. 97 00:05:37,350 --> 00:05:39,720 Το όνομά μου είναι Zamyla, και αυτό είναι CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Παίζει μουσική]