- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在解决一个问题,其中有一个包含 r 行和 c 列的网格。我们从左上角的单元格开始,到右下角的单元格结束。限制是我们一次只能向下或向右移动一个单元格。此外,某些小区可能会被列入黑名单。问题是找出总数。我们可以从源到目标的方法。
这是我的解决方案,它很简单,但运行时间呈指数级:
int count(boolean[][] array, int r, int c)
{
if ((r < 0 || c < 0) || !array[r][c]) return 0;
if (r == 0 && c == 0) return 1;
return count(array, r - 1, c) + count(array, r, c - 1);
}
我遇到的问题是在记住这一点时。
最佳答案
Can memoization make this solution be made more efficient?
是的!
If so, then I cannot blacklist all the cells that are in a path that fails because there might be other paths through those cells which may lead to target.
正确。
So I'm confused so as to what I should cache here and where do I add the additional check to avoid checking on paths I have already gone through.
这就是你要做的。
创建一个可空整数的 r x c 二维数组,我们称之为 a
。数组的含义是“a[x][y]
给出从(x,y)到(r-1,c-1)的路径数”——假设(r-1,c-1)是“exit”我们试图到达的单元格。
数组将从每个元素为空开始。那太棒了。 Null 表示“我不知道”。
用零填充数组中的每个“阻塞”单元格。这意味着“没有办法从这个牢房到达导出”。
如果a[r-1][c-1]
为零,则导出被堵塞,我们就完成了。每个查询的答案都是零,因为没有办法到达导出。我们假设导出单元没有被阻塞。
有一种方法可以从导出单元到达其自身,因此填写 a[r-1][ c-1]
与 1.
现在算法如下:
(x, y)
开始的解决方案.[x][y]
处填充数组。这些答案的总和a[x][y]
。 让我们举个例子。假设我们有
n n n
n n 0
n n 1
我们被要求提供 (0, 1) 的解。我们没有解决办法。因此我们尝试寻找 (1, 1) 和 (0, 2) 的解。
我们没有 (1, 1) 的解。所以我们必须得到 (1, 2) 和 (2, 1) 的解。
(1, 2) 我们已经得到了。是 0。
(2, 1) 我们没有,但 (2, 2) 我们有,而且这是唯一的邻居。 (2, 2) 为 1,所以我们填写 (2, 1):
n n n
n n 0
n 1 1
现在我们有足够的信息来填写 (1, 1):
n n n
n 1 0
n 1 1
我们还没有完成 (0, 2)。它有一个为零的邻居,因此:
n n 0
n 1 0
n 1 1
现在我们可以填写 (0, 1)
n 1 0
n 1 0
n 1 1
这就是我们正在寻找的内容,所以我们已经完成了。
替代解决方案:预先计算数组。
示例:
第一步:
n n n
n n 0
n n 1
填写外侧的行和列:
n n 0
n n 0
1 1 1
填写下一行和下一列:
n 1 0
2 1 0
1 1 1
最后一个:
3 1 0
2 1 0
1 1 1
我们就完成了;整个问题就解决了。
if there were no cells blacklisted, then I was wondering if the memoization would have served any purpose at all.
如果没有单元格被列入黑名单,则数组如下所示:
20 10 4 1
10 6 3 1
4 3 2 1
1 1 1 1
这是一个您之前应该见过的形状,并且知道如何直接计算每个元素。提示:您通常将其视为三角形,而不是正方形。
关于java - 冗余路径的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415519/
我有下面提供的“示例代码”,我觉得这很多余,并且想请您与我一起解释是否有任何更少冗余的方法来处理以下代码。 public interface Bars { FOO1 FOO1 = (FOO1)
我们刚刚测试了一个由 2 个服务器组成的 AppFabric 集群,我们在其中删除了“领导”服务器。第二个服务器对它的任何请求超时并出现错误: Microsoft.ApplicationServer.
我正在设计一个关系数据库 - 底层是 MySQL - DBDesigner 4 . 我有 3 个表:module、page 和 lang。每个模块属于一个页面,每个页面都有特定的语言: 外键 pag
我的 Fraction 程序运行流畅,但 NetBeans IDE 告诉我以下 if 是多余的: public boolean equals(Object other) { Fraction bo
下面的代码显然是多余的,但根据我的经验,我经常使用这种模式。有没有更好的方法在 python 中执行此操作? if re.search("at (\d{1,2}):\d{2}", p): a=
我有一个用具体示例说明的一般性问题。当所有组件对象都已测试时,您建议对复合对象进行多少测试? 作为具体示例,请考虑下面的 NullTerminatedStringReader。它从字节缓冲区中读取一个
if ( a > b) { return true; } return false; 对于上面的代码,Netbeans 给出了 “Redundant if statement” 警告并建议将其更改
当我添加一些约束时,例如: create table Test( IDTest int primary key, Credit int not null constraint Credit
此代码适用于 Microchip 的 PIC32MX 微处理器。他们的编译器本质上是 GCC 3.4。 我倾向于使用 GCC 的 __packed__ attribute将位域打包到一个 union
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在为我的应用程序使用apns通知,为此,我将apns设备 token 存储在我的sql数据库中。 问题在于,每次用户删除或安装该应用程序时,它都会生成一个新的设备 token ,并将其存储在数据库
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment Edit Dro
我正在开发一个使用 ARM Cortex-M0 处理器的项目。在这个项目中,我需要提供计时器支持(CMSDK (SSE-200)计时器)。 因此,在 vector 表中,在 TIMER0_IRQn 表
有没有写的理由 corsFilter.setAllowedOrigins(new HashSet(Arrays.asList("*"))); 其中allowedOrigins在ReSTLet框架中的定
我正在创建一个包含 4 个链接的 HTML/CSS 页面, Home.html Details.html ContactMe.html AboutUs.html 我想在所有关联的 HTML 页面中将其
我试图理解并使用其他人编写的代码,但由于我对 typedef 经验不多。 , 我有时会感到困惑。 有两个不同的头文件,一个继承另一个,并且在两个文件上声明相同的typedef。 为什么会出现冗余,如何
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个用于改造的 POJO 类。 public class AppData(){ String a; String b; String c;
我想知道: 编写这段代码: DataRow[] g = new DataRow[1] ; var t=new StringBuilder().AppendFormat("{0}", g[0]["a
只是一个性能问题...... 假设我有 5 个类,每个类都引用了 System.Data 和一个自己开发的库。这 5 个类是类库的一部分,最终将被构建并发布到一些 Web 应用程序作为引用。 通过将引
我是一名优秀的程序员,十分优秀!