• 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
    
    
    							



  • 相关阅读:
    OpenGL3:幼儿园篇 第三章 几何变换
    OpenCV2:应用篇 三维重建
    Word绑定博客园
    Android大学课件SQLite3 数据库操作
    Android Studio导入jar包
    安卓Android基础四天
    学习Android过程中遇到的未解决问题(个人笔记,细节补充,随时更新)
    学习Android过程中遇到的问题及解决方法——电话监听
    学习Android过程中遇到的问题及解决方法——网络请求
    安卓Android基础第三天——数据库,ListView
  • 原文地址:https://www.cnblogs.com/dragonfive/p/3440018.html
Copyright © 2020-2023  润新知