定义
总是对局部做出最优解,而不是整体考虑最优解
思路
1.建立数学模型
2.把每个问题分成若干个子问题
3.对子问题进行求解
4.把子问题局部最优解合成原来问题的一个解
特性
- 有一个候选的集合,比如硬币, 罗马数字集合
- 随着算法的进行,将积累起其他两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象
- 有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优
例子
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
funtion getRomanNum (nums) {
let str = '';
let romanArr = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
let numsList= [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
for (let i=0;i<13;) {
if (nums >= numsList[i]) {
str += romanArr[i];
nums-= numsList[i];
} else {
i++;
}
}
return str;
}