Robert Berman wrote:
Hi,

The below script which prints anagrams available for any word available within a given database. It does work, but it is not very fast. I am relatively certain there are more Python friendly coding techniques but I am more concerned with a faster algorithm.

You might consider looking up the permutations only (up to some length -- there are a lot of permutations for 8+ letter words :)

#from http://www.daniweb.com/code/snippet459.html

def permutate(seq):
    """permutate a sequence and return a list of the permutations"""
    if not seq:
        return [seq]  # is an empty sequence
    else:
        temp = []
        for k in range(len(seq)):
            part = seq[:k] + seq[k+1:]
            #print k, part  # test
            for m in permutate(part):
                temp.append(seq[k:k+1] + m)
                #print m, seq[k:k+1], temp  # test
        return temp

print permutate('myth')

['myth', 'myht', 'mtyh', 'mthy', 'mhyt', 'mhty', 'ymth', 'ymht', 'ytmh', 'ythm', 'yhmt', 'yhtm', 'tmyh', 'tmhy', 'tymh', 'tyhm', 'thmy', 'thym', 'hmyt', 'hmty', 'hymt', 'hytm', 'htmy', 'htym']

>>> print len(permutate('mythsdfw'))
40320
>>> print len(permutate('mythsdf'))
5040
>>> print len(permutate('mythsd'))
720
>>> print len(permutate('myths'))
120
>>> print len(permutate('myth'))
24
>>> print len(permutate('myt'))
6

so something like:

print [ xx for xx in permutate('myths') if xx in worddict ]


HTH,

Emile

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to