贪心算法

    xiaoxiao2021-12-14  43

    1:部分背包问题

    每次找单位价值最大的

    代码:

    public double selectMax() {          double maxValue = 0.0;          int sum = 0;          int i;          for(i = 0; i < v.length; i++) {              if(sum + w[i] < weight) {                  sum += w[i];                  maxValue += v[i];              } else                  break;          }          if(i < v.length && sum < weight) {             maxValue += (double)(weight - sum) / w[i] * v[i];          }            return maxValue;      }  

    这里省略了排序过程

    这里省略了对数组v, w的定义。关键点在于我们选择了若干了物品后要判断是否装满了背包重量。如果没有,还要从后面的里面挑选一部分。所以有一个if(i < v.length && sum < weight)的判断。

        在实现后我们来看该问题这种解法的时间复杂度,因为需要将数组排序,我们的时间复杂度为O(nlgn

    2:硬币组合花费硬币最小的问题

    每次找面值最大的且满足条件的硬币

    3:磁带最小访问时间(附一个大神的链接:http://blog.csdn.net/insistgogo/article/details/11354633);即,这些文件按照访问概率由大到小存储到磁带上时,访问所有文件经过平均磁带长度,可得到最佳访问效率

    每次找长度最小的

    4:

    每次找前缀最大的

    5:区间覆盖问题

    转载请注明原文地址: https://ju.6miu.com/read-969003.html

    最新回复(0)