python学习应用笔记(一)

       之前一直用c++写程序  所以考虑程序一般都比较容易往数据结构的方向想 而自己设计数据结构往往要费很大事  昨天看了一下python  发现脚本语言 真是厉害    用来进行模拟运算确实不错  可以先想个解决问题的思路 用python 先测试一下  如果可行 如果为了运行效率 使用c++改写  确实是一个不错的选择

      昨天在看操作系统的时候看到这么一个题目  


这个题目是操纵系统中典型的为多个进程分配资源 最后达到安全状态的题目,可以理解为找一条安全路径

如果使用c++来写 那就用深度优先搜索算法  然后就要慢慢思考解决办法了 , 为了练习刚刚学习的python 我使用python的 numpy来解决这个问题

因为还没有学怎么写函数  所以写成四个循环了 不过算法复杂度应该差不多, 准备再学一段时间后 优化一下


import numpy
a=numpy.array(([1,1,2,4],
   [0,1,2,2],
   [1,1,1,0],
   [1,1,1,1]))
b=numpy.array(([1,2,3,6],
   [1,1,2,2],
   [1,2,1,1],
   [1,1,2,3]))
c=numpy.array([0,1,0,1])

d=b-a


for i in range(0,4):
	j = 0
	for j in range(0,4):
		if d[i][j]>c[j]:
			break
#	print 'e'
#	if j==3 and d[i][j]<=c[j]:
	else:
		e=numpy.array([0,0,0,0])
		f=c
		e[i]=1
		f=f+d[i]
		d[i]=numpy.array((0,0,0,0))
		
		for k in range(0,4):
			if e[k]==1:
				continue
			n = 0
			for n in range(0,4):
				if d[k][n]>f[j]:
					break;
#			if n==3 and  d[k][n]<=f[j]:
			else:
				
				
				e[k]=1
				f=f+d[k]
				d[k]=numpy.array((0,0,0,0))
				for m in range(0,4):
					if e[m]==1:continue
					p = 0
					for p in range(0,4):
						if d[m][p]>f[p]:break
#					print p
#					print m
#					if p==3 and d[m][p]<=f[p]:
					else:
						
						
						e[m]=1
						f=f+d[m]
						d[m]=numpy.array((0,0,0,0))
						for q in range(0,4):
							if e[q]==1:continue
							r = 0
							for r in range(0,4):
								if d[q][r]>f[r]:break
#							if r==3 and  d[q][r]<=f[r]:
							else:
								print i+1
								print k+1
								print m+1
								print q+1
#								print 'heihei'
								exit()
								
						d[m]=b[m]-a[m]
						e[m]=0
				d[k]=b[k]-a[k]
				e[k]=0
		d[i]=b[i]-a[i]
		e[i]=0


							



原文地址:https://www.cnblogs.com/dragonfive/p/3440018.html