文字拾い謎solver
目的
こういう謎を解きたい
![](https://assets.st-note.com/img/1699729957960-Y8w8uKMTjy.png?width=800)
制約
要素のオーダーや定義
単語リストの大きさ : $${A\sim3e4}$$ or $${2e5}$$
単語の長さの見積もり$${L\leq15}$$
文字の数 : $${B=75\sim1e2}$$
問題に含まれるブロック数 $${N}$$ (例では4)
問題に含まれる数字の数 $${M}$$ (例では3)
方法1 : 数字に当てはめる文字全探査
$${O(B^M)}$$
一般の場合
$${N}$$個の単語すべてに該当する単語リストの単語が存在するかを判定。
$$
O(AB^M)
$$
数字に当てはまる文字を先に選別する場合
前計算$${O(A)}$$で文字を選別できる
数字$${i}$$に使用できる文字の種類数を$${B'_i}$$とし
$${B'=\max_{i}B'_i}$$とすると
$$
O(AB'^M)
$$
数字の組に対する解を持ち、併合する方法
追記予定
方法2 : ブロックに当てはめる単語全探査
$${O(A^N)}$$
単語に単語を当てはめる(一般)
各ブロックにどの単語を当てはめるかを全探査$${O(A^N)}$$し、
$${N}$$単語の任意の組に矛盾がないかを判定$${O(N^2)}$$
$$
O(A^N)
$$
単語に単語を当てはめる(全ての数字を含む枠がある場合)
全ての数字を含む枠を便宜上金枠と呼ぶことにする
金枠にどの単語を当てはめるかを全探査$${O(A)}$$し、
他の枠にどの単語を当てはめればよいかを考える$${O(NA)}$$
$$
O(A^2)
$$
コードサンプル
ここから先は
1,179字
¥ 500
この記事が気に入ったらサポートをしてみませんか?