[Powered by Google Translate] [Artículo 3] [Menos Cómodo]
>> [Nate Hardison] [Harvard University]
>> [Esta es CS50.] [CS50.TV]
>> Muy bien, vamos a empezar.
Bienvenidos a la Semana 4 de CS50.
Si ustedes abren un navegador web y abrir pset 3,
Scramble con CS50, vamos a empezar a ir
a través de la sección de preguntas allí.
Al igual que la semana pasada, vamos a estar trabajando en CS50 Spaces,
si también va a tirar para arriba, así que,
y si sigues adelante y visite este enlace que tengo aquí en la parte superior.
Es hora de empezar.
Tenemos nuestro programa hi poco aquí. Nada loco.
Una de las primeras cosas que quiero hacer con ustedes hoy es repasar algunas soluciones
Set para el problema 1, el tipo de ejemplo soluciones,
sólo para que pueda tener una idea de qué tipo de personal está escribiendo código,
¿qué tipo de estudiantes están escribiendo otros códigos,
y hacer que usted tome una mirada en ella, porque sé que es raro
al momento de enviar la solución a un conjunto de problemas y obtener comentarios
en su propia versión, pero a veces es útil ver cómo otras personas lo hicieron,
especialmente los que están bien buscando.
En su mayor parte, yo estaba muy impresionado con las soluciones que ustedes producen.
Todavía no he empezado a buscar en sus 2s conjunto de problemas, pero si eres como la primera,
no significa nada más que cosas buenas.
>> Si nos fijamos en mis revisiones, vamos a empezar hasta el fondo en Revisión 1,
y vamos a echar un vistazo rápido a una solución de Mario.
Si usted tira de esto, los programas que vamos a presentar son los correctos.
No había problemas con la corrección de estos problemas, sino más bien,
queremos hablar un poco acerca de los problemas de diseño diferentes
que están siendo utilizadas aquí.
Una de las cosas que era interesante acerca de la solución
es que utiliza este nuevo constructo llamado libras definir,
a veces también se refiere como un hash definir.
Permítanme hacer un zoom sobre ella aquí.
A # define le permite dar nombre a estos números en su programa.
En este caso, la altura máxima de una pirámide en Mario
tenía 23 años y en lugar de poner 23 en mi código
nos referimos a que tan duro código 23 -
esto da lugar la MAX_HEIGHT nombre a ese número,
de modo que aquí en mi do-while
en realidad se puede hacer referencia a MAX_HEIGHT
en vez de poner el número 23 pulg
[Estudiante] ¿Cuál es la ventaja de hacer eso?
Esa es una gran pregunta.
Una de ellas es la lectura.
Una ventaja de utilizar este # define es la legibilidad.
Cuando estoy leyendo el código, puedo ver lo que está pasando.
>> Puedo ver en esta condición que aquí estamos probando
para la altura es <0, lo que podríamos haber definido también
ser de una altura mínima o una altura min.
La otra ventaja es que se puede leer el resto de la línea para ver
que también estamos comprobando para asegurarse de que la altura no es mayor que la altura máxima,
porque vamos a seguir mientras que la altura es mayor que la altura max.
La otra ventaja es, si puedo ampliar un poco aquí-
si ejecuto este programa y lo ejecuto, por ejemplo, con un 23 en este momento,
que muestra todos 23 filas así como así.
Pero decir que era hora de cambiar la altura máxima,
y ahora quiere limitar la altura máxima de las pirámides
ser sólo decir-man, que era moderno.
# Include, # define MAX_HEIGHT,
y digamos que quería ponerlo igual a 10.
Ahora, en este punto, todo lo que tenía que hacer era cambiarlo en esta ubicación.
Me puede volver a compilar el código, y ahora si que intento escribir en el 12,
va a preguntar otra vez.
En este caso, sólo estamos utilizando MAX_HEIGHT vez.
No es tan grande de una molestia de ir en
y cambiarlo en el bucle mientras que si es necesario.
Sin embargo, en los programas en los que está haciendo referencia el mismo número mágico
una y otra vez, este mecanismo es # define muy útil
porque usted acaba de cambiar una vez en la parte superior del archivo, es por lo general en el que los puso-
y el cambio se filtra por el resto del archivo.
>> Otras cosas que quería destacar en esta tarea que me pareció se veía muy bien,
uno fue el nombramiento de las variables.
Aquí se puede apreciar que tenemos las variables enteras llamadas fila y se llama altura.
Espacios, hashes, ayuda a hacer que el código un poco más legible,
hace que sea un poco más comprensible lo que realmente está pasando.
Esto está en contraste con el uso, por ejemplo, letras al azar
o simplemente gobbledygook completo.
Una última cosa voy a señalar es que en los bucles for,
a menudo estas variables iterador, esos contadores que se utilizan en su bucles for,
es estándar y convencional para empezar con i y j y k
Y pasando de allí si necesitas más variables,
y esto es sólo una convención.
Hay un montón de convenciones.
Depende del lenguaje de programación que está utilizando.
Pero en C, por lo general comienzan con i.
No tiene sentido utilizar, por ejemplo, A o B
dependiendo de la situación.
Eso es todo por esta.
Si ahora levantar Revisión 2, verá otro Mario,
y este es similar a la de otro tipo que acabamos de ver,
pero sí algo un poco fría.
Si nos fijamos en esta sección aquí en el interior del interior de bucle,
que están utilizando una sintaxis loco buscando aquí justo en esta línea.
Esto se llama un operador ternario.
Es una sentencia if else condensada en una sola línea.
La condición es esta parte dentro de paréntesis.
Es equivalente a decir si j <altura - i - 1.
Y a continuación, lo que el contenido de ese bloque si serían son el espacio
y entonces el contenido de lo que el otro sería este son #.
Básicamente se trata de la asignación de un espacio para esta variable.
Es poner un espacio en el contenido de la variable de bloque,
si se cumple esta condición, y si la condición no se cumple,
entonces la variable de bloque recibe este #.
Y luego, por supuesto, en lugar de construir una cadena completa
y la impresión de que todo al final esta solución se imprime un carácter a la vez.
Pretty cool.
>> Otro par de cosas para ver. Vamos a pasar a codiciosos.
Ahora bien, si nos fijamos en codiciosos, esta primera solución
las utiliza # define bastante.
Tenemos una constante definida para cada uno de los diferentes números en este programa.
Tenemos uno para centavos por dólar, una para cuartos, diez, cinco y un centavo,
y ahora si desplácese hacia abajo y leer el código,
podemos ver un patrón do-while imprimir todo lazo fuera.
Un poco el quid de este problema fue dando cuenta de que
usted necesita para convertir el flotador que se lee en parte del usuario a un entero
de hacer con precisión las matemáticas, y esto se debe a que
con números de punto flotante, como hablamos en clase brevemente,
que no es posible representar con precisión cada valor único en la recta numérica
porque hay infinitos valores entre 3 y, por ejemplo, 3,1, incluso.
Usted puede tener 3,01 y 3,001 y 3,0001, y usted puede seguir adelante.
Resulta que cuando se trabaja con dinero, a menudo se desea convertir
en formato entero de modo que usted no está perdiendo centavos y ese tipo de cosas.
Hacer eso y el redondeo fue clave.
Esta solución utiliza un perfectamente sencillo, el algoritmo de gran
que disminuye el número de centavos restantes, primero por trimestres,
luego por monedas de diez centavos, y luego por monedas de cinco centavos, y luego por unos centavos,
y aumentando el número de monedas de cada vez.
>> Otra solución que vamos a ver, ya que el zoom e ir a la revisión 4,
tuvo un comienzo muy similar, pero en lugar utilizar div y mod
por aquí para calcular el número de centavos.
Esto, el número de cuartos es igual al número de centavos dividido por 25,
y la razón por la que esto funciona es porque estamos haciendo la división entera,
por lo que es desechar el resto.
[Estudiante] ¿Tenemos que comentar la búsqueda?
Realmente depende.
[Estudiante] Estás comentando más código aquí.
Sí, y lo que hay un montón de diferentes filosofías sobre esto.
Mi filosofía personal es que su código es realmente la verdad,
al igual que el código es lo que realmente está ejecutando en el equipo,
por lo que el código debe ser lo más legible posible para no necesitar tantos comentarios.
Dicho esto, cuando usted está haciendo las cosas que son un poco complicado matemáticamente
o algorítmica, es bueno para los comentarios, para que pueda
añadir una dimensión extra, una capa extra a quien está leyendo su código.
En estas soluciones, a menudo se comentan en mayor medida porque
queremos ser capaces de distribuir y que la gente los recoja
y leerlos con bastante facilidad.
Pero definitivamente, estoy de acuerdo que este es pesado.
[Estudiante] Sin embargo, en caso de duda, ir más pesado?
En caso de duda, ir más pesada.
Algunas veces la gente va a decir 0 retorno o algo por el estilo.
Creo que es un comentario ridículo.
Está claro que es lo que está sucediendo.
No necesito Inglés para decirme eso.
A veces la gente escribe cosas como "kthxbai!"
Eso es algo lindo, pero también-no
que no hace la diferencia entre los puntos que comentan o no.
Ese tipo de comentarios son sólo ja, ja.
Cool.
>> En este punto, vamos a empezar a trabajar en el problema 3 sección de preguntas.
Si ustedes sacar esto de nuevo,
al igual que con la semana pasada, no vamos a ver los cortos en esta sección.
Vamos a dejar que ustedes hacen eso en su propio tiempo y hablar de las preguntas.
Pero ahora, en esta sección vamos a pasar un poco más
hablando de menos de los fundamentos de codificación
como lo hicimos la semana pasada, y en su lugar, vamos a centrarnos más en
un poco más de la teoría, así que hablar de búsqueda binaria y ordenación.
Desde aquellos de ustedes que han estado siguiendo a lo largo de la conferencia,
¿Puede alguien darme un resumen de lo que la diferencia es
entre búsqueda y búsqueda binaria lineal?
¿Qué está pasando? Claro.
Búsquedas lineales búsqueda a través de todos los elementos de la lista ordenada
una por una por una por una por una,
y búsqueda binaria divide la lista en dos grupos,
Comprueba si el valor de teclas que se está buscando es mayor o menor que el valor del punto medio
que usted acaba de encontrar, y si es menor, se va con la lista inferior
y luego se divide de nuevo, hace la misma función
todo el camino hacia abajo hasta que encuentra el punto medio a ser igual al valor en sí.
Derecha.
>> ¿Por qué nos importa?
¿Por qué hablamos de búsqueda binaria frente a la búsqueda lineal?
Si.
El binario es mucho más rápido, por lo que si se duplica el tamaño del problema
da un paso más y no el doble.
Exactamente.
Esa es una gran respuesta.
La búsqueda lineal está muy comprobación de un elemento a la vez,
y como vimos en el primer día de la conferencia
cuando David fue a través de su ejemplo guía telefónica
y arrancó una página del libro de teléfono a la vez
y seguí haciendo eso una y otra y otra vez,
se lo va a tomar un tiempo muy largo para encontrar a alguien en la guía telefónica,
a menos que, por supuesto, él estaba buscando a alguien en el principio del alfabeto.
Con la búsqueda binaria, puede ir mucho más rápido,
y no es sólo el doble de rápido o 3 veces más rápido o 4 veces más rápido.
Pero el problema se hace más pequeña y más pequeña mucho más rápido.
Para ilustrar esto, vamos a empezar a hablar de lo que está pasando
cuando escribimos búsqueda binaria.
El problema en cuestión es que si yo tengo una matriz de números,
decir, 1, 2, 3, 5, 7, 23, 45, 78, 12323,
y 9 con un montón de 0s después de ella,
queremos ser capaces de averiguar lo que es realmente rápido en
este conjunto de números.
Sé que esto parece un poco tonto y artificial un poco,
porque ahora mismo es.
Tenemos un conjunto que no tiene elementos muy diversos en el mismo,
y si le pregunto a uno de ustedes para saber si es o no
23 está en la matriz, se puede hacer eso con bastante rapidez
con sólo echar un vistazo a esto y decirme sí o no.
El análogo a considerar es imaginar si este fuera, digamos,
una hoja de cálculo de Excel con 10.000 filas, 20.000 filas.
Por supuesto, usted puede hacer el comando o el F F control y buscar algo.
También puede utilizar los filtros y el material de búsqueda,
pero si tuviera que mirar a través de ese archivo línea por línea por línea,
que le tomaría mucho tiempo para encontrarlo.
Es un poco como en el ejemplo de agenda, también, donde
nadie mira a través de una página de un libro de teléfono a la vez.
Típicamente, la abra a la mitad,
o en el caso de un lote de libros y diccionarios de teléfono donde
en realidad se han introducido en la primera letra,
le da la vuelta a la primera carta y abrir y empezar a ir por allí.
>> Recordar de su nombre otra vez. >> Sam.
Sam.
Al igual que Sam dijo que el proceso de búsqueda lineal que va a ser muy lento,
y en su lugar con la búsqueda binaria, la forma en que esto funciona es que
cada vez que vamos a través de una iteración de nuestro algoritmo de búsqueda,
vamos a dividir la lista en dos, esencialmente,
en dos listas más pequeñas.
Y luego, en la siguiente iteración del bucle, lo vamos a dividir de nuevo
en otras listas más pequeñas.
Como se puede ver, el problema se hace cada vez más pequeño y más pequeño
porque guardamos medio descarte de la lista cada vez.
¿Cómo funciona esto de descarte?
Así como un recordatorio, lo que vamos a hacer si nos quedamos un ordenador
y estábamos, por ejemplo, la búsqueda para el número 5 en la lista
es que se escoge un número en el centro.
En el medio de esta lista, ya que hay 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 números,
nos gustaría escoger el número, ya sea en la posición 4 o en la 5 ª posición,
y que lo llamaría el medio de nuestra lista.
Elija el número en medio.
Entonces, al igual que Sam dijo, vamos a probar para ver si ese número es igual
al número que queremos conseguir o nuestro número deseado.
Si es igual, entonces lo hemos encontrado. Nosotros ganamos.
Si no es igual, entonces hay un par de casos.
Los dos casos son ya sea el número ha de ser mayor que el número que está mirando,
o es menor que.
Si es mayor, nos movemos hacia la derecha.
Y si es menos, nos movemos hacia la izquierda.
Y luego repetir el proceso de nuevo
ya sea en la mitad derecha o la mitad izquierda de la lista.
>> El primer problema en la sección de hoy es averiguar
la forma en que puede comenzar a expresar esto en código C.
Tenemos el pseudocódigo aquí.
Lo que vamos a empezar a hacer es que me voy a levantar un nuevo espacio,
guardar esta revisión para que tengamos estas notas para más adelante,
vamos a borrar todo esto, y luego copiar y pegar desde el conjunto de problemas
esta información en nuestros espacios, y espero que esto no se rompe.
Perfecto.
Si ustedes todo eso, copiar y pegar este código en el nuevo espacio,
en uno en blanco.
Vamos a tratar de Daniel. Si compila y ejecuta este programa, ¿funciona?
>> No. ¿Qué está diciendo?
Dice el control llega al final de la no función void.
Sí, así que voy a tratar de ejecutarlo.
¿Han visto esto antes? ¿Sabe usted lo que esto significa?
Bueno, vamos a analizar esto un poco.
Es como decir a file.c en la línea 9, columna 1 tenemos un error, como usted ha dicho,
y se dice que está derivada de la advertencia de error y la advertencia de tipo de retorno.
Parece que algo está pasando con el tipo de cambio, lo cual tiene sentido.
Tenemos una función no nula, lo que significa que tenemos una función
que no volverá vacía.
Una función de vacío es el que se parece a esto:
void foo (), y es nulo porque el tipo de retorno es nulo,
lo que significa que si tuviéramos algo aquí
como return 1, obtendríamos un error del compilador para esto.
Sin embargo, tenemos una función no nula.
Nuestra función no nula en este caso es nuestra función de búsqueda
porque tiene un tipo de retorno de bool.
Cuando se dice que el control llega al final de una función no nula,
es porque la búsqueda no tiene una sentencia return.
No está volviendo algo de tipo bool.
>> Podemos arreglar eso, y lo que creo que ustedes
búsqueda debe devolver por defecto?
¿Cuál debe ser el valor de retorno por defecto de la búsqueda?
Porque eso es lo que podemos hacer al final.
Charlotte, ¿tiene usted alguna-?
¿Verdadero o falso? >> Verdadero o falso.
¿Cuál?
Falso. No se.
Falso? Vamos a intentarlo.
¿Por qué dices return false? Eso es una gran intuición.
[Charlotte] No lo sé.
Vamos a volver falsa en este caso, porque esta será nuestra forma predeterminada
Si por alguna razón la lista está vacía o la aguja
que estamos buscando no existe.
Luego, al final, si no devolver true anteriormente en esta función,
siempre sabemos que esta función va a decir No, no está en la matriz.
No está en el pajar.
Ahora bien, si compilarlo y ejecutarlo, me deja guardar esto para que podamos tirar de él hacia arriba.
Ahora bien, si compilar y ejecutar nuestro programa, que se basa.
Conseguimos nuestro sistema poco.
Si lo golpeo 4-uh-oh.
No imprima nada. Parece que todo terminó bien.
Tenemos que llenar este pulg
Hablamos sobre el algoritmo en pseudocódigo un poco atrás.
Vamos a ver, salvo esto,
y voy a tirar de ese algoritmo de nuevo.
Vamos a golpear a este tipo. Nope.
Ahí está.
¿Cómo podemos hacer esto?
¿Cuál sería una buena estrategia para iniciar la marcha este código?
Tienes que escoger un número en el centro.
¿Cómo escoger un número en el medio de una matriz?
¿Alguna sugerencia?
[Estudiante] Strlen dividido por 2.
Strlen dividido por 2. Eso es un gran uno.
Strlen trabaja con tipos especiales de matrices.
¿Qué tipo de arreglos?
Arreglos de cuerdas, conjuntos de caracteres.
Es el mismo tipo de concepto que queremos aplicar,
pero no podemos usar strlen porque no tenemos una gran variedad de personajes.
Tenemos una matriz de enteros.
Pero, ¿qué strlen conseguir para nosotros?
¿Sabe lo que le puede pasar a nosotros?
[Estudiante] Strlen nos lleva a la longitud.
Exactamente, nos lleva a la longitud.
Strlen obtiene la longitud de la matriz para nosotros.
>> ¿Cómo conseguimos que en nuestro programa de búsqueda binaria?
¿Cómo obtener la longitud de un array?
[Estudiante] Strlen?
Usted puede obtener la longitud de una matriz de cadenas con el formato correcto C strlen.
El problema, sin embargo, es que no tenemos una matriz de cadenas.
Si miramos hacia atrás en este código, tenemos esta matriz de enteros.
¿Cómo sabemos cuánto tiempo es?
[Estudiante] ¿Hay un equivalente de punto final, como l int o algo así?
Resulta que hay en realidad no lo es, y así, en cierto modo, es esta
una de esas cosas que es bueno saber acerca de C,
que no hay manera de obtener la longitud de una matriz
si todo lo que te dan es la matriz.
La razón de que funciona con cadenas, la razón strlen obras,
es porque si una cadena tiene el formato correcto,
que tendrá ese especial carácter \ 0 en el final.
>> También se puede imaginar si usted tiene una cadena con formato incorrecto
y no hay carácter \ 0 existe, entonces la cosa no funciona.
[Estudiante] ¿Se puede añadir el \ 0?
Podríamos en este caso.
Podríamos añadir algún tipo de \ 0
o algún tipo de significar personaje y luego utilizar eso.
Pero eso no va a funcionar bastante
porque el 0 \ es para un tipo char,
y aquí tenemos ints.
La otra cosa es que si tuviéramos que utilizar un valor especial
como -1 para marcar el final de una matriz
entonces nunca podría almacenar un -1 en nuestros arrays enteros.
Estaríamos atrapados.
Resulta que la única manera de conseguir la longitud
de una matriz en C es en realidad lo recuerdo
cuando lo creó y luego pasar por ahí con la matriz
de modo que cada vez que tengo una función que va a realizar algún trabajo
en una matriz de enteros o flotadores o dobles, o lo que sea,
También tengo que dar la función de la longitud de la matriz,
y eso es exactamente lo que hemos hecho aquí en la función de búsqueda.
Si nos fijamos, lo que hemos hecho cuando pasamos en nuestra amplia aquí,
también pasamos en la longitud, el tamaño.
Lo que ocurre es que hemos llamado aquí esta variable,
este parámetro o argumento.
Esto se conoce como lista de argumentos de una función o una lista de parámetros,
y éstos también se llaman argumentos o parámetros.
La gente utiliza términos diferentes en momentos diferentes.
Yo a veces me intercambiarlos.
Lo que pasa es que esta variable aquí es un nombre similar
a este # define aquí.
Pero no son la misma cosa.
La capitalización es importante.
>> Si nos fijamos en lo que sucede aquí, declaramos
nuestra matriz int, que hemos llamado números.
Lo hemos dado nuestro tamaño, lo que corresponde a nuestro # define en la parte superior.
Va a ser 8.
Y entonces fue cuando nos llame a nuestra función de búsqueda de abajo,
pasamos en el número que desea buscar, que hemos solicite,
obtenido del usuario.
Pasamos de la matriz, estos números,
y entonces también tiene que pasar en el tamaño de la matriz,
y luego el valor de tamaño 8 se almacena
o pasado a este número entero tamaño variable llamada.
Tenemos el tamaño de la matriz.
Ahora bien, si nos remontamos a lo que estábamos hablando antes,
Creo Missy trajo a colación el punto de que lo que teníamos que hacer es conseguir la longitud de la matriz
y lo divide por 2, y que nos dará el punto medio.
Vamos a ver.
¿Puedo tener a alguien escribir esto y lo guarda en su espacio?
¿Qué hay de Leila?
¿Puedo tener que escribir esto en?
Escriba la primera línea donde se toma la longitud de la matriz y obtener el punto medio
y almacenarlo en una variable nueva.
Te voy a dar un par de segundos. ¿Estás listo?
[Estudiante inaudible]
Claro, podría haber se calcula el punto medio
de la matriz pajar dentro de la función de búsqueda
utilizando la longitud de la matriz haystack, que es la variable de tamaño?
No hay nada complicado aquí.
[Leila] Just tamaño / 2 y sólo
Y guardarlo, y pulse el botón Guardar para arriba aquí en la parte superior,
y vamos a tirar de él hacia arriba.
Perfecto.
Ahí vamos. Awesome.
>> Como es, ¿esta compilación?
[Leila] No, tiene que ser más alto.
[Nate] Sí, ¿y qué tenemos que hacer?
[Leila] Como punto medio int o algo así.
Awesome. Sí, vamos a hacer eso, int = punto medio tamaño.
¿Esta compilación?
Vamos a borrar este comentario y sacarlo del camino.
Lo que no se compilará sobre esto?
No estamos haciendo nada con número entero,
así que tenemos que imprimir o algo por el estilo.
Sí, exactamente.
Tendremos una variable no utilizada.
¿Qué otra cosa no va a funcionar esto?
Creo que dijo algo, Sam. Punto y coma.
Sí, me estoy perdiendo los puntos y comas.
Va a ser algo constante durante todo el transcurso del plazo.
La última cosa que voy a hacer es que voy a poner un poco de espacio en blanco en ambos lados
de este operador aquí, ya que es típicamente cómo lo hacemos
de acuerdo con nuestra guía de estilo.
Tenemos el punto medio de nuestra matriz.
Ahora bien, si recordamos a nuestro algoritmo,
lo que fue el segundo paso que teníamos que hacer una vez que tengamos el punto medio?
[Estudiante] Si es mayor [inaudible].
Sí, por lo que tenemos que hacer algún tipo de comparación, y qué estamos comparando aquí?
Dijiste que si es mayor que. ¿Qué hay en esa frase se refiere?
El número que aparece, si es mayor que el punto medio, y luego subir a la matriz?
Exactamente lo que el número que aparece cuando nosotros-
La aguja, por lo que estamos comparando a la aguja,
y qué estamos comparando contra la aguja?
Debido a que la aguja es lo que estamos buscando.
Lo estamos comparando para llegar al punto medio.
>> Pero ¿tiene sentido para verificar
si la aguja del punto medio =?
¿Eso tiene sentido?
¿Alguien no está de acuerdo?
Vamos a darle una oportunidad, si (== aguja punto medio).
[Estudiante] printf No lo encontró.
[Nate] printf ("Lo hemos encontrado \ n");
De lo contrario-Voy a empezar a hacer algo diferente aquí.
Voy a empezar a poner llaves alrededor de si las declaraciones de todo el tiempo
porque si añadimos más cosas, entonces
no obtenemos los compiladores.
Sí, Sam. Tienes un punto.
El problema es que el punto medio representa una posición en la matriz,
pero usted puede conseguir que representan el valor en esa posición de la matriz.
Eso es un gran punto.
¿Todos oír lo que dijo Sam?
Dijo que el punto medio como es
representa sólo una posición en la matriz, pero no es el elemento real en la matriz.
Si se piensa en el código como está escrito en este momento,
si nos fijamos en esta serie aquí abajo, que cuenta con 8 elementos en ella,
¿cuál es el valor del punto medio va a estar en esta función?
[Estudiante] 4.
[Nate] 4.
Si buscamos el número 4 -
y que sólo puede ejecutar este código y poner una cara triste aquí
porque no encontrarlo si ejecuta este código
como está ahora, subirlo, edificio, déjame desplazarse hacia abajo,
y si buscamos el número 4,
que lo encontramos, pero no llegamos a este printf sí.
Una de las razones es que no nos devolverá true,
pero en realidad encontrar el número 4?
Y Sam está diciendo no.
¿Qué encontramos?
Realmente encontrado el punto medio, que si nos fijamos en la matriz aquí abajo,
que va a ser el elemento en el índice 4 que estamos viendo,
que tiene 23 años.
>> ¿Cómo podemos realmente conseguir ese elemento en el punto medio
y no sólo el propio punto medio?
[Estudiante] Nos gustaría introducir caracteres o algo así?
¿Qué haría eso, sólo por curiosidad?
¿Nos puedes contar un poco más?
Hay que transformar la posición en el número,
por lo que tengo que hacer alguna conexión-Creo que es char, pero no pudo ser.
Sí, eso es un buen punto.
Hemos estado haciendo un montón de puestos de esta conversión en caracteres, estos personajes,
en los boletines de ejercicios dos primeras.
Resulta que aquí, esto es casi similar a
el acceso a la i-ésima carácter dentro de una cadena, si eso tiene sentido.
Aquí queremos acceder al elemento del punto medio.
¿Cómo podemos hacer eso?
Kevin, ¿tiene usted alguna sugerencia de cómo podemos hacer eso?
Usted podría hacer pajar, corchete abierto, medio, cerrado soporte.
¿Puedes escribir eso para nosotros?
Guárdelo en aquí, y vamos a tirar eso.
Estamos pensando en esta línea 9,
y nos estamos dando cuenta de que no queremos comparar la aguja hacia el punto medio,
pero en cambio, queremos comparar la aguja
al elemento en el punto medio puesto dentro de nuestra gama pajar.
Cool.
Ahí vamos.
Sí, eso se ve muy bien, si (== pajar aguja [punto medio]).
Lo encontramos.
Ahora bien, si nos encontramos de nuevo el código-nosotros un poco de bits
compila, ejecuta, y ahora si nos fijamos para 4,
no lo encuentra porque ahora estamos consiguiendo realmente el número 23.
Estamos recibiendo el valor de 23, y eso es lo que estamos comparando a nuestro aguja.
Pero eso es bueno. Eso es un paso en la dirección correcta.
>> Eso es lo que estamos tratando de hacer.
No estamos tratando de comparar la aguja contra las posiciones de la matriz
sino más bien contra los elementos reales en la matriz.
Si miramos hacia atrás de nuevo ahora en el siguiente paso en nuestro algoritmo,
¿cuál es el siguiente paso?
Leila ya lo mencionó brevemente.
[Estudiante] Revise para ver si es mayor o menor que y luego decidir en qué dirección moverse.
[Nate] Sí, ¿cómo lo haríamos?
¿Se puede poner en un cierto I'Ll de ahorro de esta revisión,
y luego, si pones en algunas líneas que harán eso.
Sí, Charlotte. >> Tengo una pregunta.
¿No debería ser el punto medio - 1, porque lo primero es
está indexado 0, así que si ponemos 4, eso no es realmente el personaje que estas buscando?
Sí, y el otro problema que es-
eso es una gran captura, porque lo que va a terminar pasando posiblemente
si nos mantenemos en movimiento y no siempre ajustar inicialmente?
Supongo que lo que podría terminar haciendo es tratar de acceder a
el elemento en la posición 8 de la matriz,
que en este caso no existe.
Estaremos dispuestos a hacer algún tipo de contabilidad por el hecho de
que tenemos una indexación cero.
[Charlotte] Lo siento, me refería punto medio - 1 en los corchetes.
Podemos hacer eso.
Volveremos a este tema en un poco.
Una vez que empezamos a llegar al bucle actual,
que es cuando realmente va a ver esto entran en juego.
Por el momento, no podemos hacer esto, pero usted es totalmente correcto.
Que la indización de cero tendrá un efecto que hay que explicar.
Vamos a ver.
>> ¿Cómo es la mayor que y menor que-?
[Estudiante] tengo cómo hacer el mayor que y menor que parte.
Yo no estaba seguro de lo que desea imprimir si usted encuentra que es menos de la mitad pajar o superior.
Aquí puedo salvar lo que he-
[Nate] Sí, si guarda lo que tienes, y vamos a tirar de él hacia arriba.
Ahí vamos.
[Estudiante] Y puse signos de interrogación para lo que yo no sabía.
[Nate] Eso se ve muy bien.
Aquí tenemos signos de interrogación porque aún no sabemos
lo que vamos a hacer todavía.
¿Qué queremos hacer-oops, tenemos unas llaves todos cobardes de nosotros.
Vamos a corregir estos aparatos.
Ahí vamos.
Y así, ¿qué es lo que queremos hacer, de acuerdo a nuestro algoritmo,
si no encontramos la aguja?
Digamos, en el caso de que la aguja es menos de lo que estamos viendo. Kevin.
Buscar sólo en la mitad izquierda.
Bien, entonces vamos a poner un comentario aquí que dice "mira a la mitad izquierda".
Y si la aguja es mayor que el pajar en el punto medio, ¿qué es lo que queremos hacer?
[Estudiante] Entonces nos fijamos en la mitad derecha.
Mira la mitad derecha, "mira a medias."
No está mal.
Bien, en este punto, las cosas se ven bastante bien.
El problema con el código como está escrito es lo que?
[Estudiante] Usted no tiene puntos finales de las dos mitades.
Cierto, no tenemos puntos finales para las dos mitades.
Asimismo, sólo se va a pasar por esto una vez.
Sólo vamos a ver un punto medio.
O bien el elemento está ahí, o no lo es.
Para completar esto, tendremos que hacer algún tipo de repetición.
Tenemos que seguir repitiendo hasta que nos encontramos con que
o bien el elemento está ahí porque hemos reducido y finalmente lo encontró,
o no está allí porque hemos buscado a través de todas las cosas
en las mitades correspondientes de la matriz y se encontró que no hay nada en allí.
>> Cada vez que tenemos esta repetición pasando, ¿qué vamos a utilizar?
[Estudiante] Un bucle.
Una especie de bucle. Sí.
[Estudiante] ¿Podemos hacer un bucle do-while y la tengan en hacer eso y luego, mientras
la aguja no es igual, estoy seguro de a dónde iba con eso.
Pero algo así como hacer que el tiempo que no es igual al valor que la entrada del usuario.
Sí, así que vamos a ver, ¿cómo podría escribirse?
Usted ha dicho que vamos a utilizar un bucle do-while.
¿De dónde viene el comienzo hacer?
[Estudiante] Inmediatamente después de la talla / 2.
[Nate] Bueno, y ¿qué vamos a hacer?
Vamos a llenar el rato.
¿Qué vamos a hacer?
[Estudiante] No queremos hacer todas las cosas que tenemos en la parte de si?
[Nate] ¿Es todo esto, genial.
Copiar y pegar.
Oh, hombre.
Vamos a ver si esto funciona, si podemos ficha sobre esto.
Hermosa.
Muy bien, y nos ahorramos esto para que ustedes lo tienen.
Muy bien, y vamos a hacerlo mientras-
¿cuál fue la condición mientras que buscabas?
[Estudiante] Mientras que la aguja no es igual, así como el signo de exclamación.
Pero no estoy seguro de lo que es todavía.
[Nate] Sí, esta es una manera de hacerlo.
Sam, ¿tienes algún comentario?
[Sam] recordé cuando vi los videos,
Tomé una captura de pantalla de una de las parecida a cuando hicimos el pseudocódigo para ello,
existe una cierta relación entre MAX y MIN.
Creo que fue algo así como si el máximo es siempre menor que min.
Lo tengo.
[Sam] O como si Max no es menos minutos o algo así,
porque eso significaría que ha buscado en todo.
>> Sí, ¿y qué hace que suene como máximo y mínimo se refiere?
[Sam] Valores enteros-que los que van a cambiar
respecto al lugar donde ponemos el punto medio.
Exactamente.
[Sam] En ese momento, va a [inaudible] calcular el máximo y el mínimo.
Punto medio es esta idea max y min.
¿Tiene sentido para la gente?
Si tuviéramos que empezar a ver cómo vamos a hacer esta iteración,
tienes toda la razón que queremos utilizar algún tipo de do-while.
Pero supongo que si tenemos en cuenta lo que está pasando en el lugar de esta matriz
y lo que está ocurriendo en realidad-Voy a escribir por aquí-
en la iteración muy primero de búsqueda binaria, tenemos-
Voy a usar B y E para indicar el comienzo.
Y luego, al final de nuestra matriz.
Sabemos que el inicio es a las 4 por aquí,
y sabemos que el fin está en 108.
Digamos que está buscando el número 15.
La primera vez que hacemos esto, como hemos visto anteriormente,
el punto medio es o va a ser de 16 ó 23
dependiendo de cómo calcular las cosas.
Desde uniformemente divisoria en el medio nos daría este espacio
entre 16 y 23, no se puede dividir uniformemente
o dividirlo y llegar a un punto medio verdadero.
Veremos a los 16.
Nos daremos cuenta de "Hey, 16> 15 que estamos buscando".
Para buscar entonces en la mitad izquierda de la matriz
lo que vamos a terminar haciendo está desechando
esta porción superior entero
y decir: "Bueno, ahora nuestro punto final va a estar aquí."
La siguiente iteración de nuestro bucle, ahora estamos mirando este arreglo,
efectivamente haber descartado esta parte porque ahora
si nos está tomando el punto medio de la diferencia entre el principio y el fin,
encontramos nuestro punto medio a ser 8,
que luego puede probar 8 para ver dónde se encuentra en relación con el número que estamos buscando,
15, encontramos que 15 es mayor,
así que tenemos que ir a la parte derecha de la lista,
que conocemos porque somos seres humanos, y lo podemos ver.
Sabemos que la parte derecha va a estar donde lo encontramos,
pero el equipo no lo sabe, así que lo que voy a hacer es que en realidad va a
han esta sube, y ahora el principio y el fin
son el mismo lugar, de modo que el punto medio se convierte en el único número en la lista en ese punto,
que tiene 15 años, y lo hemos encontrado.
¿Eso arrojar algo de luz sobre donde esta toda max y min notación va,
hacer el seguimiento de los puntos finales de la matriz con el fin de averiguar
cómo reducir las cosas?
>> ¿Qué pasaría si esto no fuera igual al 15 ahora?
¿Qué pasa si buscábamos 15 y, en cambio, este número también fueron 16?
Decíamos: "¡Oh, es mayor.
Queremos ir de nuevo a la izquierda. "
Y nos gustaría trasladar nuestra dirección hacia la derecha,
momento en el que tenemos un punto final que sería contradictoria.
No sería capaz de buscar cualquier elementos más
porque ahora tenemos nuestro punto final y nuestro punto de partida,
nuestro max y min nuestro, ahora se volcó.
Buscamos a través de toda la matriz. No podemos encontrar nada.
Ese es el punto en el que nos gustaría decir: "Bueno, vamos a dejar este algoritmo.
No hemos encontrado nada. Sabemos que no está aquí. "
¿Cómo va?
[Estudiante] ¿Cómo funciona exactamente el ordenador cambiar el final?
¿Cómo funciona el final antes de terminar el principio?
El extremo termina antes del comienzo
a causa de las matemáticas que vamos a hacer cada vez que hacemos esto.
La forma de cambiar es que si nos fijamos en la primera vez que hacemos este canje
donde tenemos el comienzo y el final 4 en la
todo el camino hacia abajo en 108 y nuestro punto medio, por ejemplo, en 16 -
Voy a volver a cero el 15-si estamos buscando a los 15,
sabíamos que lo que hicimos cuando nos registramos el 16 y vio que era mayor
y quería descartar toda la parte derecha de la lista,
vimos que lo que queríamos hacer es mover este mensaje aquí.
Efectivamente, el correo nos cambiaron a uno antes del punto medio.
Del mismo modo, cuando hicimos esta iteración del algoritmo
y el punto medio era menos 8,
encontramos que 8 <15, así que queríamos que nos cambiaran la b
uno pasado el punto medio.
Ahora, el principio y el final son ambos juntos en este 15.
>> Si hubiéramos estado sucediendo en busca de algún otro valor, no 15,
o si este había sido 15 en vez de 16,
habríamos encontrado que el correo que desea mover uno antes del punto medio.
Ahora el e estaría allí volteado menos de la b.
Vamos a ver cómo podemos realmente llegar a codificar este algoritmo.
Sabemos que queremos tener este cálculo del punto medio.
Sabemos también que queremos para seguir el principio y el final de la matriz
de nuestra gama actual para que podamos entender
donde esta mitad izquierda de la lista es y donde la mitad derecha de la lista es.
Hacemos lo que sea con inicio y fin,
o podemos llamarlos min y max.
Voy a usar empezar y terminar este tiempo.
Cuando empezamos, si miramos hacia atrás en nuestro ejemplo aquí abajo,
nuestro principio se estableció en el principio de la matriz, como algo natural.
¿Qué índice es esto? Lo nuestro se debe empezar?
Daniel.
[Daniel] Haystack [0].
[Nate] Sí, así que pudimos igual a pajar [0].
El problema, sin embargo, es que esta no nos da la posición del primer elemento.
Esto nos da el índice del primer elemento o el valor real en la que la primera posición.
[Estudiante] Que se convierta al 0,20?
[Nate] Qué va a hacer es, bueno, no va a hacer ninguna conversión.
Lo que hará es que almacenará un 4 en comenzar,
y entonces será difícil hacer comparaciones con empezar
porque begin llevará a cabo el valor de 4,
que es el principio de nuestra matriz,
pero queremos hacer un seguimiento de los índices de la matriz
en contraposición a los valores.
En realidad, vamos a usar un 0, por el estilo.
Para el final de la matriz-Charlotte trajo esto un poco antes.
Aquí es donde vamos a tomar en cuenta la indexación cero.
>> Charlotte, ¿cuál es el final de la matriz?
¿Cuál es el índice del extremo?
[Charlotte] Tamaño - 1.
Sí, y ¿qué talla debería usar?
¿Debemos utilizar el tamaño de capital o de tamaño minúsculo?
Capital tamaño.
En este caso, podríamos utilizar el tamaño de capital.
Si queremos que esta función esté portátil
y utilizar esta función en otros programas,
de hecho podemos utilizar el tamaño minúsculas.
Es bueno también.
Pero Charlotte es totalmente correcto que queremos tener un tamaño - 1.
En este punto
[Estudiante] ¿Cómo es que usted puede utilizar el tamaño mayúsculas?
¿Cómo es que podemos usar mayúsculas tamaño?
Resulta que estos # define son muy,
bajo el capó, un texto como buscar y reemplazar, si eso tiene sentido.
Cuando se compila el código, la fase de preprocesamiento
del compilador pasa por el archivo,
y busca por todas partes que usted ha escrito tamaño del capital,
y reemplaza el texto literalmente, con un 8, así como así.
En ese sentido, esto es muy diferente de una variable.
No ocupa espacio en la memoria.
Es un truco Reemplazar texto simple.
En este caso, vamos a utilizar el tamaño.
Desde aquí quiero hacer una especie de repetición,
y estamos en el camino correcto con nuestro do-while.
Queremos hacer algo hasta que una condición no se cumple ya,
y como hemos visto anteriormente, vimos que esa condición
era en verdad que no queremos que al final
a ser menor que el comenzar.
>> Esta es nuestra condición de parada.
Si esto ocurre, queremos detener y declarar como, "Hey, no hemos encontrado nada".
Para expresar esto, se desea utilizar algún tipo de bucle.
En este caso, ¿sería un bucle do-while, un bucle, un bucle while?
Tenemos un bucle do-while aquí.
¿Es que les guste este enfoque?
¿Crees que deberíamos intentar un enfoque diferente?
Kevin, alguna idea?
Podríamos tener un bucle while porque sabemos máximo
sería mayor que min en los modos de arranque.
Sí, así que no hay inicialización que tiene que suceder.
Los bucles do-while son grandes cuando se tiene que inicializar algo
antes de esa prueba, mientras que aquí
sabemos que no vamos a mantener reinicializar ambos comienzan y terminan
cada ronda del bucle.
Sabemos que queremos iniciar, a continuación, comprobar nuestra condición.
En este caso, en realidad va a ir con un bucle while simple.
Resulta que do-while se utilizan con poca frecuencia.
Un montón de lugares ni siquiera enseñan qué bucles while.
Son buenos para el manejo de datos del usuario, por lo que hemos visto a muchos de ellos hasta ahora.
Pero normal y bucles while son mucho más comunes.
Resulta que esta condición como escrito
realmente no nos hacen mucho bien, y por qué es eso?
Lo siento, no sé su nombre.
Soy Jerry. >> ¿Cómo?
Es B-O-R-U-I.
Oh, está bien.
Yo no te veo en mi lista.
Oh, es porque-oh, eso tiene sentido.
¿Tiene una idea de por qué este bucle while puede no funcionar como se pretende,
tal como está escrita con la condición?
[Jerry] ¿Quieres decir como quiere que todas las cosas después de que al-?
Sí, por lo que hay una.
Puede que tengamos que poner todas estas cosas en el bucle while, que es totalmente cierto.
La otra cosa que es un poco más problemático, sin embargo, es que esta condición no funciona.
[Estudiante] Debe darle la vuelta.
Bien, por lo que esta condición no siempre será así inicialmente la forma en que hablamos de eso.
Queremos hacer algo hasta <finales de comenzar,
pero queremos hacer algo mientras
empezar final ≤.
>> Hay que invertir la lógica allí.
Yo soy culpable de hacer esos errores todo el tiempo.
[Estudiante] ¿Por qué tiene que ser menor o igual que?
Porque ¿recuerdas el caso de que llegamos a
donde había un solo elemento, y estábamos abajo,
y nos quedamos mirando sólo el 15 en nuestro array?
Y nuestro principio y nuestro fin era el mismo elemento.
Queremos asegurarnos de que manejar este caso.
Si hiciéramos un derecho menor que,
que sólo sería capaz de llegar a un arreglo de 2 elementos.
Una vez que llegamos hasta el último elemento, si ese fuera nuestro elemento, que nunca lo encontraría.
Ahora aquí, podemos hacer exactamente como usted decía.
Podemos empezar plopping cosas a la derecha en el medio de nuestro bucle while.
Podemos plop en nuestro punto medio.
Podemos tomar todo esto si las declaraciones,
sacarlos de este bucle do-while,
plop ellos,
limpiar las cosas un poco,
y voy a seguir adelante y salvar a esta revisión.
Y en este punto, estamos bastante cerca.
Sam.
Creo que también hay que tener punto medio int size = - 1/2.
Tengo, tamaño - 1/2.
¿Hay algo más que debemos cambiar en esa línea?
Ese fue un buen partido.
>> ¿Qué tamaño de hacerlo? ¿Estamos en constante cambio talla?
Con el fin de mantener la línea de este tipo, tenemos que cambiar el tamaño.
Tenemos que cambiar el tamaño cada vez que vamos alrededor del bucle for.
Pero recuerdo cuando íbamos a través de nuestro ejemplo, sólo un poco antes,
y tuvimos el inicio a las 4
y al final todo el camino a 108?
¿Cómo se calcula el punto medio?
Estábamos usando el tamaño?
O que estábamos utilizando comienzan y terminan en su lugar?
Es la diferencia entre el final y el principio.
Exactamente, y exactamente cómo debo escribir que, Charlotte?
Solamente deben - comenzar.
Usted no tiene que hacer el - 1
porque el - 1 se ha incluido en el final y el comienzo ya.
[Nate] Great, tienes toda la razón.
No tenemos que hacer el - 1, ya que - 1 se ha incluido
y representó cuando inicializamos la variable final.
>> ¿Hay algo más que deba hacer sintácticamente tener esta línea tiene sentido?
[Estudiante] Más comenzar. >> Plus empezar?
[Estudiante] al final.
Porque se calcula únicamente la mitad de la longitud.
Es necesario agregar el inicio.
[Nate] ¿Qué haría este cálculo para nosotros?
Si pensamos en la final de esta primera iteración del bucle,
final va a ser en el índice de posición 7.
Comience en la posición 0.
Recuerda que estamos buscando, ya sea para
posición 3 o la posición 4.
Si nos fijamos en esta matemática, sólo para hacerlo un poco más tangible,
poner algunos números aquí, tenemos 7, 0,
así 7 a 0, y luego 2 /
es 3 en la división entera, es decir.
Entonces tenemos que agregar luego de vuelta a nuestra comenzar?
No lo hacemos en este caso.
En la primera iteración, va a estar bien porque begin es 0.
Pero a medida que avanzamos, hacemos realmente todo sólo tiene
final - comienza / 2.
Hay un truco aquí otro, y eso es a saber, una de precedencia.
[Estudiante] ¿Necesitamos paréntesis?
[Nate] Exactamente, y eso es porque si no ponemos los paréntesis,
entonces esta línea se interpretarán en lugar
como (final) - (comenzar / 2), que definitivamente no quieren.
¡Cuidado con las reglas de precedencia.
[Estudiante] ¿Por qué no acabar con ella + empezar?
¿Por qué no acabar con ella + empezar?
[Estudiante] Por qué no es eso?
¿Por qué sería +?
Creo que tienes razón.
[Estudiante] Porque es normal?
[Nate] + Fin empezar, tienes toda la razón.
Wow, estoy totalmente metido la pata. Tienes razón.
Si estuviéramos haciendo el signo menos, nos gustaría añadir el comenzar hacia adentro
En este caso, es muy justo que queremos tomar el promedio de los dos,
por lo que las quiero añadir, en lugar de restarlos.
[Estudiante] También funcionaría si hubiera terminado - begin / 2 + de comenzar.
Lo haría si lo hacemos-Creo que sí.
>> Por ejemplo, si estuviéramos mirando a comenzar,
y lo cambió por aquí
a los 15.
Ahora comience en la posición 2.
End está en la posición 7.
Si les restamos, obtenemos 5.
Divida eso por 2, obtenemos 2.
Y luego le añadimos 2 de nuevo,
y que nos lleva a la cuarta posición,
que está aquí, que es el punto medio.
[Estudiante] ¿Tenemos que tener cuidado de envolver?
¿En qué sentido tenemos que tener cuidado de envolver?
Si la suma o la diferencia entre
dependiendo de cómo lo hacemos no es un número par.
A continuación, el equipo se confunde si cuando es 2,5;
Cómo se mueve hacia la izquierda o hacia la derecha para determinar cuál es el punto medio?
Lo tengo.
Resulta que la división entera,
no siempre obtener estos números en coma flotante.
Nunca obtener el decimal.
Está totalmente descartado.
Si usted tiene una computadora dividir dos variables int,
y uno es 7, y el otro es 2,
usted no recibirá 3,5 como resultado.
Se obtendrá 3.
El resto se descarta, por lo que es efectivamente el redondeo
no una ronda, sino más bien un piso, si ustedes están familiarizados con el de las matemáticas,
donde descartar completamente el decimal,
y por lo que está esencialmente truncar la baja hasta la
posición general, al número entero más próximo.
[Estudiante] Pero entonces eso es un problema porque si usted tiene un conjunto de 7 elementos
a continuación, que automáticamente toma el elemento tercero del punto medio en lugar de la 4 ª.
¿Qué hacemos con eso?
Es problemático porque si tuviéramos una matriz de 7,
lo volvería a escoger el tercero en lugar de la 4 ª.
¿Podría explicar un poco más?
[Estudiante] Porque si usted tiene 7 elementos entonces el 4 º elemento
sería el punto medio, ¿no?
Recuerde que su comentario acerca de ser cero indexado, sin embargo.
[Estudiante] Sí, por lo que en la posición 3. Ese sería el punto medio.
Si.
Oh, está bien. Ya veo lo que quieres decir.
Es un poco extraño, ya que nos acostumbramos a esta noción de
deshacerse de decimales.
Eso es un gran punto.
Vamos a terminar con esto.
Hemos calculado nuestro punto medio.
>> Estamos probando para ver si nuestra aguja es igual al valor medio.
Estamos impresión de que lo encontramos, pero en realidad, ¿qué es lo que queremos hacer en esta situación?
Hemos encontrado, por lo que queremos dejar que la persona que llama sabe que lo hemos encontrado.
Tenemos una función que es una función con tipo booleano.
La forma de indicar a la persona que llama de nuestra función que estamos listos para ir
Se nos dice, "Hey, esto es cierto."
¿Cómo hacemos eso, Kevin?
Estás asentir con la cabeza. >> [Kevin] Añadir return true.
[Nate] Exactamente, devuelve true.
Ahora, si no es igual, ¿cómo vemos la mitad izquierda?
¿Alguna idea?
Stella, alguna idea?
Es necesario establecer una nueva posición para el final.
Si.
Así que tenemos que hacer cargo de la mitad - el final.
Grande.
Tenemos que establecer una nueva posición para la final
para mirar la mitad izquierda.
Esto fue lo que hablamos antes, donde
Sigo volviendo a este ejemplo.
He aquí el comienzo, y luego tengo que al final todo el camino hasta aquí.
>> Una vez más, si estamos buscando a 15, y nuestro punto medio es a los 16 años,
y nos damos cuenta, "Oops, 16 es mayor.
Queremos pasar a la mitad izquierda ".
A continuación, se trasladaría al final de los 15,
y lo hacemos mediante la adopción de una distancia desde el punto medio
y estableciendo que, como nuestro nuevo final.
Del mismo modo, si queremos mirar la mitad derecha, ¿cómo lo hacemos?
¿Tiene una idea?
[Estudiante] Usted acaba de establecer comienzan a punto medio + 1.
[Nate] Great.
Y ahora, en el caso de que no encontramos nada,
tiene que obtener cuidados para nosotros?
Daniel, ¿eso te atendidos por nosotros?
[Daniel] No.
[Nate] Si lo hacemos a través de toda la matriz y no encontramos nada,
donde sería ese ser atendidos, o debemos cuidar de él?
[Daniel] La condición de tiempo.
[Nate] Sí, la condición de tiempo, exactamente.
Se hará cargo de ir a través de toda la matriz si no encontramos nada.
Este bucle while terminará.
Nunca he encontrado con esta condición,
y podemos devolver false.
También puede dejar este caso aquí de esa
porque si esta afirmación es verdadera si,
y nuestra función devolverá,
así que básicamente va a abortar esta función en este momento
cuando volvamos verdad.
¿Pero qué sucede con esta estructura aquí?
¿Esto funciona del todo, o hay algún error lógico ahí?
>> Hay alguna falla lógica en allí, con la forma en que está establecido.
¿Qué podría ser?
[Estudiante] ¿Por qué necesita el - y + 1 s?
Que establece nuestra amplia para ser nuestro nuevo medio a la izquierda y la mitad derecha.
[Estudiante] Pero ¿por qué no podría hacerlo sin el - y + 1s 1s?
[Nate] Podríamos igual a la mitad?
¿Cuál podría ser problemático en eso?
[Estudiante] Supongo que es ineficiente porque usted está comprobando un valor que ya se ha comprobado.
[Nate] Exactamente, así que Sam es totalmente correcto.
Si establece el final y el inicio igual al punto medio
en lugar de - 1 y + 1 reflexivamente,
en algún momento en el futuro vamos a terminar haciendo el registro de la mitad otra vez.
[Estudiante] Empecé el conjunto de procesadores, y luego tuve algo así
donde se me olvidó el 1 +, y se quedó atascado en un bucle infinito.
Claro, porque en algún momento usted nunca va a conseguir comienzan y terminan
a superponerse en realidad.
Cool.
Hay una falla más lógico, y es que esta duda debe ser
un else if.
¿Por qué podría ser?
>> La razón es que si no es una cosa-si te veo, Kevin?
[Kevin] Sí, porque se está cambiando el punto final.
[Nate] Exactamente.
Estamos cambiando el punto final,
y si se escribe así-nos volveremos hacer espacios entre-
se comprobará este caso.
Este caso, si tiene éxito, se cancelará de la función.
A continuación, se comprobará este caso siguiente,
y si tiene éxito, será ajustar el punto final,
y después seguirá en marcha y verificar este caso.
Pero en este punto, no queremos que continúe cheques.
Afortunadamente, no hemos restablecer el punto medio aquí,
y sabemos que este caso no tendrá éxito.
Pero definitivamente quiere poner la cosa en si hay
a pesar de que podría, en este caso
ya que no está ajustando el punto medio, que haría una diferencia?
No, porque estos casos son todos exclusivos.
Una vez más, mi mal.
No, creo que necesita esta persona si.
Podemos darle una oportunidad y ejecutarlo y ver qué pasa.
Construcción, ocurrió un error.
Es probablemente porque dejé de estos by e aquí.
Me gustaría saber más de los de arriba en la parte superior?
No lo parece.
Nos alejar la imagen, construir,
ahí va, así que ahora si buscamos por 15,
Sí.
Permítanme zoom in
15, sí. Podemos volver a ejecutarlo.
Carga de código fuente, construcción, corriendo.
Podemos buscar por algo así como 13,
y no recibimos nada de imprimir, por lo que no está encontrando que para nosotros.
Eso es genial, porque no está en nuestra lista.
>> Ahora estamos fuera de tiempo.
Eso va a ser para esta semana.
Gracias por acompañarnos y nos vemos más tarde.
>> [CS50.TV]