设计一个资源池,以下三个操作满足O(1)复杂度:(1)从未分配的资源中分配一块资源;(2)从已分配的资源中释放指定资源;(3)随机访问一块已分配的资源。大致意思是这样。
class ResourcePool:
def __init__(self, cap):
self.rc = [i+1 for i in range(cap)]
self.rc[cap-1] = None
self.free = 0
self.allocated = -1
def alloc(self):
rc = None
if self.free is None:
return None
rc = self.free
self.free = self.rc[self.free]
return rc
def release(self, i):
self.rc[i] = self.free
self.free = i
def __str__(self):
return str(self.rc) + "free:" + str(self.free)
if __name__ == "__main__":
rp = ResourcePool(10)
print(rp)
for i in range(5):
print(rp.alloc())
print(rp)
for i in range(0, 5, 2):
rp.release(i)
print(rp)