貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優的選擇,從而希望導致結果是全局最好或最優的算法策略。請注意,貪心算法并不總是能保證得到全局最優解,但在某些問題上,它可以提供足夠好的解決方案。下面是一個使用JavaScript實現的貪心算法示例,解決“ fractional knapsack problem”(分數背包問題)。
分數背包問題描述:有N件物品和一個容量為W的背包,每種物品有一個價值(value)和重量(weight),要求在不超過背包總重量的前提下,讓背包中裝入的物品總價值最大。
function fractionalKnapsack(values, weights, capacity) {// 創建一個數組,每個元素是一個對象,包含物品的價值、重量和單位價值(價值/重量)let items = values.map((value, index) => ({value, weight: weights[index], ratio: value / weights[index]}));// 按單位價值降序排序物品items.sort((a, b) => b.ratio - a.ratio);let totalValue = 0; // 背包中物品的總價值for (let item of items) {if (capacity >= item.weight) {// 完全裝入當前物品capacity -= item.weight;totalValue += item.value;} else {// 只能部分裝入當前物品totalValue += (capacity * item.ratio);break; // 背包已滿,停止循環}}return totalValue;
}// 示例
let values = [60, 100, 120]; // 物品的價值
let weights = [10, 20, 30]; // 物品的重量
let capacity = 50; // 背包的容量
console.log(fractionalKnapsack(values, weights, capacity)); // 輸出最大價值
這段代碼首先計算每件物品的單位價值(即價值與重量的比值),然后按單位價值降序排序。接下來,從價值密度最高的物品開始嘗試放入背包,如果物品可以完全放入,則直接計算價值;如果不能完全放入,則根據剩余容量按比例計算該物品能貢獻的價值。這種方法就是典型的貪心策略,每次選擇局部最優(即單位價值最高)的物品處理,最終達到全局較優的解。