タグ

ブックマーク / ioritsutsui.com (2)

  • 順列を全列挙する関数を実装する(Swift) – I.T.の雑記

    最初に 競プロの問題を解いていると考えられる順列を全列挙したい時がある。毎回実装すると時間をってしまうので関数にして時短したい。 考え方 はじめに[1, 2]の順列を全列挙する場合を考えてみる。考えられる順列は、 1 – 22 – 1 の2通りである。 次に[0, 1, 2]の順列を全列挙する場合を考える。 0 – 1 – 20 – 2 – 12 – 0 – 12 – 1 – 01 – 0 – 21 – 2 – 0 の6通りである。 ここで0 – 1 – 2、 0 – 2 – 1をみると、[1, 2]の順列を全列挙したものの先頭に0がくっついていることがわかる。0 – ([1, 2]の順列全列挙)というわけである。 残りの 2 – 0 – 1、2 – 1 – 0、1 – 0 – 2、1 – 2 – 0も同様に2 – ([0, 1]の順列全列挙)、 1 – ([0, 2]の順列全列挙)で求

    koogawa
    koogawa 2021/06/03
  • bit全探索を理解する(Swift) – I.T.の雑記

    Swiftでの実装方法だけを知りたい方のために先にコードを示す。 let n = 3 for i in 0..<(1<<n) { var result: [Int] = [] for j in 0..<n { if (i & (1<<j)) > 0 { result.append(i) } } // 結果出力 result.forEach { print($0) } } bit全探索とは? bit全探索は部分集合をすべて求める時などに利用できるアルゴリズムである。bit演算を用いて解を求める。 0~2の部分集合である({}, {0}, {1}, {0 1}, {2}, {0 2}, {1 2}, {0 1 2})を全て求める時などに利用できる。 仕組みを理解する カレーに入れる野菜を決めたいとする。手元には、じゃがいも、たまねぎ、にんじんがある。入れるパターンとしては、 何も入れないにんじ

    koogawa
    koogawa 2021/03/30
    bit全探索、使いこなせるようになりたいなー
  • 1