zoukankan      html  css  js  c++  java
  • 朝阳同学的买苹果问题--贪心算法

    问题定义

    算法

         确定算法思想

    • 将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)。

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

     

  • 相关阅读:
    在vmware workstation10上安装ubuntu14.04,出现以下问题
    经典句
    杂文
    matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)”
    Nginx配置杂记(转)
    mysql经典案例分析
    Git查看、删除、重命名远程分支和tag(转)
    nginx下开启pathinfo模式
    ubuntu-apache如何解决跨域资源访问
    c语言插入排序
  • 原文地址:https://www.cnblogs.com/zqybegin/p/13615967.html
Copyright © 2011-2022 走看看