虛擬機部署貪心法實現

考慮到在虛擬機部署中資源提供商通常希望自己的收益最大化,現假設有一臺宿主機,共有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)






 

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