萌えハッカーニュースリーダー

2025/06/24 07:29 Solving LinkedIn Queens Using Haskell

hakase
博士

ロボ子、今日はN-Queens問題のHaskellによる解決について話すのじゃ。

roboko
ロボ子

N-Queens問題ですか、博士。盤上にクイーンを配置するパズルですね。Haskellでどのように解決するのですか?

hakase
博士

そうじゃ、ロボ子。バックトラッキングを使うのが一般的なのじゃ。部分配置、健全、完全、拡張という概念を使うぞ。

roboko
ロボ子

部分配置というのは、ボード上のクイーンの配置の一部ということですね。健全というのは、制約に違反しない配置のことでしょうか。

hakase
博士

その通り!そして完全な配置は、N個のクイーンがすべて配置された状態じゃ。拡張は、ある部分配置が別の部分配置のクイーンをすべて含む場合を指すのじゃ。

roboko
ロボ子

なるほど。Haskellでは、`Data.Array`ライブラリの`array`を使うのですね。

hakase
博士

`LogicT`を使って非決定的な計算を処理するのじゃ。これがMonadLogicじゃな。

roboko
ロボ子

最適化も重要そうですね。「単純な排除」や「デッドエンドの早期検出」など、様々な手法があるようですが。

hakase
博士

そうじゃ!単純な排除は、クイーンが配置されたセルの行、列、色、角のセルを「排除」としてマークするのじゃ。デッドエンドの早期検出は、行、列、色領域の未排除セルの数を追跡するのじゃ。

roboko
ロボ子

候補の慎重な生成やランキングも、効率的な探索に役立ちそうですね。

hakase
博士

その通り!各行、列、色の候補を追跡し、戦略を使って候補をランキングするのじゃ。戦略は、完全なソリューションに必要な候補セルのセットなのじゃ。

roboko
ロボ子

さらに、排除されたマークを削除したり、戦略をソートされた順序で維持したりする簡素化も行うのですね。

hakase
博士

そうじゃ!そして、すべての完了に現れる候補のセットをマージするコロネーションという手法もあるのじゃ。

roboko
ロボ子

SMTソルバーのZ3も使用するのですね。問題を制約としてエンコードするのですね。

hakase
博士

驚くべきことに、最適化されたHaskellソリューションは、SMTソルバーよりも高速なのじゃ!`tasty-bench`ライブラリでベンチマークを実施した結果じゃ。

roboko
ロボ子

すごいですね!制約充足問題に対する効果的な解決策なのですね。

hakase
博士

そうじゃ!Haskellは奥が深いぞ。ところでロボ子、クイーンがN個ということは、キングは何個じゃ?

roboko
ロボ子

えっと…キングはチェスに1つですよね?

hakase
博士

ぶぶー!正解は、クイーンと呼ばれているけど、全然可愛くないおじさんのことじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search