この記事はWeChatの公開アカウント「Java Chinese Community」から転載したもので、著者はLei Geです。この記事を転載する場合は、Java Chinese Community 公式アカウントにお問い合わせください。 近年、企業は消費を刺激するためにさまざまな活動を展開しており、Duoduoを筆頭とする実用的電子商取引企業は、マーケティングの無限の「可能性」を私たちに見せてくれました。 つい最近、ダブル11に合わせて、近所のコンビニの老旺頭も「ワインの空き瓶をワインに」というプロモーションを開始しました。そのルールは次のとおりです。 この記事は Github の「初心者のためのアルゴリズム」シリーズに含まれています: https://github.com/vipstone/algorithm 活動ルール 顧客がワインを X 本購入した場合、空のボトル Y 本を新しいワイン 1 本と交換できます。
ボトルの中のワインが飲まれると、ボトルは空になります。 最大で何本のワインを飲めるか計算してください。 例1:
例2:
例3:
例4:
問題解決 この問題には 2 つの難点があります。1 つ目は、ワイン 1 本と交換される空のボトルの数は固定されていない (ランダムである) ことです。2 つ目は、交換したワインを飲んだ後も、交換活動に参加し続けることができることです。したがって、この 2 つの条件を満たすことを前提として、最大で何本まで飲めるかを計算します。 この記事のタイトルを見て、問題の解決法が分かった方もいるかもしれません。そうです、この記事では「貪欲アルゴリズム」を使用して最終的な答えを計算します。同時に、この問題は貪欲アルゴリズムの解決アイデアにも準拠しています。つまり、ワインボトルがあれば、それを交換でき、できるだけ多く交換できます。 貪欲アルゴリズム 貪欲アルゴリズムは、各ステップで現在の状態における最良または最適な(つまり、最も好ましい)オプションを選択し、結果が最良または最適なものになることを期待するアルゴリズムです。 貪欲アルゴリズムは、最適なサブ構造を持つ問題で特に効果的です。最適なサブ構造とは、ローカル最適解がグローバル最適解を決定できることを意味します。簡単に言えば、問題は解決すべきサブ問題に分解することができ、サブ問題に対する最適解は、最終的な問題に対する最適解に再帰的に導き出されます。 貪欲アルゴリズムの実装フレームワーク 問題の初期解決から始めます: (与えられた全体目標に向かって一歩を踏み出せる) { 実行可能な決定を使用して、実行可能なソリューション要素を見つけます。 } すべてのソリューション要素が組み合わされて、問題に対する実行可能なソリューションが実現されます。 注意: 貪欲アルゴリズムは、ローカル最適解戦略を解くことによってのみグローバル最適解を達成できるため、問題が貪欲アルゴリズム戦略に適しているかどうか、および見つかった解が間違いなく問題に対する最適解であるかどうかに注意する必要があります。 次に、コードを使用して貪欲アルゴリズムの具体的な実装を示します。 コード実装1: 貪欲 まず、グローバルな問題をローカルな問題に変換してみましょう。空のボトルをワインのボトルと交換できる場合は、それをワインのボトルと交換します。実装コードは次のとおりです。
コード分析 実装のアイデア:
上記のコードを LeetCode に送信すると、実行結果は次のようになります。 コード実装2: 貪欲な改善 上記の貪欲アルゴリズムは、1 サイクルで一度に 1 本のワインを交換するというものです。毎回、すべての空のボトル (交換可能な最大値) を交換し、交換したワインを飲んでから、再度交換することは可能でしょうか。 答えは「はい」です。これを実現するには、剰余演算と剰余演算を使用するだけです。具体的なコードは次のとおりです。
上記のコードを LeetCode に送信すると、実行結果は次のようになります。 要約する 貪欲アルゴリズムは一見すると非常に「難しい」ように見えますが、実際には実装が非常に簡単です。実は、「アルゴリズム」についても同じことが言えます。一見すると、この言葉はあまり高尚な響きではないようです。実際、それは問題を解決するための単なるアイデアであり、固定された「ルーチン」であり、そこには何も神秘的なところはありません。 人々はよくこう言います。「道は遠くても、最終的には目的地にたどり着くだろう。仕事は困難でも、最終的には成功するだろう。」 「難しい」と「簡単」は常に相対的です。実際、「難しい」から「簡単」になるのは、徐々に悟りと成長を遂げるプロセスです。 毎日少しずつ成長していくことを願っています。最後に、私個人のWeChat: GG_Stoneを残してください。お互いにコミュニケーションを取り、一緒に進歩していくことができるように。 参考文献と謝辞 https://leetcode-cn.com/problems/water-bottles/ https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html https://zh.wikipedia.org/zh-hans/貪欲アルゴリズム |
<<: 家主は、あなたに賃貸するかどうかを決める前に、AIを使ってあなたの犯罪歴を審査しているかもしれない。
>>: 独身の日:XiaoIceの「バーチャルガールフレンド」が正式にリリースされ、複数のプラットフォームで使用可能に
[[441692]]トランスフォーマーは本当に多用途です。トランスフォーマーは、もともと自然言語処...
複雑なシステムを予測するには、より多くのニューロンを使用する必要がありますか?ネイチャー・コミュニケ...
従業員の定着は、長年にわたり企業経営者にとって深刻な問題となってきました。雇用の安定と従業員の忠誠心...
テクノロジー界ではもう一つ大きな出来事が起きている。中国で最も人気のある携帯電話ブランドであるHua...
導入生成画像の評価に関する既存の研究では、主に生成された画像の分布に基づいてモデルの「全体的な」生成...
今日、都市化の加速と都市人口の増加により、都市ガバナンスはますます困難になっています。例えば、都市統...
科学技術の発展とビッグデータの登場により、人工知能は私たちの生活にますます近づいてきました。しかし、...
ビルの管理者や運営者は、暖房や冷房、照明システム、エレベーターの故障など、ビルのシステムや設備の予期...
[[399194]]ロボット産業は、我が国のインテリジェント製造業の発展における重要なリンクであり、...
翻訳者 |ブガッティレビュー | Chonglou私はしばらくの間ChatGPTとBardを使用して...
1. 大規模モデル開発におけるデータエンジニアリング1. 大規模モデル向けのデータエンジニアリングと...
機械学習が「人間レベル」の能力に到達するには、多くのトレーニング反復とラベル付きデータが必要です。こ...
モデルのパフォーマンスを向上させたい場合、まず検索エンジンに問い合わせるのが本能でしょうか?通常、表...
私たちの日常生活では、携帯電話のロック解除から検索エンジンを使った地図ナビゲーションまで、人工知能と...
[51CTO.comより引用] モバイルインターネット、モノのインターネット、ビッグデータ、人工知能...