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

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

     

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/zqybegin/p/13615967.html
Copyright © 2011-2022 走看看