順列と N-Queens の考え方
要素を配置し、衝突時にバックトラックします
「順列と N-Queens の考え方」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。
部分集合から順列へ
順列とは、すべての要素を何らかの順序に並べたものです。順列の生成は、部分集合の次に学ぶバックトラッキングの技法です。🔀
順列はいくつあるか
n個の要素からなる順列はnの階乗個あります。最初の位置にはn通り、次の位置にはn−1通りというように選べるためです。個数は急速に増加します。
1つずつ要素を配置する
再帰処理では、左から右へ位置を埋めていきます。各段階で未使用の要素を1つ選んで配置し、残りの要素について再帰します。
使用済みの要素を管理する
ブール値の使用済み配列で配置済みの要素を記録するため、すべての順列で各要素がちょうど1回ずつ現れます。
コードで順列を生成する
このバックトラッキングでは、未使用の値を配置して再帰し、その後で次の分岐のために使用済み状態を解除します。
def perm(cur):
if len(cur) == n:
out.append(cur[:]); return
for x in a:
if x not in cur:
perm(cur + [x])許可されていればitertoolsを使う
短時間で解く競技プログラミングでは、Pythonのitertools.permutationsを使うと、再帰を自分で書かずにすべての順序を生成できます。
from itertools import permutations
for p in permutations(a):
print(p)N-Queens問題
N-Queensでは、互いに攻撃し合わないように、n×nの盤面にn個のクイーンを配置します。これは典型的なバックトラッキングのパズルです。👑
各行に1個のクイーンを置く
同じ行に2個のクイーンを置くことはないため、各行に1個のクイーンを置き、その列だけを選びます。これにより探索量を大幅に減らせます。
3種類の衝突を確認する
配置する前に、すでに使われている列や対角線を選ばないようにします。使用済みの列と、2方向の対角線を集合で管理します。
if c in cols or r-c in d1 or r+c in d2:
continue行き詰まったらバックトラックする
その行で使える列がなければ、その分岐は失敗です。バックトラックして最後のクイーンを取り除き、次の選択肢を試します。
共通するパターン
順列とN-Queensには、選ぶ、再帰する、元に戻すという共通の形があります。この形が分かれば、多くの配置問題を同じテンプレートで解けます。
クイックチェック
N-Queensで各行に1個だけクイーンを置くのはなぜですか?
まとめ:選ぶ、再帰する、元に戻す
未使用の要素を配置して順列を生成する方法を学びました。また、N-Queensでも、衝突を確認しながら同じ「選ぶ、再帰する、元に戻す」パターンを使うことを学びました。🎯
よくある質問
「順列と N-Queens の考え方」レッスンは無料ですか?
はい。「順列と N-Queens の考え方」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「順列と N-Queens の考え方」で何を学びますか?
要素を配置し、衝突時にバックトラックします ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「順列と N-Queens の考え方」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 再帰的に考える: Base と Recurse
- すべての部分集合を生成する
- 順列と N-Queens の考え方
- 制限時間を守るために枝刈りする