Sobes.tech
Middle

Көңүлдүү алгоритм деген эмне жана ал маселелерди чечүүдө кандай колдонулат?

sobes.tech AI

AIден жооп

Гедраистик ыкма — ар бир кадамда жергиликтүү оптимал чечим кабыл алуу менен глобалдык оптималдуу чечимге жетүү үмүтү менен.

Колдонуу:

  1. Иш-аракеттерди тандоо маселеси (Activity Selection Problem):

    • Мазмундагы эң көп убакытка чейин келишпеген интервалдарды тандоо.
    • Гедраистик чечим: Интервалдарды аяктоо убактысына карап өсүүчү тартипте сорттоо. Ар бир кадамда эң кичинекей аяктоо убактысы бар интервалды тандоо, ал эми ал мурда тандалгандар менен кросс-табышпайт.
    # Мисал — Иш-аракеттерди тандоо
    # 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]) # Аякталыш убактысы боюнча сорттоо
    
    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) ]
    
  2. Накит алмашуу маселеси (Coin Change Problem) — каноникалык монета топтомдору үчүн:

    • Мазмундагы сумманы минималдуу монета саны менен берүү.
    • Гедраистик чечим: Максималдуу мүмкүн болгон эң чоң номиналдардан монеталарды колдонуп, сумма толтурулгуча улантуу. Бул белгилүү бир топтомдор үчүн иштейт (мисалы, 1, 5, 10, 25).
    # Мисал — Coin Change (каноникалык монеталар үчүн)
    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}
    
  3. Краскал алгоритми — минималдуу чектөө дарагын табуу (Minimum Spanning Tree):

    • Мазмундагы максат — бардык чекиттерди минималдуу салмактуу чектер менен байланыштыруу.
    • Гедраистик чечим: Бардык чектерди салмак боюнча өсүүчү тартипте сорттоо. Ар бир кадамда чектерди кошуу, эгер алар азыркы тандалгандар менен циклик түзбөсө, жана n-1 чекке жеткенче (n — чекиттер саны) ишке ашыруу.

Гедраистик алгоритмдер жөнөкөй ишке ашырылат, бирок ар дайым глобалдык оптималдуу чечим таба бермейт. Кээ бир маселелер үчүн (мисалы, монета алмашуу, рюкзак маселеси) гедраистик ыкма оптималдуу эмес. Оптималдуулукка кепилдик берүү же жакындатуу үчүн динамикалык программалоо же башка ыкмалар талап кылынышы мүмкүн. Гедраистик алгоритм колдонмодон мурун, ал маселеге ылайыктуу экенин текшерүү зарыл.