我吮吸数学,所以我无法弄明白:图像中有多少k个相邻像素的组合?对于从2到n * n的每个k,图像中n * n个总像素中的k个像素的组合,但具有它们必须是邻居的限制。我需要一个程序的所有k值的总和,它必须考虑到它所推理的集合中的许多元素。
邻居是4连接的,不包裹。
答案 0 :(得分:2)
一旦获得大小为k(here's a reference)的像素blob的不同形状的数量,那么它归结为两件事:
获得一个确切的答案是一项巨大的计算工作(对于k = 56,您正在寻找超过10 ^ 30个不同的形状 - 想象如果k = 10,000)但是您可能能够满足您的需要通过拟合k的前50个值。
(注意:维基百科文章中的参考文件通过对A_k的定义来处理重复。)
答案 1 :(得分:2)
您似乎正在处理可以映射到Markovian Walks的问题。
如果我理解你的问题,那你就是想像这样计算长度为k的路径:
Start (end)-> any pixel after visiting k neighbours
* - - - - -*
| |
| |
- - - -
在类似于棋盘的结构中,并且您只想连接垂直和水平邻居。
我认为您希望路径是自我避免的,这意味着在步行中不应遍历两次像素(意味着没有循环)。这种情况导致了一个称为SAW(Self Avoiding Walks)的经典问题。
好吧,现在坏消息:问题是开放的!没有人解决它。你可以找到一个很好的问题介绍here,从第54页开始(或第16页,由于页码在文档中重复,因此计数令人困惑)。但整篇论文非常有趣且易于阅读。它设法在几张幻灯片中解释马尔可夫链的数学背景,历史轶事和科学重要性。
希望这有助于......避免这个问题。
答案 2 :(得分:1)
如果你打算迭代所有可能的polyominos,我恐怕你会等很长时间。从维基百科站点关于polyominos,它将至少是O(4.0626 ^ n)并且可能更接近O(8 ^ n)。到n = 14时,计数将超过50亿,而且太大而无法适应int。到n = 30的时间,计数将超过17个,并且你将无法将它装入长时间。如果所有世界各国政府将他们的资源集中在一起,以32 x 32图标迭代所有多边形,他们将无法在太阳升起超新星之前做到这一点。
现在这并不意味着你想做的事情是难以处理的。你在一个多项式上做的几乎所有工作都可能部分完成在其他工作上。使用动态编程进行指数加速可能是一项有趣的任务。你想要完成什么?