【发布时间】:2012-01-20 16:21:35
【问题描述】:
编写一个程序,找出最大可能的字母矩形,使每一行构成一个单词(从左到右),每列构成一个单词(从上到下)。
我发现了这个有趣的问题。这不是家庭作业,尽管听起来可能是这样。 (我不在学校)。我这样做是为了好玩。
示例
来自 cat、car、ape、api、rep、tip 我们得到以下矩形(正方形):
c a r a p e t i p
我最初的想法是构建某种前缀树,这样我就可以检索所有以特定字符串开头的单词。当我们已经有 2 个或更多单词(从上到下或从左到右阅读)并且我们需要找到下一个要添加的单词时,这将很有用。
还有其他想法吗?
编辑
这可以用长方体(3D 矩形)来完成吗?
如果它需要在对角线上有有效的单词怎么办(创意来源:user645466);如何优化它的算法?
【问题讨论】:
-
这听起来像是一个很棒的拼字游戏笑话。
-
您将此问题标记为 NP-hard;这是一个已知的 NP 难题,还是只是您的猜测?
-
@Adrian:另见香蕉图。
-
可能是NP难是为了吸引人群。 ;)
-
@templatetypedef A reduction from 3SAT 由评论者“d”提出。我个人认为使用精确覆盖作为源问题会更容易。
标签: algorithm optimization np-hard