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





							


 


 

你可能感兴趣的:(python)