Escribí un tipo O (n!) Para mi diversión que no se puede trivialmente optimizar para ejecutarlo más rápido sin reemplazarlo por completo. [Y no, no solo asigné aleatoriamente los artículos hasta que fueron ordenados].¿Cómo escribo un género peor que O (n!)
¿Cómo podría escribir un tipo Big-O aún peor, sin solo agregar basura extraña que podría extraerse para reducir la complejidad del tiempo?
http://en.wikipedia.org/wiki/Big_O_notation tiene varias complejidades de tiempo ordenadas en orden creciente.
Editar: He encontrado el código, aquí está mi orden determinista O (n!) Con divertido truco para generar la lista de todas las combinaciones de una lista. Tengo una versión ligeramente más larga de get_all_combinations que devuelve un iterable de combinaciones, pero desafortunadamente no pude convertirlo en una sola declaración. [Con suerte no he introducido errores mediante la fijación de los errores tipográficos y la eliminación de guiones en el código de abajo]
def mysort(somelist):
for permutation in get_all_permutations(somelist):
if is_sorted(permutation):
return permutation
def is_sorted(somelist):
# note: this could be merged into return... something like return len(foo) <= 1 or reduce(barf)
if (len(somelist) <= 1): return True
return 1 > reduce(lambda x,y: max(x,y),map(cmp, somelist[:-1], somelist[1:]))
def get_all_permutations(lst):
return [[itm] + cbo for idx, itm in enumerate(lst) for cbo in get_all_permutations(lst[:idx] + lst[idx+1:])] or [lst]