تخيل طفل قدامه حلويات كتير:
"Take the best option NOW, don't look back!"
Greedy مش دايماً بيدي الحل الأمثل!
بس لما بينفع، بيكون سريع جداً وبسيط.
أقل عدد عملات لتكوين مبلغ
عملات: [25, 10, 5, 1] | المبلغ: 41
الإجابة: 4 عملات (أمثل!)
عملات: [1, 3, 4] | المبلغ: 6
Greedy يقول:
4 + 1 + 1 = 3 عملات
الحل الأمثل:
3 + 3 = 2 عملات!
⚠️ Greedy ما لقاش الحل الأمثل!
أكتر عدد أنشطة ممكن تعملها (من غير تعارض)
عندك أنشطة بأوقات بداية ونهاية. اختار أكتر عدد من غير تعارض.
الاستراتيجية الجشعة: دايماً اختار النشاط اللي ينتهي أولاً!
✓ الإجابة: A, C, E (3 أنشطة)
اخترنا اللي ينتهي أولاً في كل مرة، عشان نفضي وقت لأنشطة تانية!
| المقارنة | Greedy | Dynamic Programming |
|---|---|---|
| الاستراتيجية | أفضل اختيار محلي | جرب كل الاحتمالات |
| الحل الأمثل؟ | أحياناً | دايماً ✓ |
| السرعة | سريع جداً ✓ | أبطأ |
| الذاكرة | قليلة ✓ | أكتر (Table) |
| التعقيد | بسيط | أصعب |
أقل تكلفة لربط كل الـ nodes
Prim's, Kruskal's
أقصر طريق من نقطة لباقي النقط
ضغط البيانات (Compression)
أكتر عدد أنشطة من غير تعارض
Knapsack لما ممكن تقسم الحاجات
ترتيب المهام بأقل تأخير
function activitySelection(activities) {
// Sort by end time (Greedy choice)
activities.sort((a, b) => a.end - b.end);
const selected = [activities[0]];
let lastEnd = activities[0].end;
for (let i = 1; i < activities.length; i++) {
// If no overlap, select it
if (activities[i].start >= lastEnd) {
selected.push(activities[i]);
lastEnd = activities[i].end;
}
}
return selected;
}