Жадные алгоритмы — когда «на сейчас» лучше, чем «на потом»
Жадные алгоритмы выбирают на каждом шаге локально лучшее решение, надеясь, что это приведёт к глобально оптимальному.
Они не откатываются, не пробуют другие ветки — просто берут то, что сейчас выгодно.---
 Как работает жадный подход
Алгоритм:1. Выбирает из доступных наиболее выгодный по критерию элемент
2. Фиксирует это решение
3. Повторяет, пока не достигнет конца задачи
---
 Классический пример: сдача монетами
Жадный алгоритм:
- берёт по максимуму из крупных: 4
 - остаётся 2 → берёт два по 1
 
Но оптимально: 3 + 3 = 2 монеты
→ жадность здесь не сработала
---
 Где жадность работает отлично
---
 Пример: выбор непересекающихся отрезков на Python
		Python:
	
	intervals = [(1, 3), (2, 5), (4, 6), (7, 9)]
intervals.sort(key=lambda x: x[1])  # сортировка по правому краю
res = []
end = 0
for start, finish in intervals:
    if start >= end:
        res.append((start, finish))
        end = finish
print("Выбранные интервалы:", res)
	
		Код:
	
	Выбранные интервалы: [(1, 3), (4, 6), (7, 9)]
	---
 То же самое на C
		C:
	
	#include <stdio.h>
#include <stdlib.h>
typedef struct {
    int start, end;
} Interval;
int cmp(const void* a, const void* b) {
    return ((Interval*)a)->end - ((Interval*)b)->end;
}
int main() {
    Interval intervals[] = {{1,3},{2,5},{4,6},{7,9}};
    int n = sizeof(intervals)/sizeof(intervals[0]);
    qsort(intervals, n, sizeof(Interval), cmp);
    int end = 0;
    for (int i = 0; i < n; i++) {
        if (intervals[i].start >= end) {
            printf("(%d, %d)\n", intervals[i].start, intervals[i].end);
            end = intervals[i].end;
        }
    }
    return 0;
}
	
 Вывод
Жадные алгоритмы — это "алгоритмический инстинкт".Они хороши, когда каждое локальное решение приближает к глобальной цели.
Но они не всегда универсальны — будь внимателен: там, где жадность не гарантирует оптимум, лучше использовать динамику или полный перебор.
	