Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117357
  • 博文数量: 23
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 20:44
文章分类
文章存档

2011年(23)

分类: Python/Ruby

2011-08-16 20:52:58

为什么我要用Python实现一些算法?
这是因为,使用Python能不用考虑一些数据类型的定义,以及内存使用和指针操作方面的问题,对于插入和删除操作更方便,避免一些与算法核心无关的细节,更能突出算法的框架。

针对邻接矩阵的算法实现:
AdjMatrixT.py :
  1. #! /usr/bin/python
  2. # filename : AdjMatrixT.py
  3. # author : Jesse
  4. # update : 2011/08/15 14:24

  5. adjmatrix = [[0, 1, 0, 1], [0, 0, 1, 0], [0, 1, 0, 1], [0, 1, 0, 0]]
  6. v = len(adjmatrix)

  7. print 'before transposing :'
  8. for i in range(v) :
  9.     print adjmatrix[i]

  10. for r in range(v) :
  11.     for c in range(r, v) :
  12.         adjmatrix[c][r] = adjmatrix[r][c] ^ adjmatrix[c][r]
  13.         adjmatrix[r][c] = adjmatrix[r][c] ^ adjmatrix[c][r]
  14.         adjmatrix[c][r] = adjmatrix[r][c] ^ adjmatrix[c][r]

  15. print 'after transposing :'
  16. for i in range(v) :
  17.     print adjmatrix[i]


针对邻接表的算法实现:
AdjListT.py :
  1. #! /usr/bin/python
  2. # filename : AdjListT.py
  3. # author : Jesse
  4. # update : 2011/08/15 15:00

  5. adjlist = [[2, 4], [3], [2, 4], [2]]
  6. v = len(adjlist)

  7. print 'before transposing :'
  8. for i in range(v) :
  9.     print i+1, ' ', adjlist[i]

  10. newadjlist = adjlist[:]        # copy adjlist to newadjlist
  11. for i in range(v) :            # clear the newadjlist
  12.     newadjlist[i] = []

  13. for i in range(v) :
  14.     for e in adjlist[i] :
  15.         newadjlist[e-1].append(i+1)        # - and +

  16. print 'after transposing :'
  17. for i in range(v) :
  18.     print i+1, ' ', newadjlist[i]
说明: 这个程序关键是列表的复制和清空,以及对于索引的使用(列表是从0开始计数,但是我们图的结点是从1开始标号的!
阅读(2136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~