Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビット演算の基礎と応用 / Bit Operations

ビット演算の基礎と応用 / Bit Operations

7月23日研究室ミーティング

kaityo256

July 23, 2020
Tweet

More Decks by kaityo256

Other Decks in Programming

Transcript

  1. 3 真(True)か偽(False)のどちらかの値をとる変数 Pythonの場合 多くのプログラム言語に真偽値を表現する型がある a = bool(1) print(a) # =>

    True type(a) # => bool b = bool(0) print(b) # => False 整数の1をbool型に変換するとTrueに、0はFalseになる type(1 < 2) # => bool 比較結果はbool型になる (if文やwhile文などの条件分岐に使う)
  2. 4 論理演算とは真偽値に関する演算のこと 否定 (NOT) 「真」の否定 → 偽 「偽」の否定 → 真

    print(not True) # => False print(not False) # => True 真偽値をひっくり返す Pythonコード例
  3. 5 論理積 (AND) 「A and B」は「A かつ B」の意味 AとBがどちらも真の時にのみ真、それ以外は偽 print(True

    and True) # => True print(True and False) # => False print(False and True) # => False print(False and False) # => False Pythonコード例
  4. 6 論理和 (OR) 「A or B」は「A または B」の意味 AとBのどちらかが真の時にのみ真、それ以外は偽 print(True

    or True) # => True print(True or False) # => True print(False or True) # => True print(False or False) # => False Pythonコード例 ※ 他にも否定論理積(NAND)や排他的論理和(XOR)などがある
  5. 16 2,2 4 2 4 2,2 1 1 2 2

    3 3 2 2 1 1 横で確定マスを探したら、次は縦の探索をする 横の探索で確定したマス 次はここに着目 この辺にも確定マスはあるが 説明の都合で未確定とする
  6. 18 確定 マス 100000 2,2 and 110110 100000 ANDをとったら確定マスと一致→無矛盾 A

    and B == A 自分と相手の論理積をとったものが自分と一致 →自分が完全に相手に含まれる 共通 部分
  7. 19 確定 マス 100000 2,2 and 011011 000000 ANDをとって確定マスと一致しない→矛盾 A

    and B is not A 自分と相手の論理積をとったものが自分と一致しない →自分が完全に相手に含まれていない 共通 部分
  8. 21 2,2 4 2 4 2,2 1 1 2 2

    3 3 2 2 1 1 同様な処理を縦・横を切り替えながら実行すると、(多分)絵が完成 ※ 空白確定マスの処理をやったかどうか記憶が曖昧・・・
  9. 26 最初に「種」を置いておく p が小さい と絶滅 p が大きい と人口爆発 https://www.s.u-tokyo.ac.jp/ja/press/2016/4602/ 相転移

    乱流遷移の普遍性と関係 [M. Sano and K. Tamai, Nat. Phys. 12, 249 (2016)] ←「乱流屏風」と呼ばれる実験装置
  10. 27 0 1 1 0 1 0 1 1 ・

    メモリを効率的に利用できる ・ プログラムが高速化される (かもしれない) アクティブなサイトを1、そうでないサイトを0とする マルチスピンコーディングにより・・・ マルチスピンコーディングとは二種類の値を取る自由度を ビットでまとめて表現すること
  11. 33 N個の中からM個をランダムに選ぶアルゴリズム 乱数はM回しか振らなくて良い 1. J ← N-M+1 2. J個のなかからランダムに選ぶ 1.

    もし選ばれてないものを選んだら、そのまま選ぶ 2. もし選ばれていたらJ+1個を選ぶ 3. J ← J+1 4. J<Nなら 2.へ戻る N=8, M=3の例
  12. 41 確率1/2でビットが立っているビット列 x1, x2 01010101 10011001 x1 x2 01010101 10011001

    00010001 x1 and x2 and = 01010101 10011001 11011101 x1 or x2 or = 確率1/4のビット列 確率3/4のビット列 1/4 = (0.01)B 3/4 = (0.11)B
  13. 42 1/2 = (0.1)B 1/4 = (0.01)B 3/4 = (0.11)B

    5/8 = (0.101)B n個の乱数で二進数表記n桁の確率を表現できる x1 x2 AND x1 x2 OR x1 x3 OR (x2 AND x1) 論理式の作り方: pを二進数表記して、右から「1ならAND」「0ならOR」 (0.0101)B = 5/16 3 2 1 x4 AND (x3 OR (x2 AND x1))
  14. 43 p = 0.51のビット列が欲しい時 1. 有限桁法で p = 0.5のビット列を作る 2.

    BS法かPO法でp=0.02のビット列を作る 3. 二つのビット列のORを取る 1 - p =(1-0.5)(1-0.02) ORは「どちらも0なら0」 できたビット列の0の確率 二つとも0の確率 p = 0.51
  15. 45 平 均 乱 数 生 成 回 数 p

    = 1/4 からの補正 p = 3/8 からの補正 32ビットなら高々7回の乱数生成で 任意の確率のビット列を生成可能 欲しい確率p
  16. 48 各ビットが独立に確率pで1となるビット列を 生成するアルゴリズムを考案 Binomial-Shuffle (BS) 法 立てるビット数を決めてからシャッフル Poisson-OR (PO) 法

    1ビットランダムに立っているビット列の論理和 有限桁法 p=0.5となるビット列を桁数の数だけ論理演算 Directed Percolationのマルチスピンコーディング を実装し、スカラー実装に比べて劇的に高速化 arXiv:1808.05009 https://github.com/kaityo256/rbs HW, S. Morita, S. Todo, N. Kawashima, J. Phys. Soc. Jpn. 88, 024004 (2019)