银行家算法的python代码实现,感觉python写算法简直要起飞

Posted 杨东冀@pku

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银行家算法的python代码实现,感觉python写算法简直要起飞相关的知识,希望对你有一定的参考价值。

上操作系统课,学到死锁,老师讲了银行家算法,正好在图书馆,用了1个多小时写出来,用python写算法发现自己最大的问题是有些语法一直学的不是很深入,查了半天函数的用法啊喂!!!坑爹,具体算法相信大家都懂,就不和大家赘述了,代码可能会有些bug,功能也不是很完善,希望大家给出批评指正!

import numpy as np
avaResour = np.array([3,3,2])
allocation = np.array([[0,1,0],[2,0,0],[3,0,2],[2,1,1],[0,0,2]])
maxRequest = np.array([[7,5,3],[3,2,2],[9,0,2],[2,2,2],[4,3,3]])
need = np.array([[7,4,3],[1,2,2],[6,0,0],[0,1,1],[4,3,1]])
askResource=np.array([0,0,0])

def BankerAllgorithm():
    global avaResour,allocation,maxRequest,need,askResource
    print "thread num 5,res num 3"
    print "res available :"
    for x in avaResour:
        print x
    print("the max request :")
    for x in maxRequest:
        print x
    print "allocation :"
    for  x in allocation:
        print x
    print "need :"
    for x in need:
        print x    

    RequestThreadNum = input("enter the request thread number :from 0 -> 4 : ")
    #test RequestThreadNum is ok
    while RequestThreadNum>4 or RequestThreadNum<0:
        print("please enter the correct number ! From 0 - 4 : ")
        RequestThreadNum = input("enter the number : ")

   #input
    print "please enter  number of resources,the format is  x x x : "
    for x in xrange(0,3):
        askResource[x] = input()

    if askResource[x]<=need[RequestThreadNum][x]:
        print("Bankalgorithm is running ...biubiubiu...waiting...")
        if askResource[x]<=avaResour[x]:
            avaResour =avaResour - askResource
            allocation = allocation + askResource
            need[RequestThreadNum] = need[RequestThreadNum] - askResource
            print "Trial allocation is ok !"
            if (safeTest()):
                print "begin to allocation res to "+RequestThreadNum 
                print "allocation is ok,res has been refreshed"
                for x in xrange(0,5):
                    if  need[x]==0:
                        for y in xrange(0,3):
                            avaResour[y] = avaResour[y] + allocation[x][y]
                            allocation[x][y] = 0                                
            else:
                print "Trial allocation is wrong ,we are trying to get back to last statue!"
                avaResour = avaResour + askResource
                allocation = allocation - askResource
                need = need +askResource
        else:
            print "there is not enough resource now , try to wait for sometime!"
    else:
        print "error ! askResource is bigger than need"


def safeTest():   #安全性检查    
    global avaResour,allocation,maxRequest,need,askResource
    s=0;m=0;z=0;r=[0,0,0,0,0];y=0;work=[0,0,0];finish = [0,0,0,0,0]
    print "enter safety test ..."
    work = avaResour
    for x in xrange(0,5):
        for y in xrange(0,5):
            if finish[y]==0 and need[y][0]<=work[0] and need[y][1]<=work[1] and need[y][2]<=work[2]:
                for z in xrange(0,3):
                    work[z] = work[z] + allocation[y][z]
                finish[y] =1;r[y] =s;
                y +=y

    if y==5:
        print "find a safety order"
        for x in xrange(0,3):
            print "P " +r[2*x]+"-->"+" P "+r[2*x +1]+"-->"
        print " P "+ r[4] +" pass safety test"
        return 1
    else:
        return 0

if __name__ == '__main__':
    BankerAllgorithm()

以上是关于银行家算法的python代码实现,感觉python写算法简直要起飞的主要内容,如果未能解决你的问题,请参考以下文章

关于旅行家TSP问题的几种算法 python

机器学习实战python3 K近邻(KNN)算法实现

(OpenCV/Python)实现OCR银行票据

Python 进化算法的简单介绍和实现

Python 进化算法的简单介绍和实现

Python 进化算法的简单介绍和实现