贪心算法:成本最小化

时间:2011-04-12 23:23:11

标签: algorithm optimization greedy

我正在努力学习我写的以下贪婪算法;我知道我的算法不完整,但我真的不知道要改进它。:

Algorithme minCost()

while j<n (while all the licences have not been yet bought)
j=next licence bought
If the licence of the current month is available then
buy
EndIf
EndWhile

这个问题的表述: 为了销售其各种产品,公司需要“n”牌照。由于某些法律,每月不能获得超过一个许可证。此外,许可证的费用也会增加 每月。实际上,虽然目前每个许可证的成本是100美元,但许可证j的成本(1≤j≤n)增加了因子rj> 1。每月1个(rj是参数)。 换句话说,在前四个月购买许可证的费用为100r4,而在第一个月期间的购买费用为100美元(r3)^ 5。最后,我们假设ri与j不同,不同于j。 那么问题是,对于给定的一组rj(1≤j≤n),以什么顺序购买“n”允许最小化总拥有成本。 1.使用贪婪方法开发多项式算法,以解决这个问题。在最坏的情况下分析您的算法。 2.证明您的算法很好地返回最优解。 3.在以下实例中说明您的算法:n = 3,r1 = 3,r2 = 4,r3 = 2.

由于

1 个答案:

答案 0 :(得分:0)

Algorithme minCout(A[1, ..., n], B[])
//A[1, ..., n]: table storing the rj values of the licenses cost
//B[]: empty table to store selected licences cost for buy
QuickSort(A[1, ..., n])
//A[1, ..., n] is now sorted in decreasing order

 while j < n (while all the licences have not been yet bought) do
    for i ← 1 to n (Check all the available licences cost) do
    if ri < ri+1 (choose the highest license cost) then
    A[i ] = i + 1 (buy now the highest cost licence)
    end
    j = j + 1 (check the next licence to buy)
    end
    end
Return A[i]

通常情况下,只要我选择成本最高的许可证并将其存储到表B中,许可证的数量就必须减少。此外,由于我正在审查许可证的成本,因此我不得再次审核表A的完整部分然后,我如何编写这个算法的递归版本,这可以让我考虑我刚才提到的内容?谢谢。