DEV Community

Algorítmica moderna

Este es un anuncio muy especial. En estos momentos, he liberado por fin mi biblioteca Modalg, de algoritmos para búsqueda y ordenación.

La biblioteca comienza con una reflexión sobre el infinito, el sentido de la vida y todo, que es rápidamente resuelto.

end = ...   # A reflection on infinity
Enter fullscreen mode Exit fullscreen mode

Después, entramos en el algoritmo de búsqueda. Estadísticamente, buscamos primero en los lugares más típicos donde se encuentran todos los elementos que nos piden buscar: al comienzo, al final, y en el medio.

    # más cosas...
    if len(l) > 0:
        if l[0] == x:
            pos = 0
        elif l[-1] == x:
            pos = len(l) - 1
        elif l[len(l) // 2] == x:
            pos = len(l) // 2
        else:
        # ...
Enter fullscreen mode Exit fullscreen mode

Aquí es donde entra el nivel metafísico y lo divino se compenetra con lo humano: generamos una secuencia elevadamente inspirada que nos permitirá consultar la lista y encontrar el elemento, si Dios quiere, en O(1).

        pray()
        sequence = list(range(len(l)))
        random.shuffle(sequence)

        for i in sequence:
            if l[i] == x:
                pos = i
                break
            end
        end
Enter fullscreen mode Exit fullscreen mode

El algoritmo de ordenación es mucho más sutil. Divide la lista en mitades, y ordena cada mitad, hasta llegar a trozos de lista de tamaño 2, o menores. En ese caso, vuelve a invocar la intervención divina para ordenar esos pequeños trozos, y finalmente combinarlos en una sola lista.

def sort(l:list) -> list:
    toret = []

    if len(l) > 2:
        middle = len(l) // 2
        toret = combine_sorted(sort(l[0:middle]), sort(l[middle:]))
    else:
        toret = l

        while (len(l) > 1
        and l[0] > l[1]):
            pray()
            random.shuffle(l)
            toret = l
        end
    end

    return toret
end
Enter fullscreen mode Exit fullscreen mode

Espero que sirvan de utilidad a la comunidad.

Top comments (1)

Collapse
 
franciscoortin profile image
Francisco Ortin

XD