python实现马耳可夫链算法实例分析

967次阅读  |  发布于5年以前

本文实例讲述了python实现马耳可夫链算法的方法。分享给大家供大家参考。具体分析如下:

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

说明:

1. 程序使用了字典,字典和散列可不是一个东西,字典是键值对的集合,而散列是一种能够常数阶插入,删除,不过可以用散列来实现字典。
2. 字典的setdefault()方法使得程序少了许多条件判断。
3. random.choice()可以随机取出一个序列中的元素。
4. 每两个前缀词确定一个后缀。

实现代码:


    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

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8