虚拟机部署贪心法实现

考虑到在虚拟机部署中资源提供商通常希望自己的收益最大化,现假设有一台宿主机,共有x个cpu和y GB的内存,用户可以采取自己报价的方式向资源提供商申请使用虚拟机资源,譬如说付w元申请a个cpu和b GB内存的一台虚拟机。请你设计一个算法,让资源提供商可以合理地安排虚拟机,使得自己的收益最大化。

输入:

n x y

2 4 200

4 2 150

考虑到在虚拟机部署中资源提供商通常希望自己的收益最大化,现假设有一台宿主机,共有x个cpu和y GB的内存,用户可以采取自己报价的方式向资源提供商申请使用虚拟机资源,譬如说付w元申请a个cpu和b GB内存的一台虚拟机。请你设计一个算法,让资源提供商可以合理地安排虚拟机,使得自己的收益最大化。

输入:

n x y

2 4 200

4 2 150

 

贪心法就是选择一种目前最好的策略来实现,而不从整体来看,本题就可以选择单位cpu价钱最高来实现

 

import sys




a = list(map(int, input().split()))  # 用数组a来存储参与报价的用户的个数云端要存储的cpu个数,容量大小
a1 = a[0]  # 存储用户个数,要输入几行数据
a2 = a[1]  # 存储cpu的个数
a3 = a[2]  # 存储容量
b = []  # 用二维数组b来存储用户的报价信息
b1 = [0]*a1  #数组b1存储单位内存价格
b2 = [0]*a1  #数组b2存储单位容量价格
p1 = [0]*a1
p2 = [0]*a1  #分别记录位置信息
num_sum = 0  #记录第一种贪心的数据
sto_sum = 0  #cpu累加个数和内存容量累加初始化为0
prize_sum = 0  #总价值
num_sum1 = 0  # 记录第二种贪心策略的数据
sto_sum1 = 0
prize_sum1 = 0

for i in range(a1):  #内存数,容量数,价格
    b.append(list(map(int, input().split())))


for k in range(a1):
    b1[k] = b[k][2]/b[k][0]
    b2[k] = b[k][2]/b[k][1]
    p1[k] = k
    p2[k] = k

for i in range(0, a1-1):  # 对单位CPU进行排序,并且记录位置
    for j in range(1, a1-i):
        if b1[j]> b1[j-1]:
            tmp = b1[j-1]
            b1[j-1] = b1[j]
            b1[j] = tmp
            tmp = p1[j-1]
            p1[j-1] = p1[j]
            p1[j] =tmp

for i in range(0, a1-1):  # 对单位容量进行排序,记录位置
    for j in range(1, a1-i):
        if b2[j]> b2[j-1]:
            tmp = b2[j-1]
            b2[j-1] = b2[j]
            b2[j] = tmp
            tmp = p2[j-1]
            p2[j-1] = p2[j]
            p2[j] =tmp

# 不能超过cpu总个数,不能超过总容量,从大到小开始累加
while num_sum <= a2 and sto_sum <= a3:
    for i in range(a1):
        num_sum = num_sum+b[p1[i]][0]
        sto_sum = sto_sum+b[p1[i]][1]
        prize_sum = prize_sum+b[p1[i]][2]
while num_sum1 <= a2 and sto_sum1 <= a3:
    for i in range(a1):
        num_sum1 = num_sum1 + b[p2[i]][0]
        sto_sum1 = sto_sum1 + b[p2[i]][1]
        prize_sum1 = prize_sum1 + b[p2[i]][2]
if prize_sum > prize_sum1:
    print(prize_sum)
else:
    print(prize_sum1)






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章