2017-06-13 8 views
1

この投稿によるとPerformance of doing bitwise operations on bitsetsパフォーマンスはO(n)です。どうすればO(log n)にするのですか?おかげさまで O(log n)内のC++ bitset論理演算?

+0

私はそれが依存していると思います。あなたはより多くの情報を提供する必要があります。 'std :: bitset <8>'のためのO(1)解は完全に可能ですが、 'std :: bitset <2048>'のためではありません。 – Rakete1111

+1

O(n)操作未満のサイズのO(n)のビットセットでビット単位の操作を実行できません – DAle

+0

[XY問題]がないかぎり(https://meta.stackexchange.com/questions/66377/what-is- the-xy-problem)ここで、あなたはそれをすることはできません。 – yeputons

答えて

3

答えはありません。

ビットセットがnであるとします。 xor演算子^を見てみましょう。 明らかに両方のオペランドの各ビットを調べなければならないので、2nルックアップとなります。 この結果、O(n)の複雑さが生じます。

たとえば、次のようなアセンブラ命令を使用できます。一度に32ビットで処理するので、操作の数は(n+31)/32ですが、これは複雑さがO(n)であることは変わりません。すべての複雑さは無限に向かってnのために計算され、一定の要因は無視されます。