{(2-8)、(13-22)、(380-7931)、(40032-63278)}などの範囲のセットがあります。簡単にするために、それらは重複していないと仮定する場合があります(重複する範囲はすでにマージされています)。
私の目標は、{4、64、1024、16384}などの特定の「長さ」のセットの組み合わせを使用してこれらの範囲を「カバー」することです。N = 32など、最大N個の長さを使用するように制限されています。最大値を下回っている限り、使用する「長さ」の数は関係ありませんが、「余分な」領域の合計を最小限に抑えたいと考えています。つまり、最初の範囲のセットにない長さで「カバー」される数です。
(2-66)(64の1つの長さを使用)でカバーされる例{(2-8)}には、58個の「余分な」番号があります。{(2-6)、(6-10)}(4の2つの長さ)でカバーされる{(2-8)}は、2つの「余分な」数しかなく、望ましいです。
私の実際のアプリケーションでは、固定MMU TLBを事前にプログラミングして、特定の範囲のメモリアドレスのみにアクセスできるようにします(したがって、TLBミスは禁止されたアクセスを表し、それに応じて処理できます)。違反が後でではなく早くキャッチされるように、可能な限り厳密に範囲をカバーしたいのですが、使用できるスロットは32個で、固定ページサイズは4個しかありません。コードを手作業で適切なレベルのパフォーマンスに調整することはできますが、この問題に対してよりエレガントで汎用的な解決策があるかどうか知りたいです。ナップサック問題に関連しているようですが、検索するのが難しいほど異なっています。