OD-内存池分配(python)

内存池

题目描述

有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源。
用户会进行一系列内存申请,需要按需分配内存池中的资源,返回申请结果成功失败列表。
分配规则如下:

  1. 分配的内存要大于等于内存的申请量
    存在满足需求的内存就必须分配
    优先分配粒度小的,但内存不能拆分使用
  2. 需要按申请顺序分配
    先申请的先分配,有可用内存分配则申请结果为true
    没有可用则返回false
  • 注释:不考虑内存释放

输入描述

输入为两行字符串:
第一行为内存池资源列表,
包含内存粒度数据信息,粒度数据间用逗号分割,
一个粒度信息内用冒号分割,冒号前为内存粒度大小,冒号后为数量,
资源列表不大于1024
每个粒度的数量不大于4096
第二行为申请列表,
申请的内存大小间用逗号分割,申请列表不大于100000

64:2,128:1,32:4,1:128
50,36,64,128,127

输出描述

输出为内存池分配结果
true,true,true,false,false

示例一

输入

64:2,128:1,32:4,1:128
50,36,64,128,127

输出

true,true,true,false,false

说明

内存池资源包含:64k2个、128k1个、32k4个、1k128个的内存资源
针对50,36,64,128,127的内存申请序列,
分配的内存依次是,64,64,128,null,null
第三次申请内存时已经将128分配出去,因此输出的结果是
true,true,true,false,false

 

# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/27
Time: 22:49
Author: kang
"""


def memory_allocation(resources, apply):
    memory_pool = {}
    for i in resources.split(","):
        size, num = map(int, i.split(":"))
        memory_pool[size] = num
    memory_pool = dict(sorted(memory_pool.items(), key=lambda x: x[0]))
    print(memory_pool)
    use_memory = list(map(int, apply.split(",")))
    print(use_memory)
    result = []
    for j in use_memory:
        sign = 'false'
        for k in memory_pool.keys():
            if j < k:
                if memory_pool[k] > 0:
                    memory_pool[k] = memory_pool[k] - 1
                    sign = 'true'
                    break
        result.append(sign)
    print(" ".join(result))


if __name__ == "__main__":
    resources = input().strip()
    apply = input().strip()
    memory_allocation(resources, apply)

 

你可能感兴趣的:(python,算法)