与えられた範囲内の整数の数を見つける方法は、ビットを設定しています

NickThomsan

与えられた範囲内でxを言う数がいくつあるか知りたいのですが、xのバイナリ表現の1の数が偶数である場合にlとr、l <rとしましょう。それを見つける効率的な方法はありますか?

いう

重要な事実は次のとおりです。

  • 場合nは非負でさえ数、そして正確に半分非負整数未満のnは偶数パリティと残りの半分は奇数パリティを持っています。(「偶数パリティ」とは、バイナリ表現のビット数が偶数であることを意味します。)

あるプロパティPを持つ範囲[ lrの整数の数を数える必要がありlが0である任意の範囲でこの問題を解決する方法を知っているとします。( "[ lr)"は "半分です。 -open範囲」:すべての整数N LN < Rこれにより、算術演算が簡単になります。)次に、l ≠0の一般的な問題を解決するために減算する必要があります。COUNT[ lr)= COUNT [0、r)− COUNT [0、l)。

最初の事実は、nに対してのみ機能するため、私たちが知る必要のあるすべてを完全に教えてくれるわけではありませんただし、nが奇数の場合n-1は偶数であり、必要なのはn-1自体のパリティをチェックすることだけです。これは[0、n -1)の範囲外の余分な数です。

これらすべてをまとめると、範囲[ lr)がある場合、カウントは次のように計算されます。

  • COUNT(0、l)はlが偶数の場合l / 2でありlが奇数の場合l -1)/ 2 + PARITY(l)です。
  • COUNT(0、r)はrが偶数の場合r / 2でありrが奇数の場合r -1)/ 2 + PARITY(r)です。
  • COUNT(lr)はCOUNT(0、r)− COUNT(0、l)です

その最後の計算には、範囲の大きさに関係なく、最大2つのパリティ計算と、2つの除算と減算が必要です。

これが数学のサイトだとしたら、最初は重要な事実で主張を証明せざるを得ないかもしれませんが、これはCSなので、証明の概要で満足します。最初に、iが偶数の場合、PARITY(i)とPARITY(i +1)が異なることに注意してください(バイナリ表現は最後のビットでのみ異なるため)。逆に、iが奇数の場合、PARITY(i)とPARITY(i -1)は異なります。ここで、[0、n)のすべての整数を取り、それらを奇数パリティの整数のセットと偶数パリティのセットに分割し、準同型を検討します。

FI)⇒ I +1場合iは偶数です。
FI)⇒ I -1もしiが奇数です。

fi)のパリティがiのパリティと異なるため、[0、nの2つのサブセットの1つ上fのイメージはもう1つのサブセットですしたがって、2つのサブセットは同じサイズです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

与えられた数の範囲を見つける方法は?

分類Dev

整数の2つのリストが与えられた場合、重複しない範囲を見つける方法は?

分類Dev

Long.bitCount()はどのようにして設定されたビット数を見つけますか?

分類Dev

与えられた範囲の交差点を見つけますか?

分類Dev

Rを使用して、最小値の特定の範囲内のベクトル内の値の数を見つけるにはどうすればよいですか?

分類Dev

指定された範囲内のリストのすべての可能なサブリストと、それらのすべての要素を乗算した後の最小の積を見つける効率的でPythonicな方法はありますか?

分類Dev

c#は、使用範囲内の最初のセルを見つける方法に優れています。

分類Dev

C:変数内の範囲内のすべてのビットを設定する最も効率的な方法

分類Dev

少し遅れてクッキーを設定する方法、またはルビーのクッキーの古さを見つける方法

分類Dev

除数を見つける関数を使用して、2つの正の整数が与えられた任意の2つの最大公約数を見つけます

分類Dev

与えられた範囲内のn個の数の倍数の数を見つける

分類Dev

列内の要素の範囲を新しい値のセットに置き換え、残りを0に設定するように見えます

分類Dev

与えられた範囲でxより大きい要素の数を見つけます

分類Dev

数値に設定されている最後のビットを見つける方法(SWI-Prolog)?

分類Dev

一連の点から範囲内の接触した点に最も近い点を見つける効率的な方法はありますか?

分類Dev

日付範囲を指定して、その範囲内で重複するイベントを見つけます

分類Dev

bisect-leftmostとbisect-rightmostをマージして、並べ替えられた配列内の重複の範囲を見つけます

分類Dev

複数のビットベクトル; 正確にn回設定されているビットを見つける方法は?

分類Dev

特定の引数が設定されていない特定のアノテーションが付けられたメソッドを見つける方法は?

分類Dev

与えられた範囲のペア値を見つける

分類Dev

与えられた範囲の回文数を見つけるJavaプログラム

分類Dev

C#には、範囲内のすべての整数から1を引いた整数を反復処理する優れた方法がありますか?

分類Dev

与えられた点からの距離が整数n以下であるすべての数を見つける方法

分類Dev

数値範囲のビットごとの OR を効率的に見つける方法

分類Dev

Rで、行によって定義された日付範囲に属する同じgroup_by内の他の行を見つける方法は?

分類Dev

指定された範囲内の関数の根を見つけます

分類Dev

Rubyを使用して範囲内の一意の単語のセットを見つけるためにREGEXをどのように使用しますか?

分類Dev

ビューコントローラの2つのTextFieldがデリゲートとして設定されているため、NSRange、範囲、またはインデックスが範囲外でアプリがクラッシュします

分類Dev

与えられた値の範囲で最大の奇数フィボナッチ数を見つける

Related 関連記事

  1. 1

    与えられた数の範囲を見つける方法は?

  2. 2

    整数の2つのリストが与えられた場合、重複しない範囲を見つける方法は?

  3. 3

    Long.bitCount()はどのようにして設定されたビット数を見つけますか?

  4. 4

    与えられた範囲の交差点を見つけますか?

  5. 5

    Rを使用して、最小値の特定の範囲内のベクトル内の値の数を見つけるにはどうすればよいですか?

  6. 6

    指定された範囲内のリストのすべての可能なサブリストと、それらのすべての要素を乗算した後の最小の積を見つける効率的でPythonicな方法はありますか?

  7. 7

    c#は、使用範囲内の最初のセルを見つける方法に優れています。

  8. 8

    C:変数内の範囲内のすべてのビットを設定する最も効率的な方法

  9. 9

    少し遅れてクッキーを設定する方法、またはルビーのクッキーの古さを見つける方法

  10. 10

    除数を見つける関数を使用して、2つの正の整数が与えられた任意の2つの最大公約数を見つけます

  11. 11

    与えられた範囲内のn個の数の倍数の数を見つける

  12. 12

    列内の要素の範囲を新しい値のセットに置き換え、残りを0に設定するように見えます

  13. 13

    与えられた範囲でxより大きい要素の数を見つけます

  14. 14

    数値に設定されている最後のビットを見つける方法(SWI-Prolog)?

  15. 15

    一連の点から範囲内の接触した点に最も近い点を見つける効率的な方法はありますか?

  16. 16

    日付範囲を指定して、その範囲内で重複するイベントを見つけます

  17. 17

    bisect-leftmostとbisect-rightmostをマージして、並べ替えられた配列内の重複の範囲を見つけます

  18. 18

    複数のビットベクトル; 正確にn回設定されているビットを見つける方法は?

  19. 19

    特定の引数が設定されていない特定のアノテーションが付けられたメソッドを見つける方法は?

  20. 20

    与えられた範囲のペア値を見つける

  21. 21

    与えられた範囲の回文数を見つけるJavaプログラム

  22. 22

    C#には、範囲内のすべての整数から1を引いた整数を反復処理する優れた方法がありますか?

  23. 23

    与えられた点からの距離が整数n以下であるすべての数を見つける方法

  24. 24

    数値範囲のビットごとの OR を効率的に見つける方法

  25. 25

    Rで、行によって定義された日付範囲に属する同じgroup_by内の他の行を見つける方法は?

  26. 26

    指定された範囲内の関数の根を見つけます

  27. 27

    Rubyを使用して範囲内の一意の単語のセットを見つけるためにREGEXをどのように使用しますか?

  28. 28

    ビューコントローラの2つのTextFieldがデリゲートとして設定されているため、NSRange、範囲、またはインデックスが範囲外でアプリがクラッシュします

  29. 29

    与えられた値の範囲で最大の奇数フィボナッチ数を見つける

ホットタグ

アーカイブ