Kas ir alkatīgs algoritms un kā tas tiek izmantots problēmu risināšanā?
sobes.tech AI
Atbilde no AI
Heuristiska pieeja, kas katrā solī pieņem vietēju optimālu lēmumu, cerot, ka tas novedīs pie globāli optimāla risinājuma.
Pielietojums:
-
Aktivitāšu izvēles uzdevums (Activity Selection Problem):
- Uzdevums: Izvēlēties maksimālo nesakritīgo laika intervālu skaitu no dotā kopuma.
- Heuristiskais risinājums: Sakārtot intervālus pēc aizvēršanas laika pieauguma. Katru soli izvēlēties intervālu ar mazāko aizvēršanas laiku, kas nesaskaras ar jau izvēlētajiem.
# Piemērs — Aktivitāšu izvēle # activities = [(start_time, end_time)] activities = [(1, 4), (3, 5), (0, 6), (5, 7), (3, 8), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)] activities.sort(key=lambda x: x[1]) # Sakārtot pēc aizvēršanas laika selected_activities = [] last_finish_time = -1 for activity in activities: if activity[0] >= last_finish_time: selected_activities.append(activity) last_finish_time = activity[1] print(selected_activities) # [ (1, 4), (5, 7), (8, 11), (12, 16) ] -
Monētu maiņas uzdevums (Coin Change Problem) — kanoniskajām monētu kopām:
- Uzdevums: Izdot norādīto summu ar minimālo monētu skaitu.
- Heuristiskais risinājums: Maksimāli izmantojot lielākās nominālvērtības, kamēr summa tiek izsniegta. Strādā tikai noteiktās kopās (piemēram, 1, 5, 10, 25).
# Piemērs — Coin Change (kanoniskās monētas) coins = [25, 10, 5, 1] amount = 67 result = {} for coin in coins: while amount >= coin: result[coin] = result.get(coin, 0) + 1 amount -= coin print(result) # {25: 2, 10: 1, 5: 1, 1: 2} -
Kraskala algoritms minimālam izplatības kokam (Minimum Spanning Tree):
- Uzdevums: Atrast virsotņu apakškopu, kas savieno visas virsotnes ar minimālo kopējo svaru.
- Heuristiskais risinājums: Sakārtot visas malas pēc svara pieauguma. Pakāpeniski pievienot malas, ja tās neveido ciklu ar jau izvēlētajām, līdz ir savienotas n-1 malas (kur n — virsotņu skaits).
Heuristiskie algoritmi ir vienkārši īstenojami, bet ne vienmēr atrod globāli optimālu risinājumu. Dažiem uzdevumiem (piemēram, monētu maiņas, mugursomas problēma) heuristiska pieeja nav optimāla. Lai nodrošinātu optimālitāti vai labāku tuvinājumu, var būt nepieciešama dinamiskā programmēšana vai citas metodes. Pirms heuristikas izmantošanas ir jāizpēta, vai tā ir piemērota konkrētajam uzdevumam.