python兑现马耳可夫链算法

python实现马耳可夫链算法
       在《程序设计实践》(英文名《The Practice of Programming》)的书中,第三章分别用C语言,C++,AWK和Perl分别实现了马耳可夫链算法,来通过输入的文本,“随机”的生成一些有用的文本。


import random
import sys

MAXGEN = 10000
NONWORD = '\n'
w1 = w2 = NONWORD

statetab = {}
text = sys.stdin.read()
words = text.split()
for word in words:
    statetab.setdefault((w1, w2),[]).append(word)
    w1, w2 = w2, word

# add tail
statetab.setdefault((w1, w2),[]).append(NONWORD)

# show mar words
w1 = w2 = NONWORD
for i in xrange(MAXGEN):
    suf = statetab[(w1,w2)]
    t = random.choice(suf)
    if t == NONWORD:
	break
    print t
    w1, w2 = w2, t

说明:

1,程序使用了字典,字典和散列可不是一个东西,字典是键值对的集合,而散列是一种能够常数阶插入,删除,不过可以用散列来实现字典。

2,字典的setdefault()方法使得程序少了许多条件判断。

3,random.choice()可以随机取出一个序列中的元素。

4,每两个前缀词确定一个后缀。

作者:aiqier

****博客:http://blog.****.net/aiqier627