算法:贪心算法
1.简介
简介:
贪心算法(又称贪婪算法)每步都选择局部最优解,最终得到的就是全局最优解。
算法逻辑:
重复选择局部最优解,直到没有可选择。
2.注意
示例原型来自《图解算法》
如下图所示,当前有个背包可以装35磅。现在有音响、笔记本、吉他可以放入背包,求怎么放入背包的价值最高?
如果使用贪心算法,会选择价格最高能放入东西,会把音响放进去,这时背包价值为3000。但实际上如果不放音响选择笔记本+吉他话,背包价格能到3500。贪心算法选择局部最优解,可能会出现不是全局最优解。
3.演示
下面以找零钱为例,当前币种100、50、20、10、1元,需要找零272元。
package main
import "fmt"
func main() {
currencies := []int{100, 50, 20, 10, 1}
smallChange := GiveChange(currencies, 272)
fmt.Println(smallChange)
}
func GiveChange(currencies []int, price int) []int {
var payments []int
for price > 0 {
currency := getHighestCurrency(currencies, price)
price -= currency
payments = append(payments, currency)
}
return payments
}
func getHighestCurrency(currencies []int, price int) int {
for _, v := range currencies {
if price >= v {
return v
}
}
return 0
}
4.参考
- 《图解算法》