1 00:00:00,000 --> 00:00:08,532 >> [GIOCO MUSICA] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: La prima cosa che si potrebbe avviso sul ritrovamento è che abbiamo già 3 00:00:12,060 --> 00:00:13,450 hanno il codice scritto per noi. 4 00:00:13,450 --> 00:00:15,160 Questo è chiamato codice di distribuzione. 5 00:00:15,160 --> 00:00:18,000 Quindi non stiamo solo scrivendo il nostro codice da zero più. 6 00:00:18,000 --> 00:00:22,800 Piuttosto, stiamo riempiendo i vuoti in qualche codice preesistente. 7 00:00:22,800 --> 00:00:27,790 >> Il programma find.c richiede numeri per riempire il pagliaio, cerca l' 8 00:00:27,790 --> 00:00:32,189 mucchio di fieno per un ago inseriti dall'utente, e lo fa chiamando ordinamento e 9 00:00:32,189 --> 00:00:35,590 ricerca, funzioni definite in helpers.c. 10 00:00:35,590 --> 00:00:37,670 Così find.c è scritto già. 11 00:00:37,670 --> 00:00:40,770 Il vostro compito è quello di scrivere aiutanti. 12 00:00:40,770 --> 00:00:41,870 >> Allora, cosa stiamo facendo? 13 00:00:41,870 --> 00:00:44,210 Stiamo implementando due funzioni. 14 00:00:44,210 --> 00:00:49,030 Ricerca, che restituisce true se un valore si trova nel pagliaio, di ritorno 15 00:00:49,030 --> 00:00:51,370 false se il valore è non nel pagliaio. 16 00:00:51,370 --> 00:00:57,990 E poi stiamo applicando anche sort che ordina l'array chiamato valori. 17 00:00:57,990 --> 00:00:59,960 >> Quindi cerchiamo di affrontare la ricerca. 18 00:00:59,960 --> 00:01:04,560 Ricerca è implementata come ricerca lineare, ma si può fare molto 19 00:01:04,560 --> 00:01:05,550 meglio. 20 00:01:05,550 --> 00:01:09,910 Ricerca lineare è implementato in O del tempo n, che è abbastanza lento. 21 00:01:09,910 --> 00:01:13,850 Anche se si può verificare qualsiasi elenco attribuitogli. 22 00:01:13,850 --> 00:01:20,130 Il vostro compito è quello di implementare la ricerca binaria, che ha tempo di esecuzione O di log n. 23 00:01:20,130 --> 00:01:21,130 Questo è abbastanza veloce. 24 00:01:21,130 --> 00:01:23,170 >> Ma c'è una clausola. 25 00:01:23,170 --> 00:01:27,600 La ricerca binaria può cercare solo attraverso liste pre-ordinati. 26 00:01:27,600 --> 00:01:30,370 Perché è così? 27 00:01:30,370 --> 00:01:32,620 >> Beh, diamo un'occhiata a un esempio. 28 00:01:32,620 --> 00:01:36,280 Dato un array di valori, pagliaio, stiamo andando a guardare 29 00:01:36,280 --> 00:01:37,130 un ago. 30 00:01:37,130 --> 00:01:40,460 E in questo esempio, il numero intero tre. 31 00:01:40,460 --> 00:01:44,130 Il modo in cui ricerca binaria funziona è che confrontiamo il valore medio di 32 00:01:44,130 --> 00:01:48,370 la matrice all'ago, molto simile a come abbiamo aperto una rubrica a metà 33 00:01:48,370 --> 00:01:50,660 la pagina in settimana zero. 34 00:01:50,660 --> 00:01:54,650 >> Così, dopo aver confrontato il valore medio di l'ago, si può scartare sia l' 35 00:01:54,650 --> 00:01:58,530 sinistra oa destra della matrice stringendo i vostri limiti. 36 00:01:58,530 --> 00:02:03,390 In questo caso, dato che tre, la nostra ago, è inferiore a 10, il valore medio, la 37 00:02:03,390 --> 00:02:05,990 proprio limite può diminuire. 38 00:02:05,990 --> 00:02:08,400 Ma cercare di rendere i vostri limiti il più stretto possibile. 39 00:02:08,400 --> 00:02:11,630 Se il valore medio non è l'ago, poi si sa che non c'è bisogno di 40 00:02:11,630 --> 00:02:13,010 includere nella ricerca. 41 00:02:13,010 --> 00:02:17,310 Quindi hai ragione limite può stringere la limiti della ricerca in un pochino di più, 42 00:02:17,310 --> 00:02:21,770 e così via e così via fino a trovare l'ago. 43 00:02:21,770 --> 00:02:23,480 >> Così che cosa il pseudocodice assomiglia? 44 00:02:23,480 --> 00:02:28,420 Beh, mentre ci stiamo ancora guardando attraverso la lista e avere ancora elementi per 45 00:02:28,420 --> 00:02:33,690 guardare in, prendiamo la metà della lista, e confrontare tale valore medio per 46 00:02:33,690 --> 00:02:34,950 il nostro ago. 47 00:02:34,950 --> 00:02:37,310 Se sono uguali, allora significa che abbiamo trovato l'ago e possiamo 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Altrimenti, se l'ago è inferiore il valore medio, allora questo significa che 50 00:02:42,870 --> 00:02:47,280 può scartare la metà destra, e solo verificare il lato sinistro della matrice. 51 00:02:47,280 --> 00:02:51,090 In caso contrario, ci cerchiamo l' lato destro della matrice. 52 00:02:51,090 --> 00:02:54,410 E alla fine, se non si dispone di alcun più elementi lasciati a cercare, ma voi 53 00:02:54,410 --> 00:02:58,050 Non hai ancora trovato l'ago, poi si return false perché l'ago 54 00:02:58,050 --> 00:03:01,890 sicuramente non è nel pagliaio. 55 00:03:01,890 --> 00:03:05,270 >> Ora, una cosa semplice di questo pseudocodice in ricerca binaria è che può essere 56 00:03:05,270 --> 00:03:09,940 interpretata sia come iterativo o implementazione ricorsiva. 57 00:03:09,940 --> 00:03:13,810 Quindi sarebbe ricorsiva se si chiama la funzione di ricerca all'interno della ricerca 58 00:03:13,810 --> 00:03:17,350 funzionamento su entrambi metà dell'array. 59 00:03:17,350 --> 00:03:21,030 Parleremo ricorsione un po 'più avanti nel Naturalmente, ma non sanno che è un 60 00:03:21,030 --> 00:03:24,190 opzione se vuoi provare. 61 00:03:24,190 --> 00:03:26,030 >> Ora diamo un'occhiata alle liste. 62 00:03:26,030 --> 00:03:30,750 Ordina prende un array e il numero intero n, che è la dimensione della matrice. 63 00:03:30,750 --> 00:03:34,030 Ora ci sono diversi tipi di sorta, e si può guardare ad un certo 64 00:03:34,030 --> 00:03:36,370 pantaloncini per dimostrazioni e spiegazioni. 65 00:03:36,370 --> 00:03:39,580 Il tipo di ritorno per la nostra funzione di ordinamento è nullo. 66 00:03:39,580 --> 00:03:43,580 Quindi questo significa che non stiamo andando di restituire qualsiasi matrice da ordinamento. 67 00:03:43,580 --> 00:03:48,140 Stiamo davvero andando a cambiare molto matrice che è stata approvata in noi. 68 00:03:48,140 --> 00:03:52,290 >> E questo è possibile perché gli array sono passati per riferimento in C. Ora faremo 69 00:03:52,290 --> 00:03:55,290 vedere di più su questo più tardi, ma il differenza essenziale tra di passaggio 70 00:03:55,290 --> 00:03:59,340 in qualcosa come un intero e di passaggio in una matrice, è che quando si 71 00:03:59,340 --> 00:04:03,490 passare in un numero intero, C è solo andare a fare una copia di tale numero intero e passare 72 00:04:03,490 --> 00:04:04,450 alla funzione. 73 00:04:04,450 --> 00:04:08,530 Non verrà modificata la variabile originale una volta che la funzione è terminata. 74 00:04:08,530 --> 00:04:12,480 Con una matrice, d'altra parte, è non andare a fare una copia, e sarete 75 00:04:12,480 --> 00:04:17,910 effettivamente modificando il molto matrice stessa. 76 00:04:17,910 --> 00:04:21,269 >> Così un tipo di ordinamento è il tipo di selezione. 77 00:04:21,269 --> 00:04:24,750 L'ordinamento per selezione funziona a partire da l'inizio, e poi si scorre 78 00:04:24,750 --> 00:04:26,820 sopra e trovare il più piccolo elemento. 79 00:04:26,820 --> 00:04:30,710 E poi si scambiano che più piccolo elemento con il primo. 80 00:04:30,710 --> 00:04:34,360 E poi si passa al secondo elemento , Trovare il prossimo più piccolo 81 00:04:34,360 --> 00:04:38,320 elemento, e poi scambiare che con la secondo elemento dell'array perché 82 00:04:38,320 --> 00:04:41,100 il primo elemento è già ordinato. 83 00:04:41,100 --> 00:04:45,370 E così poi si continua per ogni elemento per identificare il più piccolo 84 00:04:45,370 --> 00:04:47,690 valore e scambiando fuori. 85 00:04:47,690 --> 00:04:53,460 >> Per I è uguale a 0, il primo elemento per n meno 1, si sta andando a confrontare 86 00:04:53,460 --> 00:04:57,820 ogni valore prossimo dopo che e trovare l'indice del valore minimo. 87 00:04:57,820 --> 00:05:02,520 Una volta trovato l'indice di valore minimo, si può scambiare quel valore di matrice 88 00:05:02,520 --> 00:05:05,930 minimo e la matrice I. 89 00:05:05,930 --> 00:05:09,760 >> Un altro tipo di genere che si può attuare è bubble sort. 90 00:05:09,760 --> 00:05:14,380 Così bubble sort itera l'elenco confrontando elementi adiacenti e 91 00:05:14,380 --> 00:05:17,720 scambiando gli elementi che sono nell'ordine sbagliato. 92 00:05:17,720 --> 00:05:22,380 E questo modo, l'elemento più grande sarà bolla fino alla fine. 93 00:05:22,380 --> 00:05:28,070 E la lista è ordinata una volta non è più elementi sono stati scambiati. 94 00:05:28,070 --> 00:05:31,920 >> Quindi questi sono due esempi di specie algoritmi che si possono attuare per 95 00:05:31,920 --> 00:05:33,230 il programma find. 96 00:05:33,230 --> 00:05:37,350 Una volta terminata ordinamento, e hai fatta di ricerca, sei finito. 97 00:05:37,350 --> 00:05:39,720 Il mio nome è Zamyla, e questo è CS50. 98 00:05:39,720 --> 00:05:46,987 >> [GIOCO MUSICA]