Transcrições
1. Introdução: Estou pedindo nesta aula. Quero falar sobre elegância, pesquisar cotovelos relacionados. Esses tipos de álbuns surgem muito, e é seu com o seu tempo para passar alguns minutos atualizando seu conhecimento. Saber como funciona uma pesquisa binária permite que você entenda outros Albertans com base no mesmo princípio. Após este curso, você terá um bom lembrete de como isso acontece, trabalhar e estar um pouco mais preparado para fazê-los em uma entrevista ou em sua palavra Dele nas notas que precisam mostrar. Forneça um link para o código-fonte. Você pode usar isso para respeitar ainda mais o álbum. Veja como eu implementaria isso. Ok, vamos começar.
2. Explicação de algoritmo: Vamos dar uma olhada na pesquisa Byner. Pesquisas binárias usadas para localizar algo em uma espécie de lista. Isso é um requisito. A lista deve ser classificada em nossa lista de exemplos. Aqui temos letras, e elas são uma ordem alfabética crescente. Se a lista não for uma espécie de binário, pesquisa não funcionará. A pesquisa Beina recebe seu nome porque dividimos a lista ao meio cada vez que fazemos um passo
na hora deles. Então vamos ver isso pelo exemplo. Vamos procurar a letra G nesta lista, então queremos procurar a letra G. Esta lista tem 10 comprida, então vamos começar pelo meio. Elemento. O meio vai ser todo o comprimento dividido por dois. Digamos apenas cinco. Se isto é para cima ou para baixo por um não vai fazer uma grande diferença. Pegue o contorno. O que continua dividindo a lista ao meio, e acabará por encontrar alguma coisa. Então, se começarmos o quinto Índice que 012345 isso não é em cinco próximos. Vamos começar aqui. Parece que está na outra metade da lista. Isso é bom. Há cinco em ambos os lados. Anomalia visual de novo. Não importa se é desligado por um em I é igual a cinco. Nós temos um K, que não é G. O K é maior que o G, entanto, isso nos diz algo porque o K é maior que o G. Sabemos que o G não pode me acertar. O G tem que sair dele se estiver lá. Então a pesquisa binária diz: “
Bem, Bem, vamos olhar para esta primeira metade. Então, quando uma divisão fora desta primeira metade aqui e vamos apenas olhar através deste caminho aqui, são cinco longos. Vamos começar no meio disso de novo agora cinco divididos por dois podem ser 2,5 semanas . Um três ou dois não faz grande diferença. Vamos dar a volta, também. E aquele 012 I é igual a dois. O que é, neste ponto aqui? Nós não temos e neste momento, e a facilidade menos que o G. Então, novamente, isso nos diz algo. qual metade da lisa restante está? Não é a mão esquerda porque ele é maior que G, então é para a direita. Se estiver lá, enviaram
algumas pesquisas de compra, por isso é estreito. Nossa busca até aqui. É muito longo e relativo a esta parte que queremos. O elemento é muito dividido por dois é um mais. Aqui vamos olhar para mim igual a quatro e vamos encontrar a letra G. Preste atenção para mais tarde. Quantos passos nos levou a fazer que fizemos 123 Comparações. Fizemos três comparações para encontrar o item que queríamos. Agora vamos procurar a letra C. Sabemos que C não está nesta lista, mas vamos ver o que o algoritmo de classificação binária faz neste caso novamente, vamos começar no meio da lista aqui em I igual a cinco. Que é maior do que vê, então nós sabemos que tem que ser na metade esquerda, então ele vai ser apenas nesta metade linhas contra nós sabemos onde ele está, e nós vamos começar no meio dessa metade agora. Vamos apontar para aqui agora, e é isso. Índice é igual a dois. Esta não é a carta que procuramos é maior do que ver, então isso nos diz de novo, está na metade esquerda aqui. Então nós reduzimos nossa busca novamente aqui e agora nós não temos uma lista menor, e nós vamos escolher onde o meio está novamente. O meio aqui perto do nosso órgão ia acabar por começar aqui. Começa em I é igual a um. Esta não é a carta que temos agora. É maior que C, e isto é trabalho. É um pouco confuso ver que ainda temos dois lados nisso. Mesmo que as fronteiras aqui à direita de D não sejam nada. Na verdade, há uma lista vazia aqui. Nós não estamos olhando para aquele lado à esquerda de D. Nós só temos que estar e nós sabemos que temos que olhar para a esquerda porque D é ótimo no mar. Então reduzimos a busca apenas para este critério aqui e fazemos mais um passo em I igual zero e não encontramos o mar. Agora a estrela binária neste ponto diz, Bem, que metade é na metade esquerda? Mas não importa porque não há nada em nenhuma das duas partes para procurar porque o comprimento da lista A restante agora é zero. Sabemos que não temos ver nesta lista. Não está aqui para referência à complexidade. Conte o número de etapas novamente. Temos 1234 passos. Passos do curso. É um pouco mais do que a guerra. Três colocaram quatro passos bobos.
3. Complexidade de Algoritmo: É assim que funciona a busca binária. Você sempre escolhe um ponto de pivô. Primeiro, você escolhe o ponto no meio e você compara o valor. Se o valor find for menor do que o que você está procurando. Então, é menos do que o seu que você está indo para pesquisar esta metade do valor K é mais do que o que você está procurando. Você vai olhar para a metade certa, então se é maior do que ele, então é sempre maior em menos do que comparação. E então você pega a metade e repete o procedimento, e isso o torna um algoritmo recursivo. Bridge passo o álbum respeitando metade da lista de tamanhos. Deixe-me desenhar algumas caixas de onde isso parece para a complexidade do propósito. Então eu entendo o que está acontecendo. Então nós tínhamos o K e então se ele era maior do que nós temos algumas caixas à esquerda, há apenas cinco delas, e do outro lado nós temos apenas quatro delas. Colocamos a lista ao meio. Agora a mesma coisa vai acontecer aqui. Nós vamos pegar o do meio, escolher um no meio aqui, e então você vai ficar com dois para comparar aqui, dois aqui e também para e depois apenas um. Então o ramo termina aqui e sempre com os outros. São casos quase especiais, mas acontecem muito. Escolheste o do meio. E se não for o do meio, você acaba tendo que fazer mais uma busca em cada um deles. E este é um padrão que você deveria estar se acostumando em álbuns. Estás a dividir-te ao meio de cada lado. Você só tem que ir até aqui para as caixas de uma. Uma vez que você chegar ao um caixas suas pesquisas feitas, você encontrou o elemento ou você não tem. Quantos degraus há aqui? Qualquer vez que você dividir em dois ou você duplicar, você definitivamente deve reconhecer este longo com padrão exponencial. Então ah, tipo
binário é mais longo o padrão. Então, temos registro. E novamente, aqui é onde eu disse que não importa se ele está fora por um, e então pode ser para cima ou para baixo um pouco. A contagem pode mudar para frente e para trás. E é por isso que dizemos: “
Bem, Bem, é grande o final longo. Esse é o limite superior não vai além do ponto em que estamos removendo as restrições. Você também pode ter sorte. Às vezes. Se você está procurando o K, você vai encontrar um cuidado imediatamente, caso
em que ele faz apenas uma comparação. Mas estamos à procura do pior cenário. Lembre-se, em uma entrevista, se eles pedem tempo, complexidade lá, geralmente pedindo para o pior cenário. Mas se você não tem certeza, você geralmente pode pedir e para procurar algoritmo. Eles estão pedindo o número de comparações. E foi aí que pensávamos que não nos comparávamos aqui. Comparado aqui. Comparamos aqui que comparamos aqui quatro comparações. Esta é geralmente a forma como medimos a complexidade do tempo de pesquisa de álbuns. Quantas comparações temos que fazer?
4. Mais baixo e superior: Há alguns casos especiais para procurar por exemplo. Vamos procurar um M agora e sabemos que há dois aqui. Então vamos ver o que o algoritmo faz foram primeiro 0,2. Eu igual a cinco, e este é o K Que é menor que M. Então sabemos que temos que olhar para o lado direito aqui. Então nós dividimos, ele iria aqui, e o ponto médio vai ser aqui em cima em I igual a oito R é maior que M, então nós sabemos que temos que olhar para a esquerda de sua e agora nós restringimos a esta parte aqui . É aqui que está a parte interessante. Então nós verificamos este aqui porque isso é apenas acontece de estar ciente vai funcionar. Podíamos ter estado a verificar aquele e eu disse, encontramo-lo e
encontrámos o “M por isso descobriste que a busca básica está boa. Eles são dois álbuns lá, muito perto cedo para procurar que surgem muitas vezes ao implementar outros algoritmos. Esses dois algoritmos são o que chamamos de limite inferior e limite superior e M é o caso e introduz é menor. Bounce diz que me apontará para o primeiro lugar onde os encontraríamos. Então, se estamos procurando o limite inferior deles, nós realmente queremos este local e não este. O valor do limite inferior é quando você tem duplicatas. Sabe, você pode apontar para o 1º 1, mas também o limite inferior também é bom. Quando você está procurando por coisas que não estão lá. Vamos voltar a isso. Veja, caso sabemos que não vê aqui, mas isso não nos diz muito. E se quisermos saber? Bem, onde iria ver entrar aqui? Quais são os vizinhos mais próximos? Algo como Lower Bound pode nos dizer onde estão os vizinhos mais próximos. Então o limite inferior para começar no meio, comece aqui, então verifique aqui e então nós sabemos aqui e aqui e pulando sobre negócios como isso é feito. Mas Lower Bound quer basicamente nos dar esta posição aqui porque é aqui que o mar iria diligir, e vai acabar nos dando esta posição aqui. Eu é igual a um porque o limite inferior diz especificamente qual é o primeiro elemento, que não é menos do que isso? Valor B é menor que esse valor, então não é o que queremos D é maior do que esse valor. Por isso, é o que queremos. Essa frase de não menos do que era importante no caso M porque há Malta, uns deles. Isso significa o 1º 1 que não é menor do que porque M não é menor do que em. Ele permite que ele combine. Portanto, esta função de limite inferior é útil para encontrar um lugar em uma lista onde um item pode existir se ele não está lá ou se ele está lá para garantir que você encontrou o primeiro 1 Se isso é relevante, muito intimamente relacionado com o limite inferior é superior cinto O limite superior nos diz o primeiro item que é maior do que o que estamos procurando. Então, por exemplo, se você está procurando o limite superior fora eles desta vez, sabemos que M está lá. Mas queremos encontrar o ponto em que M não é mais o animal correto. É aí que ele pára? Então o limite superior de M quer apontar para aqui. Então, neste local aqui, onde inserimos coisa, este é o primeiro elemento na lista que não é menor ou igual ou maior que
M. Isso significa para qualquer coisa que venha atrás deles que possa ir lá. Isso é mais importante ou mais interessante para itens que não estão na lista. Por exemplo, se queremos saber bem, onde meu fim vai, você também pode dizer, Bem, ele vai para isso Então, para procurar algo e ele está lá, diz
o limite superior. Em que ponto é, após esse item, isso é útil para alguns tipos de classificação. Ou se você quiser inserir outro AM, você quer ter certeza que ele vem após os existentes. Você também pode olhar para o limite superior de coisas que não existem. Então, como ver, nós sabíamos que o limite inferior de C estava apontando para o D porque esse era o primeiro 1 que
não era inferior a C. Isso também acontece de ser o primeiro 1 que é maior do que ver. Então, no caso de itens que não existem, então eles não estão aqui. O limite inferior e superior serão os mesmos porque não estão na lista. Ele sempre vai apontar para o mesmo local na classe de classificação de inserção. Vamos ver por que isso faz a diferença por que você pode querer usar limite superior versus limite
inferior para fazer um tipo de classificação Superior um limite inferior são muito usados quando muitos álbuns que eles estão tentando localizar itens que não estão na lista estão apenas tentando encontrar um local em uma lista para algo tem que ser, mesmo que ele não esteja lá, entendendo-os e sendo capaz de implementá-los, nós lhe daremos acesso a uma variedade de outros álbuns para ajudá-lo em um monte de codificação entrevistas.
5. Código de busca binária: Eu dei uma olhada no código agora para a pesquisa binária e o limite inferior e o limite superior antes de olhar para o segmento. Antes de olhar para o código, certifique-se de tentar este exercício por conta própria indo para a direita. Sua própria busca binária. Trate o limite superior e inferior como perguntas de bônus. Terei um link para este código nas notas, então confira também. Mas novamente como seu projeto, certifique-se de escrever este código primeiro. Faça a busca binária. Tente algumas entradas. Vamos fazer alguns casos de teste. Certifique-se de que funciona a variedade de entradas e convencer-se de que você entendeu o que eu falei no segmento anterior e que você poderia escrever uma pesquisa de vinil em uma situação de
entrevista. Certo, vamos ver o código. Então, nos arquivos da turma, há um P Y principal na Itália. O python principal tem riqueza e python, mas deve ser fácil de seguir. Independentemente disso, a parte superior disso é todo tipo de caldeirão apenas para configurar o ambiente python para comparáveis. Uma coisa sabe sobre os comparáveis. A única operação de comparação que vai estar usando é menor do que isso é muito comum ao escrever algoritmos para bibliotecas padrão por isso são comparáveis só precisa definir uma
operação menos que e nada mawr. Então vamos dar uma olhada na compra de pesquisa. Eu movo isso um pouco para cima. Aqui temos a busca Byner. O que é preciso comprar uma pesquisa? Ele leva o valor que estamos procurando e os itens em algum p. Eu ainda vejo isso chamado de agulha em um palheiro. Funciona, mas gosto de valor em itens. Ele deve ser claro o suficiente, e ele retorna um final opcional. Por que é opcional porque ele pode não encontrar os itens que ele tem para ser capaz de retornar nenhum. Caso contrário, ele retorna a posição do item que foi encontrado, que compara igual ao valor passado nos 2 primeiros passos configurados para Loop estavam dizendo que parte da lista estava pesquisando em? Zero foi o primeiro, próximo e o longo. Eu era um dos melhores. São os melhores índices exclusivamente. Você não verificar que fora deste é um intervalo de codificação padrão. Nós configuramos isso e seu loop então diz, enquanto baixo é menor que alto, continuamos fazendo loop porque isso significa que ainda temos itens para verificar. Como mostrei no quadro branco, o que precisamos fazer é olhar para a posição média. Então isso é oi menos baixo, dividido por dois mais baixo o slash amarrando python. É apenas divisão de energia, e isso nos dá o ponto médio entre o alcance estavam checando. Isso é feito em um loop porque vamos fazer isso repetidamente. Então este é o ponto médio. E a primeira verificação foi dizer, é o item no ponto médio menor do que o nosso valor, isto significa que quando os pontos de pivô atuais nesta província é menor que ou valor, isso significa que toda esta metade esquerda fora os itens não tê-lo. Então estamos em uma mudança para a metade direita para o segmento e deslocado para a direita metade de um segmento que
tomamos baixo disse que para meados mais um. Sabemos que midd não pode ser o valor porque midd era menor que o valor. Então, no meio mais um, isso muda a janela que estava procurando pela direita. Caso contrário, se o nosso valor for menor que o médio, então sabemos que estamos muito altos na lista e podemos ir para o lado esquerdo e é aqui que nos
movemos para baixo. Tão alto se torna meio menos um e sabemos que meio não pode ser o item circo no meio menos um. Se você colocar no meio também, deve
funcionar, mas será um pouco menos eficiente. Caso contrário, retornaremos no meio. Agora é aqui que é importante. Onde eu disse, só
usamos menos do que comparações na primeira comparação. Vemos se os itens meados é menor do que o valor no segundo,
quando o vemos, valores diminuem os itens meio parece um pouco estranho. Então, no último caso, o que isso significa? Se nenhum dos valores é menor do que o outro, isso significa o mesmo valor, significa que é o valor que estamos procurando e poderíamos retornar meados. Encontramos o valor que estamos procurando, e se não encontramos esse valor, não retornamos nenhum. Então esta é uma pesquisa binária básica. Eu fiz isso sem Rikers, e eu fiz isso com um loop de tempo e leva o segmento alto e baixo. Ele passa para o segmento é dividi-lo pela metade cada vez na parte inferior do arquivo. Providenciei um teste. Execute este seu trabalho e teste de torta ou apenas executar diretamente e eu faço alguns itens e eu faço alguns testes
básicos. Se você está escrevendo guerra completa do que você teria uma suíte de testes maior nisso, basta dar alguns conceitos básicos. Um ponto interessante, Eu disse para dois teste é o que acontece se você está procurando por um e você nesta lista, O ar de A duplicado e o U é duplicado. Você podia ver os dois anos lá dentro. O problema com a forma como eu implementei a pesquisa binária neste exemplo é que
não há nenhuma garantia de qual ele encontra. Então isso por busca aérea para um poderia ser 01 Poderia encontrar qualquer um desses valores. O mesmo com a UE. Você poderia ter oito ou nove anos. Pode encontrar qualquer um desses valores, e isso é algo que vamos olhar para o limite inferior e superior. Então vamos para aqueles
6. Código de baixa e superior: relacionadas à pesquisa binária são operações de limite inferior e superior. Onde estão as pesquisas binárias procurando por um item específico? Os limites inferior e superior à procura de um lugar na lista onde um item pertenceria, se ele está lá ou não, e eles dão garantias um pouco mais fortes em uma pesquisa binária. Então vamos dar uma olhada no limite inferior novamente. O limite inferior coima a primeira posição na lista em que o item na lista não é
inferior ao valor. Esse é o primeiro lugar onde é maior ou igual. E nós dizemos não menos do que novamente, porque nós só queremos usar o menos de operador. Mas é o mesmo é maior ou igual a neste caso, então o limite inferior A tem a mesma entrada, mas você percebe que a saída é uma energia. Er este não pode voltar, e nenhum. Não é opcional. Há sempre um lugar a não ser que algo pertença. Se não for, pode
estar no meio. Pode ser o começo certo ou o fim, então sempre tem um valor. Esta configuração tem a mesma aparência. Começamos com esta gama completa, e vamos segmentá-lo pela metade cada vez procurando assim o meio. Então, a lição baixa alta e estamos procurando o ponto médio. Então agora vamos verificar se os itens no meio é menor que o valor. E se for, esta é como a condição que tínhamos antes de Well é tão menor que Ban tem que estar à direita dela . Então dizemos meio mais um porque é menos do que isso. Sabemos que o limite inferior é estritamente após meados porque tem que ser maior ou igual a. Então você é menos mais um agora ele é onde algo muda a partir da pesquisa binária. Se olharmos para trás com o outro na busca binária, nós não temos l Se isso comparou o valor novamente aqui em baixo, nós não fazemos. Se não era o lado direito, tem
que ser o lado esquerdo. Não temos caminho de retorno curto. Não conseguimos identificar o valor. Procure no meio. Temos sempre que procurar exaustivamente. E é também por isso que dizemos oi é igual a meio e não a meio menos um. Porque neste momento nós realmente não sabemos que meio não é o limite inferior. Na verdade, pode ser porque todos os itens à esquerda do meio podem ser menores do que o valor no meio. Pode ser o que estamos procurando. Portanto, não subtraímos um. Nós apenas dizemos altos menos que meio. E continuamos fazendo isso até que Lo e oi tenham o mesmo valor. Eu digo abaixa a lição. Oi. Isto é uma técnica de codificação defensiva para garantir que nunca vai durar para sempre, mas eles vão ser iguais em algum momento. Então nós retornamos baixo nesse ponto neste limite inferior, em
seguida, encontra o primeiro lugar na lista onde os itens não menos do que o valor. Então, o fundo, os casos de teste. Se olharmos para o olhar para os itens agora, se tomarmos o limite inferior de um que dissemos antes na busca binária poderíamos ter tido um 01 Mas no limite inferior, ele tem que nos dar um zero. Tem de ser o primeiro lugar onde existe neste caso, o primeiro item da lista. E para você também foi o 1º 1 aqui. A primeira posição é oito. E assim há duplicatas é garantido qual ele retorna sempre tem que ser o primeiro 1 Isso é onde você não serviria um desse valor. Agora o primeiro teste de um não existente é ver, e o que deve ver retorna para ter um B C C estaria bem aqui, e isso significa que deve ser a posição do F, e isso é um três. Então encontramos os três e novamente com o Por que o Por que deveria aqui e um double zed, que eu joguei em apenas para obter algo no final da lista? Porque é maior do que todos eles. Ele deve aparecer no final da lista, e isso é maior do que um tamanho de lista, então esse é um teste válido para isso. Então vamos também dar uma olhada no limite superior limite superior não é exatamente o oposto, limite
inferior. É muito relacionado. E o que ele diz é a primeira posição que lista onde o item é maior do que o valor não maior ou igual a, mas maior do que isso. É um limite superior rigoroso em comparação com o limite inferior e novamente, tudo
isso ser expresso em termos de menos do que porque, como dissemos, que comparável a única coisa que tem para nos apoiar em menos do que vai encontrar em muito de bibliotecas padrão. Esta configuração é exatamente a mesma novamente. Vamos configurar o alcance das janelas e eles vão encontrar o ponto médio. Agora, nossa primeira condição varia um pouco das últimas é que em vez de ir para o
lado direito , primeiro vamos para o lado esquerdo, e isto é, se nosso valor for menor que o item no ponto, Vamos para o lado esquerdo. Mas nós não vamos subtrair um, porque a posição em que no meio poderia realmente ser o limite superior se tudo acontecer para realmente muito menor do que ele. Caso contrário, vamos para o lado direito e dizemos moradores no meio mais um. Aqui podemos fazer um meio mais um porque é uma garantia de que o limite superior é estritamente após meio, e fazemos isso até que alto é igual a baixo, e então retornamos baixo, e isso nos dá o limite superior. Então vamos olhar para os exemplos do que acontece lá. Então você tem um limite superior de um Onde está o osso inferior de um era zero limite superior de um If é menos que você diria logo após A. E essa é uma posição para o limite superior de é que a posição para o limite superior de você está logo após você em 10. Então é para depois do oito. E para um item que não é nenhuma lista para ver, o limite superior é o mesmo que o limite inferior porque ele não está na lista. Então estes dois nos dizem onde inseri-lo na única mudança, quando os itens já na lista ele nos diz que lado dele deve colocá-lo dentro. Se vamos fazer em classificações de inserção, você normalmente deseja usar limite superior para fazer uma classificação estável para inserir itens depois
na lista onde difusa, limite
inferior. Mudava a lista o tempo todo. E isso não é o que você quer na minha classe para inserção. Vou falar sobre por que o limite superior é importante aqui se opõe ao limite inferior. Eles têm a ver com fonte estável
7. Código de busca binárias alternado: voltando a esse problema com a pesquisa binária em valores duplicados. Quando eu ajudei para este A nesta lista, Eu disse que poderia ser um valor de zero ou um Geralmente codificar se você está construindo uma biblioteca, esta não é uma boa situação. Um tem. Você não quer ter ambíguo. AP ICE. Você não quer comprar pesquisa. Ele poderia retornar 011 influências pessoa retornar zero. Outra pessoa pontos retorna um. Esse é um mau estado para ter esse tipo de pensamento resultado em um monte de ar está se esgueirando em sua plataforma cruzada de código ou compiladores diferentes. Portanto, não é bom ter coisas como pesquisa que podem retornar resultados diferentes. Eles são ambíguos. Queremos obter um resultado rigoroso no caso de duplicatas. Faz sentido retornar o 1º 1 da lista. Se você fizesse uma pesquisa de camada, qual delas você encontraria? Então você poderia dizer bem são otimização de pesquisa binária Pesquisa linear? Em que caso o 1º 1? A. Ela retornou zero o primeiro 0 Ela retornou oito. Então, como podemos fazer isso? A compra, escreveu
um pesquisador, não se importa. Ele não sabe qual deles encontra. Portanto, há outra maneira de fazer isso usando o limite inferior porque o limite inferior sempre retorna o primeiro 1 na lista se ele estiver lá. Então, no código, eu forneci uma pesquisa binária fora. A principal diferença é que, se houver uma duplicata na lista, ela garantirá que ela retorne. O 1º 1 e eu implementei é em termos de salto mais baixo. Se você tem uma operação de limite inferior, você realmente não precisa influenciar a pesquisa binária. Isso é bom para uma situação de entrevista. Ou, se puder perguntar à pessoa, posso presumir que o limite inferior existe? E você pode evitar a parte problemática de escrever pesquisa binária e apenas usar o limite inferior. Se você estiver procurando por um valor específico, chame o limite inferior no valor. Isto diz que o primeiro lugar foi itens devem ser inseridos na lista. E se há itens na lista, a primeira ocorrência fora disso porque é válido mesmo que ele não fosse a lista. Então a primeira coisa que verificamos é que se o limite inferior é maior do que o comprimento de uma lista , é maior ângulo para. Significa que não está na lista porque diz que o lugar que este item existiria é fora da lista, então ele não pode estar lá dentro. Então devolvemos Nenhum. Se o item no próximo retornado for menor que o valor, bem, então esse também não é o item que queremos, então ele não deve estar na lista. Se o valor for menor do que os itens lá, então você pode retornar, conhecido também, porque não é o item certo. Caso contrário, você retorna mais baixo porque não é menos do que em qualquer direção, menor ou maior do que o que significa que é igual. E é assim que você usa o limite inferior para encontrar um item em uma lista.