朝阳同学的买苹果问题--贪心算法

问题定义

算法

     确定算法思想

  • 将C1,...,Cn进行排序,在Ci最小的那一天,买齐未来第i天到第i+d-1天的苹果,直到n天的苹果都采购完成。

     分析贪心选择性

      命题1,在购买苹果问题中,保质期为d天,n天价格序列为C1,...,Cn,其中C= min{C1,...,Cn},存在某个优化解,在第i天购买了d个苹果,Bi = d。

      证明1,如果不存在某个优化解,在第i天购买了d个苹果。那么对于任意一个优化解T而言,其购买苹果的价格定义为cost(T) = Σ(j =1:n) BjC。那么对于可以将第i天到i+d-1天的苹果都在第i天进行购买,形成了新的解T '。显然,T与T '仅仅在第i天到i+d-1天的苹果购买价格不同,那么cost(T) - cost(T ') = Σ(j =i:i+d-1) BjC- Ci*d。而Ci*i < Σ(j =i:i+d-1) BjCj,因为Cd是购买苹果的最低价,那么,cost(T) > cost(T '),这与T是最优解矛盾,所以假设不成立。

     分析优化子结构

      命题2,对于可以在第1~n天购买苹果,需要购买第1~n天的苹果的问题的最优解T而言,T - Bi是可以在第1~n天,不能在第i天购买苹果,以及需要购买第1~n天的水果,不需要购买第i天到第i+d-1天的苹果的问题的优化解。

      证明2:如果T - Bi不是该问题优化解,那么假设A是该问题的优化解,那么。cost(A) < cost(T - Bi),那么,A+Bi就是可以在第1~n天购买苹果,需要购买第1~n天的苹果的问题的解,而cost(A+Bi) = cost(A) + CiB, cost(T ) = cost(T - Bi) + CBi,cost(A+Bi) < cost(T ),那么显然这与T是原问题的优化解矛盾,假设不成立。

      算法设计

Apple-Plan(d,n,C1,C2,...,Cn)
Merge-Sort(C1,C2,...,Cn);
B1..n = 0;
A1..n = 0;
I = 1;
While(A中元素存在不等于0)
Count = 0;
For j = I to i+d-1
   If     A[j] != 1
      Then  A[i..i+d-1] = 1;
            Count++;
   B[i] =count;
Return B;

  算法复杂度分析

        第2行的归并排序O(nlogn);

        第6行的判断O(n),循环至多n次,第8行循环至多d次,第六行循环总时间时间复杂度为O(dn2)。

        T(n) = O(nlogn) + O(dn2)。

        时间复杂度比较大。。。。

 

原文地址:https://www.cnblogs.com/zqybegin/p/13615967.html