列挙アルゴリズムを使用する場合は、まず列挙対象、列挙範囲、判定条件を決める必要があります。 考えられる解決策を 1 つずつ列挙し、それぞれの解決策が問題の解決策であるかどうかを確認し、考えられる正しい解決策を決して見逃さないようにします。
#例
100 ドルで 100 が買える鶏 質問: 100 元を持っていて、鶏を 100 羽買う予定の人がいます。市場に行くと、大きい鶏肉が3元、小さい鶏肉が3元、中くらいの鶏肉が2元でした。さて、ちょうど 100 元で 100 羽の鶏を買う方法を計画するのに役立つプログラムを書いてください。 雄鶏を x、雌鳥を y、ひよこを z とすると、次の方程式が得られます。各雄鶏の価値を徹底的に列挙した後、雌鶏とひよこの価値は次のようになります。酉の×で表現できます。
コード:
図のコードは、for ループ時間の 3 倍の複雑さを使用します (分からない場合でも、心配しないでください。これについては後で説明する特別な記事になります) for O (N^3); 私たちは皆、シンプルで、スペースを消費せず、短く簡潔で、ハイエンドに見えるプログラムを好みます。最適化については以下で紹介します。
#最適化ルーチン
列挙は非常に難しいものですが、収益性の高いアルゴリズムですが、列挙範囲を狭くすることで、問題解決の効率を向上させることができます。また、繰り返しの列挙は避けてください。 2 番目の方法を見てみましょう: x y z = 100 ①
5x 3y z/3 = 100 ②
Let ②x3-① #7x 4y = 100=>y = 25-(7/4)x ③そして 0 x = 4k ④ ③に④を代入して=> y = 25-7k ⑤ ④⑤を代入=> z = 75 3k ⑥ 0コード:
このコードは、ループ層の基礎と時間計算量に達しました。 is O(n);
この栗では、列挙の変数を減らすという列挙最適化の方法を紹介します。列挙を最適化するルーチン全体には主に 2 つの側面があります。1 つは列挙変数を減らすこと、もう 1 つは列挙の範囲を減らすことです。
以上がJava 列挙型の使用法とアルゴリズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。