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
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:
# ...
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
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
Espero que sirvan de utilidad a la comunidad.
Top comments (1)
XD