- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有一个 n x m
矩阵。我需要找出有多少种不同的方式可以放置 k
此矩阵上的不相交路径。每条路径都满足这些条件:
-它从第一列开始。
-在最后一个结束。
-如果路径结束于(a,b)
对于 b<m
, 那么下一步只能上格(a',b+1)
, 其中|a'-a|<=1
(意思是我沿对角线向下移动一步,元组中的第一个是 x 坐标,第二个是 y 坐标)。
-我知道n
很小(比如 8),所以它不会破坏算法的复杂性。
明显的蛮力法(递归探索所有可能的选项)是正确的,但是因为m
可能非常大,在这里没有用。
我在思考这些不相交的路径时遇到了极大的麻烦。对于 k=1
事情会很简单。我们会将数组的每个元素与其结束的路径数相关联,并使用以下公式递归计算它 tab[m][n]=tab[m-1][n-1]+tab[m-1][n+1]
.但是什么时候 k=2
?我认为如果我能解决这个问题,我可以很容易地将它扩展为更大的 k
的,但我在考虑成本不是指数级的算法时遇到了麻烦。
最佳答案
我无法建立一个非指数算法,但至少我相信我可以将问题归纳为 k>=2,前提是 k 小于 n 且 n 相对较小(比如 8)
假设我们正在查看一个 8 行 M 列矩阵,其中 M 很大,并且您需要适应从左到右一直摆动的 k 条路径。
单列可以用 C(8,k) 种可能的配置绘制,最大大约为 70。你应该可以进一步建立一个70x70的矩阵,表明每个配置可以连续到其他列配置,遵守你的路径规则。
上面的矩阵实际上是一个70个顶点的无向图。
问题现在已经转换为找到图中所有 M 长度的路径。
进一步编辑:如果您只想获得可能的 M 列配置的总数,多项式算法是可能的,如下所示:
考虑以下已经获得:
N-1 列配置的总计数,其中计数根据最后一列配置求和(例如,5 个配置以配置 1 结尾,46 个以配置 2 结尾,等等... 28 个以配置 70 结尾)。这可以用数组或哈希表表示
您可以使用 70x70 矩阵轻松导出 N 列配置的下一个数组。
因此,上面形成了一个多项式时间算法来计算 M Column 配置的总数。你只需要从 N=1 开始
关于algorithm - 在 n x m 矩阵中放置 k 条不相交路径的方法有多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156441/
在过去的几个月里,我一直在研究 Haskell,我遇到了一个我不太确定如何处理的单子(monad)的情况。 我有一个 a -> m a 类型的值第二个类型为 m (a -> a)我需要对它们进行组合,
仿函数有 (a -> b) -> m a -> m b 应用程序有 f (a -> b) -> f a -> f b Monad 有 m a -> (a -> m b) -> m b 但是,是否有扩展
我是 Haskell 的新手,我想知道是否有比 Hoogle 更好的方法来确定一个库功能是否重复? 举个例子:我有很多函数f :: Monad a => a -> m a我想链接在一起,比如 f123
将存储在一系列列表中的 m、m、n 维数组组合成一个 m、m、n 维数组的方法是什么? 示例: 这是三个包含 m,m,n 维数组的列表: list1 <- array (1, dim = c(5, 5
有没有办法写一个函数f::(a -> b -> ... -> t) -> (Monad m => m a -> m b -> ... -> m t ),基本上是 liftMn 对于任何 n? (编辑:
我有一个像这样的 pandas 数据框: df = pd.DataFrame({'A':[1,3,2,9],'B':[2,1,2,7],'C':[7,2,4,6],'D':[8,1,6,4]},ind
这个问题来自文章“Trivial Monad”,地址:http://blog.sigfpe.com/2007/04/trivial-monad.html 。提供的答案是 h x y = x >>= (
所以>>= :: m a -> (a -> m b) -> m b和>> :: m a -> m b -> m b . 而 f b -> f a . 但我想要一些能m a -> (a -> m b)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 3 年前。 Improve
当我安装 rakudo来源: $ git clone git@github.com:rakudo/rakudo.git $ cd rakudo $ perl Configure.pl --gen-mo
我正在尝试通过查看一些练习来提高我的 Idris 技能 Software Foundations (最初是为 Coq 设计的,但我希望对 Idris 的翻译不会太糟糕)。我在使用 "Exercise:
我想知道以下是否可行。 与服务器交换密码时,应保护密码。因此,用户可以使用生成的 key kUser 来加密密码。 Encrypt(m, kUser) 生成加密消息 eU(m)。现在用户将此信息发送到
这两个表之间存在什么样的关系(1:1、1:m、m:m,等等)? CREATE TABLE IF NOT EXISTS `my_product` ( `id` int(11) NOT NULL au
有人可以解释类型的含义以及如何实现吗? class Foldable f where foldMap :: (Monoid m) => (a -> m) -> f a -> m 基于 https:
例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签: @Html.LabelFor(m => m.ProductName) 我没有在任何地方声明变量“m”,但 IDE 会自动找出
更新:澄清、更明确的重点和缩短的示例: 我可以避免 M op+(M&&,M&&) 过载吗?假设,我想很好地处理 RValues?我想其他三个重载是必需的。 我首先使用 (&&,&&) 重载的原因: 通
假设我有一个函数,它接受两个向量并返回一个整数,例如一个向量中也存在另一个向量中的元素数量。喜欢: f m [,1] [,2] [,3] [1,] "c" "i" "c" [2,] "
我想将字符串(字幕)转换为: 585 00:59:59,237 --> 01:00:01,105 - It's all right. - He saw us! 586 01:00:01,139 -->
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
是否可以将 Linux 中的大文件将 d.m.Y h:m:s 转换为 Y-d-m h:m:s? 示例数据 "30.07.2016 00:00:00",DN123,PAPN,PAPN,TEST,9189
我是一名优秀的程序员,十分优秀!