Filling Crosswords is Very Hard
Laurent Gourv\`es, Ararat Harutyunyan, Michael Lampis, Nikolaos, Melissinos

TL;DR
This paper investigates the computational complexity of crossword filling problems, demonstrating NP-hardness under various conditions, establishing parameterized algorithms, and analyzing approximation limits based on complexity conjectures.
Contribution
It provides a comprehensive complexity analysis of crossword filling, including NP-hardness proofs, fixed-parameter tractability results, and approximation bounds linked to ETH and the Unique Games Conjecture.
Findings
NP-hardness persists even with tree-like grid structures and no word reuse.
An $m^{tw}$ algorithm exists when word reuse is allowed, and it is proven optimal under ETH.
A 1/2-approximation algorithm for the optimization version is likely optimal under the Unique Games Conjecture.
Abstract
We revisit a classical crossword filling puzzle which already appeared in Garey\&Jonhson's book. We are given a grid with vertical and horizontal slots and a dictionary with words and are asked to place words from the dictionary in the slots so that shared cells are consistent. We attempt to pinpoint the source of intractability of this problem by taking into account the structure of the grid graph, which contains a vertex for each slot and an edge if two slots intersect. Our main approach is to consider the case where this graph has a tree-like structure. Unfortunately, if we impose the common rule that words cannot be reused, we show that the problem remains NP-hard even under very severe structural restrictions. The problem becomes slightly more tractable if word reuse is allowed, as we obtain an algorithm in this case, where is the treewidth of the grid graph.…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
