任意大小网格内最优4字放置

时间:2013-06-26 15:10:30

标签: python algorithm optimization constraint-satisfaction

问题陈述:

给定四个单词,将它们放在m×n方格网格内,使网格区域尽可能小。

单词必须在网格内从左到右,从上到下运行。字母可能重叠,但不能形成其他字。所有单词都必须在一个巨链中相互链接。

可以用4个单词“一,二,三和四”形成的示例网格。请注意,最后一个网格是最优化的。

enter image description here

我正在尝试学习python,我认为这将是一个很好的应用程序,我的牙齿。

任何想法如何构建我的数据和算法来解决这样的问题?我不是在寻找一个直接的答案,但有些提示如下:

使用此库,此类或此数据结构。或者通过可用空间这样迭代。

1 个答案:

答案 0 :(得分:2)

考虑一下您需要的最大网格大小是多少?如果字词为onetwothreefour,那么最大尺寸网格将为

  

12 x 12.这是网格的大小,每个单词都是端对端放置,共享前一个单词的最后一个字母。

现在我们有了空间。你如何适应空间中的文字?试着想一下蛮力方法。那会带来什么?

  

尝试迭代所有可能的模式组合。您可以将每个单词放置24个方法,并且有4个单词,因此您有~500,000个组合,这对于现代计算机来说并不是很多。查看哪些模式实际满足标准(字母匹配等)。

一旦你有蛮力方法,你怎么能改进它?

就数据结构而言,您实际上只需要一个可以存储字符的网格。您可以使用嵌套列表结构,numpy数组,pandas或许多其他东西。首先尝试解决问题,然后再进行改进。

相关问题