作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几年前,我参加了一门算法类(class),我们给出了以下问题(或类似的问题):
There is a building of
n
floors with an elevator that can only go up 2 floors at a time and down 3 floors at a time. Using dynamic programming write a function that will compute the number of steps it takes the elevator to get from floori
to floorj
.
i+2
和
i-3
在允许的值内。
i+2
案例第一然后选择一个偶数楼层我可以得到它来评估目标水平以下的偶数楼层,但就是这样。我怀疑它会直接射到最高的均匀楼层,然后下降 3 个级别,然后重复,永远在前几层之间振荡。
minimal
的方法可以比较潜在无限数字的函数可能是朝着正确方向迈出的一步。不幸的是,如果我尝试创建一个代表具有 100 层楼的建筑物的列表,则结果需要很长时间来计算,因为子问题的解决方案没有被重用。
levels = go [0..10]
where
go [] = []
go (x:xs) = minimum
[ if i == 7
then 0
else 1 + levels !! i
| i <- filter (\n -> n >= 0 && n <= 10) [x+2,x-3] ]
: go xs
1 + levels !! i
尝试引用先前计算的结果以及如何
filter (\n -> n >= 0 && n <= 10) [x+2,x-3]
试图限制
i
的值到有效的。正如我所说,这实际上不起作用,它只是演示了
方法 我希望看到这个问题得到解决。其他解决方法是
不是 对我来说很有趣。
最佳答案
问题是min
需要全面评估对 f
的两次调用,
所以如果其中一个无限循环 min
永远不会回来。
因此,您必须创建一个新类型,对 f
返回的数字进行编码。是零或零的后继者。
data Natural = Next Natural
| Zero
toNum :: Num n => Natural -> n
toNum Zero = 0
toNum (Next n) = 1 + (toNum n)
minimal :: Natural -> Natural -> Natural
minimal Zero _ = Zero
minimal _ Zero = Zero
minimal (Next a) (Next b) = Next $ minimal a b
f i j | i == j = Zero
| otherwise = Next $ minimal (f l j) (f r j)
where l = i + 2
r = i - 3
关于algorithm - 一维动态规划的懒惰打结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159269/
我正在开发一个带有 map 的应用程序,用户可以在其中绘制多边形区域。 我的问题是可以用节点绘制多边形(见图片)(我不知道节点是否是正确的词)。我没有找到防止多边形打结的简单方法。对于附图的情况,我希
我是一名优秀的程序员,十分优秀!