AIUnlimited
🌳

AI基礎

🌱
AI Seeds(種)

ゼロから始める

🌿
AI Sprouts(芽)

基礎を築く

🌳
AI Branches(枝)

実践に活かす

🏕️
AI Canopy(樹冠)

深く学ぶ

🌲
AI Forest(森)

AIをマスターする

🔨

AIマスタリー

✏️
AI Sketch(スケッチ)

ゼロから始める

🪨
AI Chisel(鑿)

基礎を築く

⚒️
AI Craft(制作)

実践に活かす

💎
AI Polish(磨き上げ)

深く学ぶ

🏆
AI Masterpiece(傑作)

AIをマスターする

📘

AI実践

📖
オープンソースモデルを理解する

オープンソースモデルの基礎とリソース

🎯
問題からモデルタスクへ

ビジネス問題をモデルタスクに変換

⚡
最初のモデルを実行する

30分で最初の結果を見る

🔧
ファインチューニングと評価

モデルをファインチューニングし、パフォーマンスを評価

🚀
アプリケーションシステム

実際のAIアプリケーションを構築

🎨
生成AI

オープンソースAIGCモデルを探索

🤖
エージェント

エージェントフレームワークとMCPツールを学ぶ

📐
補足基礎

LLMの基礎と評価

🎓

Claude アカデミー

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

ラボ

7つの実験がロード済み
🧬ニューラルネットワークサンドボックス🤖AI か人間か?🥋プロンプトエンジニアリング道場🏁アルゴリズムレース🧠AIトリビアチャレンジ🏗️システム設計キャンバス
🎯模擬面接ラボへ入る→
🚀

キャリア発展

🚀
面接ローンチパッド

旅を始めよう

🌟
行動面接マスター

ソフトスキルをマスター

💻
技術面接

コーディング面接を突破

🤖
AI・ML面接

ML面接をマスター

🏆
オファーとその先

最高のオファーを獲得

始める
AIUnlimited

MITライセンス

沪ICP备18025655号-11

学ぶ

  • AI基礎
  • AI実践
  • Claude アカデミー
  • ラボ
  • キャリア発展

コミュニティ

  • 概要
  • よくある質問

サポート

  • footer.terms
  • footer.privacy
  • footer.contact
AI & エンジニアリング アカデミックス›✏️ AI Sketch(スケッチ)›レッスン›貪欲アルゴリズム
🏃
AI Sketch(スケッチ) • 中級⏱️ 17 分で読める

貪欲アルゴリズム

アルゴリズムが貪欲になる原因は何ですか?

貪欲なアルゴリズムは、一度に 1 ステップずつ、過去の選択を再検討することなく、今最も最適と思われるオプションを常に選択してソリューションを構築します。後戻りもせず、先を見据えることもありません。

次の 2 つのプロパティが成立する場合に機能します。

  1. 貪欲な選択特性 - 局所的に最適な選択は、全体的に最適なソリューションにつながります。
  2. 最適な部分構造 - 各選択の後に残る問題は、同じ問題のより小さな例です。

アクティビティの選択 - 古典的な例

開始時刻と終了時刻を持つ一連のアクティビティを指定して、重複しないアクティビティの最大数を選択します。

貪欲な戦略: 終了時刻で並べ替え、常に最も早く終了するアクティビティを選択します。

def max_activities(intervals):
    intervals.sort(key=lambda x: x[1])
    count, end = 0, 0
    for s, e in intervals:
        if s >= end:
            count += 1
            end = e
    return count

なぜこれが機能するのでしょうか?最も早く終了するアクティビティを選択すると、将来のアクティビティのための余地が最大限に残ります。これ以上の選択肢はありません。

アクティビティの選択を最も早い終了時間ごとに示すタイムライン
最も早い終了時刻で選択すると、重複しないアクティビティの数が最大になります。

ハフマンコーディング - コンセプト

2 つの最低周波数のシンボルを繰り返しマージすることで、最適なプレフィックスフリーのバイナリ コードを構築します。これは欲張りです。各ステップで最も安価なペアをマージします。その結果、頻繁に使用されるシンボルが短いコードを取得するツリーが作成されます。

🤯
ハフマン符号化は、JPEG、MP3、および ZIP 圧縮で使用されます。デビッド ハフマンは 1952 年に学生としてそれを発明しました - それは宿題でした!

ジャンプゲーム

nums[i] がインデックス i からの最大ジャンプ長である配列を指定して、最後のインデックスに到達できるかどうかを判断します。

貪欲なアプローチ: これまでに到達可能な最も遠いインデックスを追跡します。左から右にスキャンします。遅れた場合は false を返します。

def can_jump(nums):
    farthest = 0
    for i, jump in enumerate(nums):
        if i > farthest:
            return False
        farthest = max(farthest, i + jump)
    return True
🧠クイックチェック

ジャンプ ゲームでは、貪欲な変数「最も遠い」は何を表しますか?

ガソリンスタンド

ガソリンスタンドのある環状ルートを走行します。ステーション i では、燃料 gas[i] を獲得し、次のステーションに到達するために cost[i] を費やします。周回を完了できる開始駅を見つけるか、-1 を返します。

レッスン 9 / 100%完了
←再帰とバックトラッキング

ディスカッション

ログイン ディスカッションに参加

貪欲な洞察: 総ガス量 ≥ 総コストの場合、解決策は存在します。ランニング余剰を追跡します。ゼロを下回るたびに、答えはその時点の後から開始する必要があります。

タスクスケジューラ

同一タスク間のクールダウンが n になるようにタスクをスケジュールします。 貪欲: 常に最も頻度の高い残りのタスクを選択します。答えは、最大頻度とそれを共有するタスクの数によって異なります。

Tasks: A A A B B C, cooldown = 2
Schedule: A B C A B _ A
Total = 7
🤔
Think about it:タスク スケジューラで、最も頻繁に使用されるタスクを最初に選択すると、アイドル スロットが最小限に抑えられるのはなぜですか?最も頻度の低いものを最初に選択すると、何が問題になりますか?

分数ナップザック vs 0/1 ナップザック

端数ナップザック: アイテムの端数を取ることができます。貪欲に機能します。重量あたりの価値で並べ替え、最適な比率を最初に取得します。

0/1 ナップザック: アイテムは全か無かです。重くても貴重なアイテムをスキップすることは、軽いアイテムを 2 つ手に入れるより悪い可能性があるため、ここでは貪欲は失敗します。これには動的プログラミングが必要です。

Items: (weight=3, value=4), (weight=2, value=3), (weight=2, value=3)
Capacity: 4

Greedy (best ratio first): takes item 1 (w=3, v=4) → 1 remaining → can't fit rest → value = 4
Optimal: takes items 2+3 (w=4, v=6) → value = 6 ✗ Greedy fails!
🧠クイックチェック

0/1 ナップザック問題で貪欲なアプローチが失敗するのはなぜですか?

貪欲はいつ機能しますか?

✅ 機能 貪欲な選択の性質を証明できる場合:

  • インターバルスケジューリング、ハフマンコーディング、最小スパニングツリー、ダイクストラアルゴリズム、標準額面でのコインチェンジ

❌ **ローカル最適化がグローバル最適化に構成されていない場合、**失敗します。

  • 0/1 ナップザック、一般グラフの最長経路、巡回セールスマン

貪欲な正しさの証明 - 議論の交換

標準的な手法: 貪欲な選択を使用しない最適なソリューションを想定します。解決策を悪化させることなく、選択肢の 1 つを貪欲な選択肢と 交換できることを示してください。これは、貪欲であることが少なくとも同じくらい良いことを証明しています。

🧠クイックチェック

「交換引数」は何に使用されますか?

貪欲なプログラミングと動的プログラミング

|側面 |貪欲 |動的プログラミング | |----------|----------|----------| |選択肢 |ステップごとに 1 つの最適な選択肢 |すべての下位問題を調べる | |過去を振り返る? |決して |はい - サブ結果を保存します。 |スピード |通常は速い |状態空間に依存 | |正確さ |証明可能な場合のみ |常に (正しく定式化されている場合) |

疑わしい場合は、貪欲に始めてください。機能することが証明できない場合は、DP に切り替えてください。

🤯
ダイクストラの最短パス アルゴリズムは貪欲であり、常に最も近い未訪問のノードを処理します。エッジの重みが負ではないため機能し、貪欲な選択が安全であることが保証されます。
🤔
Think about it:コインの額面 [1、3、4] が与えられ、6 に変更する必要があります。貪欲なアプローチでは 4+1+1=3 コインが選択されますが、最適なのは 3+3=2 コインです。これらの宗派は、貪欲な選択の特性を破るものでしょうか?

📚 続きを読む

  • NeetCode - 貪欲なプレイリスト - 厳選された貪欲な問題と説明
  • 技術面接ハンドブック - 貪欲 - 貪欲で一般的なパターンをいつ使用するか
  • CP アルゴリズム - 貪欲なアルゴリズム - より深い理論と証明