ためtriboolsの配列を最適化:私はいくつかの背景を見てみましょうスペース
「tribool」と私は、次のいずれかの値を保持できる変数を理解する:true
、false
またはnull
。
Copying array of ints vs pointers to boolsの質問では、OPはできるだけ小さいトリブール(多かれ少なかれ)の配列を持ちたいと思っていました。
最も基本的なbit-fuでは、トリブールごとに2ビットを使用し、OPの64個のトライブアの配列を16バイトに格納することができました。これは問題ありません。
- ブールのAは、 "nullまたはnullでない"
- ブール値Bが "真または偽でない場合はnull" を意味意味:私が使用
tribool力学は次のように、シンプルでした。
しかし、私は思った...「ビット」のalgorithmical定義は次のとおりです。
ビットは、2つの等しく可能性の高いイベントの条を特定する情報の量であります発生する。
明らかに真偽値は1ビット大きくなります。 2つの真偽値は全体として2ビット大きくなります。
私たちの概念的なトリブールはどうですか?
私のポイントは:含まれている情報のサイズに関して、トライブルは1ビットより大きく2ビットより小さいです。
- 正当化1:上記のようにifブール値を実装するものとします。 boolean Aが "null"の場合、boolean Bの値は冗長であり、関連する情報は保持されません。
- 正当化2:これは、1つtriboolに2つの独立したブール値からの情報を格納することは不可能ですので、持っている
(上記のいずれも正式な証拠はありませんが、私は私たちがいることを同意することができると信じています」 1ビットより厳密に大きく、2よりも厳密に小さいtriboolのサイズ」)
私の質問は次のとおりです。
プログラム的triboolが少ないを持っているという事実を利用する方法2ビットよりも情報があり、ソフトウェアで実装する(c、C++?)N個のトライブアの配列は、いくつかのN?ビットに対してN/4
バイトより小さいメモリフットプリントを持ちます。
はい、私は、このような実装は実際にハードウェアに優しいものではなく、冗長性を備えた一般的なソリューション(OPの質問に示されているもの)よりも遅く実行することを理解しています。効率化ではなく、スペースを最適化してみましょう。
明らかに、この実装では、boolのペア(前述のようにそれ自体は冗長です)とは異なるトリブリプレゼンテーションが必要です。理論によれば、その目標を達成することが可能であり、私は実際の実装を見たいと言います。何か案は?
スペースの最適化には、必ず時間を犠牲にして使用します。しかし、はい、可能です。 –
もちろん、私はそのような問題を解決するアプローチに大いに興味があります。これはおそらくビットフの最も実現可能な使用ではありませんが、問題自体は非常に興味深いようであり、答えは現実の状況で同様の問題を解決する経験の点で非常に貴重です。 – Kos