Jan
Muitas vezes para resolver uma única instância de um problema é mais rápido ataca-lo com força bruta do que encontrar um algoritmo geral com uma boa ordem de complexidade. Permutações são de grande utilidade nesse tipo de abordagem.
Permutações em Prolog:
Esse é um código em Prolog que o Wladimir Araujo passou na cadeira de IA.
select(X, [XXs], Xs). select(X, [Y Ys], [Y Zs]) :- select(X, Ys, Zs). permutar([], []). permutar(Xs, [Z Zs]) :- select(Z, Xs, Ys), permutar(Ys, Zs).
Permutações em Python:
Esse é um código de um certo Michael Davies que eu tirei daqui. Ele gera uma lista com todas as permutações de uma lista. Muito bonitinho.
def all_perms(str): if len(str) <=1: yield str else: for perm in all_perms(str[1:]): for i in range(len(perm)+1): yield perm[:i] + str[0:1] + perm[i:]
Um exemplo de uso:
>>> for p in all_perms(['a','b','c']): print p ['a', 'b', 'c'] ['b', 'a', 'c'] ['b', 'c', 'a'] ['a', 'c', 'b'] ['c', 'a', 'b'] ['c', 'b', 'a']
Outras implementações:
Em outras linguagens o código para gerar permutações geralmente é muito grande, então eu preferi deixar alguns links.
Tags: , C, ia, inteligência artificial, Java, listas, Prolog, Python, Ruby, Wladimir









