Python 随即生成DAG(有向无环图)
2013-08-22 18:34
260 查看
给校队选拔赛出了道DAG上的背包问题,需要生成DAG数据。
最开始使用的方法是先随机生成再判环,如果有环就重新生成。这种方法得到DAG的概率随着点数和边数的增加而急速降低,为了一个DAG要生成很多次,等很长时间。然后觉得这样的方法很stupid。。。
听了好甜给的先生成拓扑序的构造方法,这样可以保证生成的图里面没有环。
首先随机生成一个 1 到N 的permutation。这个permutation就是DAG的拓扑序,然后每次随机从前往后连边,这样就可以保证生成的是一个DAG了。真心膜拜
Life is short ,Use Python
最开始使用的方法是先随机生成再判环,如果有环就重新生成。这种方法得到DAG的概率随着点数和边数的增加而急速降低,为了一个DAG要生成很多次,等很长时间。然后觉得这样的方法很stupid。。。
听了好甜给的先生成拓扑序的构造方法,这样可以保证生成的图里面没有环。
首先随机生成一个 1 到N 的permutation。这个permutation就是DAG的拓扑序,然后每次随机从前往后连边,这样就可以保证生成的是一个DAG了。真心膜拜
Life is short ,Use Python
from random import shuffle as sl from random import randint as rd def gn(): num = rd(1,1000) return num def w2f(f,num,fg): f.write(str(num)) if fg==True: f.write('\n') else: f.write(' ') def DataMake(c): MAXL =100000; f = open('data'+str(c)+'.in','w') n = 1000 node = range(1,n+1) sl(node) sl(node) m = rd(1,min(n*n,5000)) w2f(f,n,0);w2f(f,m,1) for i in range(0,m): p1 = rd (1,n-1) p2 = rd (p1+1,n) x = node[p1-1] y = node[p2-1] l = rd(1,MAXL) w = gn() w2f(f,x,0);w2f(f,y,0);w2f(f,l,0);w2f(f,w,1) k = gn() w2f(f,k,1) for i in range(0,k): w2f(f,gn(),1) print n,' node',m,' edges',k,'Queries' f.close() DataMake(1) print 'Done'
相关文章推荐
- Python 随机生成DAG(有向无环图)
- python3 生成随即激活码
- python实例31[生成随即的密码]
- python实例31[生成随即的密码]
- python和java生成随即序列
- python实例31[生成随即的密码]
- python[生成随即的密码]
- 有向无环图(DAG)的最小路径覆盖
- python动态生成写文件变量
- [PYTHON] 生成python doc
- python-wordcloud模块生成词云
- linux下如何编译python生成libpython2.5.so动态库
- 用SIP来生成C/C++/Qt库的Python绑定(二)
- python学习笔记(20)--生成点拨【已放弃】
- Pyhton每日练习 08 使用 Python 生成类似于下图中的字母+数字验证码图片
- 生成目录下文件名(Python & Win10 CMD)
- 学习Python (5)生成随机密码
- python生成随机数组【转】
- python学习笔记(21)--新建html乱码(给每本漫画生成一个html)
- 生成随即组合的方法