CodeGym /Cursos /Python SELF PT /Métodos Ingênuos

Métodos Ingênuos

Python SELF PT
Nível 59 , Lição 0
Disponível

1.1 Definição de métodos ingênuos

Métodos ingênuos (solução "força bruta") — são abordagens simples e diretas para resolver problemas, que frequentemente não são otimizadas em termos de tempo ou memória. Elas se baseiam em passos básicos, óbvios, sem considerar otimizações mais complexas.

Esses métodos podem ser úteis para um entendimento inicial do problema ou como uma opção básica para comparar com algoritmos mais sofisticados.

Vantagens:

1. Simplicidade de implementação:

Métodos ingênuos muitas vezes são fáceis de entender e implementar, o que os torna um bom ponto de partida para resolver um problema.

2. Clareza:

Esses métodos são baseados em uma abordagem direta, o que os torna fáceis de explicar e entender para iniciantes.

3. Avaliação inicial:

Eles podem servir como uma opção básica para comparação com algoritmos mais complexos e otimizados.

Desvantagens:

1. Baixo desempenho:

Métodos ingênuos frequentemente têm alta complexidade temporal, o que os torna inadequados para trabalhar com grandes volumes de dados.

2. Ineficiência:

Eles podem usar mais recursos do que o necessário, devido à falta de otimizações.

3. Aplicabilidade limitada:

Esses métodos podem ser impraticáveis para tarefas complexas ou para problemas que requerem soluções altamente eficientes.

1.2 Exemplos de problemas simples

Exemplos de problemas resolvidos por métodos ingênuos:

Verificação de número primo:

O método ingênuo consiste em verificar a divisibilidade de um número por todos os números de 2 a n-1.


def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

# Exemplo de uso:
number = 29
print(is_prime(number))  # Saída: True

Cálculo do maior divisor comum (MDC):

O método ingênuo consiste em verificar todos os números de 1 até o mínimo entre dois números e encontrar o maior divisor.


def gcd_naive(a, b):
    gcd = 1
    for i in range(1, min(a, b) + 1):
        if a % i == 0 and b % i == 0:
            gcd = i
    return gcd

# Exemplo de uso:
a = 48
b = 18
print(gcd_naive(a, b))  # Saída: 6

1.3 Exemplos de problemas mais complexos

Busca de substring em uma string:

O método ingênuo consiste em verificar sequencialmente cada posição possível da substring na string.


def naive_search(text, pattern):
    n = len(text)
    m = len(pattern)
    for i in range(n - m + 1):
        match = True
        for j in range(m):
            if text[i + j] != pattern[j]:
                match = False
                break
        if match:
            return i
    return -1

# Exemplo de uso:
text = "hello world"
pattern = "world"
print(naive_search(text, pattern))  # Saída: 6

Encontrar pares de pontos mais próximos:

O método ingênuo consiste em verificar a distância entre cada par de pontos e encontrar a distância mínima.


import math

def closest_pair_naive(points):
    min_distance = float('inf')
    closest_pair = None
    n = len(points)
    for i in range(n):
        for j in range(i + 1, n):
            distance = math.dist(points[i], points[j])
            if distance < min_distance:
                min_distance = distance
                closest_pair = (points[i], points[j])
    return closest_pair, min_distance

# Exemplo de uso:
points = [(1, 2), (3, 4), (5, 6), (7, 8)]
print(closest_pair_naive(points))  # Saída: ((1, 2), (3, 4)), 2.8284271247461903

Todos esses algoritmos podem ser melhorados, mas antes de melhorar algo — escreva a solução "força bruta". Talvez, se for chamado uma ou duas vezes, seja suficiente para você.

Quanto mais simples a solução, menos erros e problemas ocultos ela terá. Em uma solução simples, é fácil adicionar nova funcionalidade. O código assim é fácil de ler e entender. A otimização prematura é a raiz de todos os males.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION