aasdadwe 2023-02-16 14:47 采纳率: 85.7%
浏览 194
已结题

python 关于银行家算法(banker)

请根据提供的python代码完善银行家算法,本代码现在能够根据提供MAX举证和allocation矩阵计算得到need矩阵,现在需要的功能如果系统处于安全状态,则打印安全序列,不行的话则打印该系统是不安全的状态。请不要直接从网上粘贴源代码来使用,会进行代码查重,请使用自己的方法去完成。希望能够添加注释。不使用numpy

img


p指的是进程的数量,r指的是资源的数量,ar指的是每个资源的可用资源数量
使用我图片上数列
安全序列的答案应该是1,3,4,0,2 或者1,3,4,2,0

  • 写回答

11条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-16 14:52
    关注

    基于Monster 组和GPT的调写:
    以下是基于提供的银行家算法代码的完整实现,包括计算安全状态和打印安全序列等功能:

    p = 5  # 进程数量
    r = 3  # 资源种类数量
    ar = [10, 5, 7]  # 各资源总数
    
    # 最大需求矩阵
    max_matrix = [
        [7, 5, 3],
        [3, 2, 2],
        [9, 0, 2],
        [2, 2, 2],
        [4, 3, 3]
    ]
    
    # 分配矩阵
    alloc_matrix = [
        [0, 1, 0],
        [2, 0, 0],
        [3, 0, 2],
        [2, 1, 1],
        [0, 0, 2]
    ]
    
    # 需求矩阵
    need_matrix = []
    for i in range(p):
        need_matrix.append([0] * r)
        for j in range(r):
            need_matrix[i][j] = max_matrix[i][j] - alloc_matrix[i][j]
    
    # 可用资源向量
    avail_vector = []
    for j in range(r):
        avail_vector.append(ar[j] - sum(alloc_matrix[i][j] for i in range(p)))
    
    # 安全检查函数
    def is_safe(need_matrix, alloc_matrix, avail_vector, safe_seq):
        # 初始化工作
        work = avail_vector.copy()
        finish = [False] * p
    
        # 找到一个安全序列
        while True:
            # 找到可以满足当前需求的进程
            found = False
            for i in range(p):
                if not finish[i] and all(need_matrix[i][j] <= work[j] for j in range(r)):
                    found = True
                    break
    
            # 如果找不到这样的进程,则退出循环
            if not found:
                break
    
            # 满足进程需求并释放资源
            for j in range(r):
                work[j] += alloc_matrix[i][j]
            finish[i] = True
            safe_seq.append(i)
    
        # 如果所有进程都在安全序列中,则系统安全
        if all(finish):
            return True
        else:
            return False
    
    # 执行安全检查并输出结果
    safe_seq = []
    if is_safe(need_matrix, alloc_matrix, avail_vector, safe_seq):
        print("安全序列:", end="")
        for i in safe_seq:
            print(i, end=" ")
    else:
        print("不安全的状态")
    
    

    代码计算出了需要矩阵 need_matrix,然后使用银行家算法的流程来检查系统是否处于安全状态。在银行家算法中,首先将可用资源向量 work 初始化为可用资源的数量,所有进程的完成状态 finish 初始化为 False,安全序列 safe_sequence 初始化为空列表。然后不断循环,直到找不到满足条件的进程为止。在每次循环中,遍历所有未完成的进程,如果进程 i 的需求小于等于可用资源,则将其加入安全序列,并将其所需的资源释放出来。如果找不到满足条件的进程,则退出循环。最后检查所有进程是否都能够完成,如果是,则打印安全序列;否则,打印系统处于不安全状态。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 修改了问题 2月16日
  • 修改了问题 2月16日
  • 展开全部

悬赏问题

  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了