数学的には、サイズ n (na 正の整数) の有限集合 (X、および比較演算子 (X の x、y、z; x<=y および y<=z は x<=z を意味する)) がある場合、それは最大値を見つけるための非常に単純な問題. (また、存在します.)
この問題を解決する最も簡単な方法ですが、最も計算コストがかかるのは、すべての可能な値を含む配列を生成してから、最大値を見つけることです。
パート 1. 有限メンバー セットを持つ型には、その型の特定のメンバーを一意に表すために使用できる有限数のビット (m) があります。考えられるすべてのビット パターンを含む配列を作成するだけです。ここで、特定のビット パターンは特定の型の特定の値で表されます。
パート 2. 次に、各 2 進数を指定された型に変換する必要があります。このタスクは、プログラミングの経験がないため、これがどのように達成されるかについて話すことができない場所です。キャスティングについていくつか読んだことがありますが、それでうまくいくでしょうか?それとも他の変換方法ですか?
パート 3. 前のステップが完了したと仮定すると、目的の型の値の有限セットと、そのセットに対する比較演算子が得られます。最大を見つけます。
しかし、もし...
...指定されたタイプのメンバーの正確な数がわからない? 過大評価よりも。妥当な過大評価ができない場合は、その数に物理的な限界があるはずです。過大な見積もりが得られたら、考えられるすべてのビット パターンをチェックして、どのビット パターンがその型のメンバーを表しているかを確認します。使用されていないものを破棄した後、指定された型のメンバーを表すすべての可能なビット パターンのセットができました。この最近生成されたセットは、パート 1 で使用するものです。
...その型には比較演算子がありませんか? 特定の問題は不可能であるだけでなく、論理的に無関係です。つまり、指定された型の 2 つの値を比較する場合に意味のある結果を与えるアクセス権がプログラムにない場合、指定された型はプログラムのコンテキストで順序付けされません。順序付けがなければ、最大値などありません。
...与えられた 2 進数を与えられた型に変換することはできませんか? その後、メソッドは壊れます。ただし、前の例外と同様に、型を変換できない場合、ツールセットは論理的に非常に制限されているように見えます。
技術的には、バイナリ表現と特定の型の間で変換する必要がない場合があります。変換の全体的なポイントは、生成されたリストが網羅的であることを保証することです。
...問題を最適化したいですか? 指定された型が 2 進数からどのようにマップされるかについての情報が必要です。たとえば、unsigned int、signed int (2 の補数)、signed int (1 の補数) は、それぞれ文書化された簡単な方法でビットから数値にマップされます。したがって、unsigned int の可能な最大値が必要で、m ビットで作業していることがわかっている場合は、単純に各ビットを 1 で埋め、ビット パターンを 10 進数に変換してから数値を出力できます。
これは最適化に関連しています。なぜなら、このソリューションの最もコストのかかる部分は、考えられるすべての答えをリストすることだからです。与えられた型がビットパターンからどのようにマッピングされるかについての事前の知識があれば、代わりにすべての潜在的な候補を作成することにより、すべての可能性のサブセットを生成できます。
幸運を。