Você está aqui: Python ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca)

Como usar a busca binária em Python - Pesquisa binária na linguagem Python

Quantidade de visualizações: 498 vezes
A busca binária, ou pesquisa binária, é um algoritmo eficiente para encontrar um item em uma lista (vetor ou array) ordenada. Sim, os itens devem, obrigatoriamente, estar ordenados.

O processo é bem simples. A busca binária começa a partir do meio da lista e compara o item nesta posição com o valor sendo pesquisado. Se o valor não for encontrado e for menor que o item no meio da lista, o algoritmo passa para a porção à esquerda da lista, eliminando, assim, metade dos elementos do vetor ou array (a porção maior que o valor pesquisado).

Se o valor não for encontrado e for maior que o item no meio da lista, então a busca reinicia a partir da metade da sub-lista à direita (os itens maiores que o valor pesquisado). Essa divisão continua até que o valor seja encontrado ou não seja mais possível dividir a lista pela metade.

Se um array ou vetor possuir 100 elementos e usarmos a busca binária nele, precisaremos efetuar no máximo 7 tentativas para encontrar o valor desejado. Se a lista possuir 4 bilhões de itens nós teremos que fazer no máximo 32 tentativas.

Isso acontece porque a pesquisa binária é executada em tempo logarítmico, ou seja, log2 n, onde n é a quantidade de itens no vetor. Dessa forma, se tivemos 1.000 itens em um array, log2 1000 = 10 tentativas. Lembre-se de que, na programação log e log2 retornam resultados diferentes: log(10) = 2.302585092994046 enquanto log2(10) = 3.321928094887362. Na análise da busca binária nós usamos sempre log2.

Vamos agora ver como podemos codificar a busca binária em Python. Veja o código a seguir:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# função principal do programa
def main():
  # vamos criar uma lista ordenada de inteiros
  valores = [3, 5, 7, 8, 9, 12, 43, 50, 52, 60]
  print("Os valores da lista são: {0}".format(valores))

  # vamos pedir o item a ser pesquisado
  numero = int(input("Informe o número a ser pesquisado: "))

  # agora vamos pesquisar o número no array usando a pesquisa
  # binária
  # a variável esquerda aponta para o primeiro elemento do vetor
  esquerda = 0
  # a variável direita aponta para o último elemento do vetor
  direita = len(valores) - 1
  # para indicar se o valor foi encontrado
  encontrado = False

  # enquanto houver mais de um elemento a ser comparado
  while esquerda <= direita:
    # obtemos o elemento na metade da lista
    meio = (esquerda + direita) // 2
    
    # fazemos a comparação
    if numero == valores[meio]:
      print("O número foi encontrado no índice {0}".format(
        meio))
      encontrado = True
      break # sai do laço  

    # o item atual é maior que o valor pesquisado?
    if valores[meio] > numero:
      direita = meio - 1
    # o item atual é menor que o valor pesquisado?
    else:
      esquerda = meio + 1

  # o valor foi encontrado?
  if not encontrado:
    print("O valor pesquisado não foi encontrado")  

if __name__== "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

Os valores da lista são: [3, 5, 7, 8, 9, 12, 43, 50, 52, 60]
Informe o número a ser pesquisado: 9
O número foi encontrado no índice 4

Link para compartilhar na Internet ou com seus amigos:

Python ::: wxPython ::: wxFrame

Como definir o ícone para uma janela wx.Frame do wxPython

Quantidade de visualizações: 7221 vezes
Nesta dica mostrarei como usar a função SetIcon() da classe wx.TopLevelWindow para definir o ícone da janela de nossa aplicação wxPython. Observe que, se o ícone não for encontrado, uma mensagem de erro será exibida.

Veja o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos importar a biblioteca Wx
import wx

# vamos criar uma classe que herda de wxFrame
class MinhaJanela(wx.Frame):
  def __init__(self):
    # chamamos o construtor da super classe
    wx.Frame.__init__(self, None, -1, 
      "Cadastro de Clientes", size=(350, 200))
    
    # Define o ícone para a janela
    self.SetIcon(wx.Icon("icone.ico", wx.BITMAP_TYPE_ICO))

if __name__ == "__main__":
  app = wx.App()
  janela = MinhaJanela()
  janela.Show(True)
  app.MainLoop()



Python ::: Dicas & Truques ::: Lista (List)

Como adicionar uma lista Python ao final de outra usando o método extend()

Quantidade de visualizações: 7538 vezes
A função extend() do objeto List da linguagem Python nos permite adicionar todos os elementos de uma determinada lista ao final de outra lista. É claro que qualquer objeto que fornece uma forma de iteração pode ser passado ao método, incluindo uma List, um Set, uma Tuple, etc.

Veja um trecho de código no qual criamos duas listas de inteiros e adicionamos todos os elementos da segunda lista ao final da primeira:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

"""
  Este exemplo mostra como adicionar os elementos
  de uma lista ao final de outra
"""

def main():
  # cria uma lista de inteiros
  valores1 = [2, 5, 12, 2, 3]
  print(valores1)

  # cria uma lista de pontos-flutuantes 
  valores2 = [4.3, 6.43, 8.1]
  print(valores2)

  # insere a segunda lista no final da primeira
  valores1.extend(valores2)

  # exibe o resultado final
  print(valores1)

if __name__== "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

[2, 5, 12, 2, 3]
[4.3, 6.43, 8.1]
[2, 5, 12, 2, 3, 4.3, 6.43, 8.1]


Python ::: Fundamentos da Linguagem ::: Passos Iniciais

Como criar módulos de código reutilizável em Python

Quantidade de visualizações: 8434 vezes
Uma das características da boa programação é reutilizar ao máximo códigos bem testados e independentes. A criação de módulos de funções e definições de classes em Python pode ser feita de forma bem simples.

1) Comece criando um arquivo chamado funcoes.py com o seguinte conteúdo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

"""
  Sou um módulo Python. A única funcionalidade que
  ofereço é uma função que soma dois números
"""

def somar(num1, num2):
  return (num1 + num2)

2) Salve este arquivo no diretório atual de sua aplicação e vamos importá-lo. Para isso escreva um novo programa. Uma sugestão é:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

"""
  Sou o programa principal e vou importar
  o módulo que contém a função somar
"""

import funcoes

def main():
  print(funcoes.somar(3, 5))  
    
if __name__== "__main__":
  main()

3) Execute o programa e veja o resultado.

Para que este programa funcione corretamente, é preciso que o módulo a ser importado esteja no diretório atual ou em qualquer um dos diretórios pesquisados pelo interpretador Python, geralmente representados pelo variável de ambiente PYTHONPATH.

Porém, há situações que queremos agrupar nossos módulos em um diretório dentro do diretório principal da aplicação. O exemplo abaixo mostra como importar um módulo localizado no diretório "lib" da aplicação atual:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

"""
  Sou o programa principal e vou importar
  o módulo que contém a função somar()
"""

# importa o módulo sys
import sys

# acrescenta o diretório lib na variável
# de ambiente PYTHONPATH
sys.path.append(sys.path[0] + '\\lib')

# pode importar funcoes no diretório lib
import funcoes

# pode chamar o método somar agora
def main():
  print(funcoes.somar(3, 5))

if __name__== "__main__":
  main()



Vamos testar seus conhecimentos em

Dimensionamento de lajes maciças à flexão

As lajes maciças são armadas em cruz, quando apresentam a relação entre o maior e o menor vão inferior a 2. Nessas situações, a laje pode ser dimensionada a partir de valores preestabelecidos em tabelas como a de Marcus.

Considere a laje maciça armada em cruz apresentada na figura a seguir:



Dados:

Peso específico do concreto = 25kN/m3
Carga do contrapiso + revestimento = 2,00kN/m2
Carga acidental = 2,50kN/m2
Altura da laje (h) = 10cm
Altura útil (d) = 6cm
Cobrimento nominal = 2,5cm
fcd = fck / 1,4 (considerar concreto de 20MPa)
fyd = fyk / 1,15 (considerar aço CA-50)

Assinale a alternativa correta:

A) A altura de 10cm não é suficiente para resistir ao momento máximo atuante, devendo ser empregada, pelo menos, uma altura de 11cm na laje em questão.

B) A altura de 10cm não é suficiente para resistir ao momento máximo atuante, devendo ser empregada, pelo menos, uma altura de 12cm na laje.

C) A altura de 10cm não é suficiente para resistir ao momento máximo atuante, devendo ser empregada, pelo menos, uma altura de 13cm na laje.

D) A altura de 10cm não é suficiente para resistir ao momento máximo atuante, devendo ser empregada, pelo menos, uma altura de 14cm na laje.

E) A altura de 10cm não é suficiente para resistir ao momento máximo atuante, devendo ser empregada, pelo menos, uma altura de 15cm na laje.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Fases de uma obra

Em relação aos conceitos envolvidos na elaboração de um orçamento de obras, assinale a alternativa correta.

A) Custos diretos são aqueles em que é necessário estipular um fator de rateio para que sejam apropriados aos serviços.

B) Devem ser incluídas no título "desmobilização" de um orçamento as despesas com locação, fechamento, tapumes, demolições e relocações.

C) A administração do canteiro de obras e as despesas decorrentes da administração da empresa fazem parte dos custos diretos de uma obra.

D) Como regra, orçam-se os preços na construção civil por serviço, determinando-os segundo a produção de composições unitárias.

E) Em um solo, caso seja necessário escavar 1 m3 do terreno, deve-se orçar, no item referente à escavação do material, o valor 1,4 m3.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Analise o seguinte trecho de código JavaScript

var valores = new Array(2, 4);

Este código

A) cria uma matriz chamada valores com 2 linhas e 4 colunas.

B) cria um array valores e atribui os valores 2 e 4 para valores[1] e valores[2].

C) cria um array valores e atribui os valores 2 e 4 para valores[0] e valores[1].

D) cria um array de três elementos com os índices variando de 2 até 4.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Dimensionamento de Redes de Distribuição de Água

Qual o número de habitantes se deve atingir para que um bloco populacional que hoje é atendido pela tubulação de 150 mm de diâmetro, e cada habitante consome em média 300 L/dia, tendo uma vazão no sistema de 6,5 L/s, ao qual ainda consegue atender bem atualmente? Busque consultar a tabela da norma ABNT que indica a vazão máxima para cada diâmetro de tubulação.



A) 5000 habitantes

B) 5520 habitantes

C) 3000 habitantes

D) 652 habitantes

E) 2256 habitantes
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Qual é a forma correta de se criar um array em JavaScript?

A) var cores = ["vermelho", "verde", "azul"];

B) var cores = (1: "vermelho", 2: "verde", 3: "azul");

C) var cores = "vermelho", "verde", "azul";

D) var cores = 1: ("vermelho"), 2: ("verde"), 3: ("azul");
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de Python

Veja mais Dicas e truques de Python

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 46 usuários muito felizes estudando em nosso site.