- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
贪心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案。贪心算法正是“活在当下,看清眼前”的算法,从问题的初解开始,一步步做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解;即使得不到最优解,也可以得到最优解的近似解。
当然,贪心算法在解决问题的策略上看似“目光短浅”,只根据当前已有的信息做出选择,而且一旦做出选择,则不管将来有什么结果,都不会改变。换而言之,贪心算法并不是从整体最优来考虑的,它所做出的选择只是某种意义上的局部最优。对许多问题都可以使用贪心算法得到整体最优或整体最优的近似解。
如果问题具有两个特性:贪心选择性质和最优子结构性质,就可以用贪心算法。
原问题的整体最优解可以通过一系列局部最优的选择得到。应用同一规则,将原问题变为一个相似的、但规模更小的子问题,而后的每一步都是当前最优选择。这种选择依赖于做出的选择,但不依赖于未做的选择。运用贪心算法解决的问题在程序的运行过程中无回溯过程。
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
确定贪心策略,选择当前看上去最好的一个。
比如挑选苹果,如果你认为个头最大的是最好的,那么策略就是选择当前最大苹果。
根据贪心策略,一步步得到局部最优解。
比如第1次选一个最大的苹果,记为a1,第2次从剩下的苹果中选择一个最大的苹果放起来,记为a2,以此类推。
把所有的局部最优解都合成原问题的一个最优解。
有一天,商人想买一批古董。虽然商船足够大,但承重为c,不能将所有的古董带上船,该怎么办?
这是一个可以用贪心算法求解的最优装载问题,要求装载的物品尽可能多,而船的容量固定,那么优先选择重量小的物品,在容量固定的情况下,装的物品最多。可以采用重量最轻的先装船的贪心策略,从局部最优达到全局最优,从而得到最优装载问题的最优解。
a 先按照重量从小到大排序。
b 从小到大装船,直到装不下。
package GreedyAlgorithm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class GreedyAlgorithm {
public static void main(String[] args) {
List<Integer> list = new ArrayList();
list.add(4);
list.add(10);
list.add(7);
list.add(11);
list.add(3);
list.add(5);
list.add(14);
list.add(2);
Collections.sort(list);
double weights = 0.0;
int count = 0;
double maxWights = 30;
for (int i = 0; i < list.size(); i++) {
weights += list.get(i);
if (weights <= maxWights) {
count++;
} else {
break;
}
}
System.out.println(count);
}
}
5
时间复杂度:由排序来决定,总时间复杂度为O(nlogn).
空间复杂度:在程序中使用了辅助变量 weights、count 等,空间复杂度为O(1)
>>> import re >>> p = re.compile('.*&l=(.*)(&|$)') >>> p.search('foo&l=something here&bleh').group(1
最近有一道面试题如下:我们得到了一个单词列表,我们想要格式化它们以最大化回车符的数量,同时将每行的字母数量保持在一个范围内。 例如,我们希望每行的字母范围为 5 - 10(含),一种解决方案是: he
我正在使用二维数组来处理游戏中的对象。数组的维度就像笛卡尔网格上的坐标。当玩家选择一个点时,我想从数组中收集 N 个最近的网格单元,即使该点不是有效的数组索引。 例子:从 [0,0] 到 [10,10
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我正在 ANTLR4 中构建语法,但收到此警告 TL4.g4:224:12: greedy block ()* contains wildcard;非贪婪语法 ()*?可能是首选 这是它引用的代码行
In the default greedy mode, all data offered to targets are accepted, even if the other target doesn
假设我有 n 个盒子,每个盒子里面都有一些值 b[i] .我可以保证对一组框进行排序,使得 b[1] j; { min_{k=i}^j (c[k] + max(T(i, k-1)
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加
什么是 PHP 中的“贪心 token 解析”?我在 Codeigniter 指南中找到了这个: “除非需要解析变量,否则始终使用单引号字符串,并且在确实需要解析变量的情况下,使用大括号防止贪婪的标记
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加
我是一名优秀的程序员,十分优秀!