CodeGym /Curso de Java /Python SELF ES /Métodos ingenuos

Métodos ingenuos

Python SELF ES
Nivel 59 , Lección 0
Disponible

1.1 Definición de métodos ingenuos

Métodos ingenuos (solución directa) son enfoques simples y directos para resolver problemas que a menudo no están optimizados para tiempo o memoria. Se basan en pasos básicos y obvios, sin tener en cuenta optimizaciones más complejas.

Estos métodos pueden ser útiles para comprender inicialmente el problema o como una variante básica con la que se pueden comparar algoritmos más complejos.

Ventajas:

1. Facilidad de implementación:

Los métodos ingenuos a menudo son fáciles de entender e implementar, lo que los convierte en un buen punto de partida para resolver un problema.

2. Claridad:

Estos métodos se basan en un enfoque directo, lo que los hace fácilmente explicables y comprensibles para los recién llegados.

3. Evaluación inicial:

Pueden servir como una variante básica para comparar con algoritmos más complejos y optimizados.

Desventajas:

1. Bajo rendimiento:

Los métodos ingenuos a menudo tienen una alta complejidad temporal, lo que los hace inadecuados para trabajar con grandes volúmenes de datos.

2. Ineficiencia:

Pueden usar más recursos de los necesarios debido a la falta de optimizaciones.

3. Aplicabilidad limitada:

Estos métodos pueden ser poco prácticos para problemas complejos o para problemas que requieren soluciones altamente eficientes.

1.2 Ejemplos de tareas simples

Ejemplos de tareas resueltas mediante métodos ingenuos:

Verificación de la primalidad de un número:

El método ingenuo consiste en verificar la divisibilidad del número por todos los números del 2 al 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

# Ejemplo de uso:
number = 29
print(is_prime(number))  # Salida: True

Cálculo del máximo común divisor (MCD):

El método ingenuo consiste en verificar todos los números del 1 al mínimo de los dos números y encontrar el mayor 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

# Ejemplo de uso:
a = 48
b = 18
print(gcd_naive(a, b))  # Salida: 6

1.3 Ejemplos de tareas más complejas

Búsqueda de subcadenas en una cadena:

El método ingenuo consiste en verificar secuencialmente cada posible posición de la subcadena en la cadena.


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

# Ejemplo de uso:
text = "hello world"
pattern = "world"
print(naive_search(text, pattern))  # Salida: 6

Encontrar los pares de puntos más cercanos:

El método ingenuo consiste en verificar la distancia entre cada par de puntos y encontrar la distancia 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

# Ejemplo de uso:
points = [(1, 2), (3, 4), (5, 6), (7, 8)]
print(closest_pair_naive(points))  # Salida: ((1, 2), (3, 4)), 2.8284271247461903

Todos estos algoritmos se pueden mejorar, pero, antes de mejorar algo, escribe la solución directa. Tal vez, si se llama una o dos veces, te será suficiente.

Cuanto más simple sea la solución, menos errores y problemas ocultos tendrá. En una solución simple es fácil agregar nueva funcionalidad. Tal código es fácil de leer y entender. La optimización prematura es la raíz de todos los males.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION