首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最长公共子序列(Haskell)

最长公共子序列(Haskell)
EN

Stack Overflow用户
提问于 2011-10-01 05:12:47
回答 1查看 1.8K关注 0票数 2

我已经在这个问题上挣扎了一段时间。我正在解决Haskell中最长的公共子序列问题作为学习练习。

我有一个传递给两个Int ij的函数f1,以及一个函数f2f1构建了一个二维列表,以便列表中的(i,j)位置等于f2 i j

现在,我尝试编写一个名为lcs的函数,该函数接受两个字符串s1s2,并使用f1查找最长的公共子序列进行记忆。

我不太确定如何设置它。有什么想法吗?

代码:

代码语言:javascript
复制
f1 :: Int -> Int -> (Int -> Int -> a) -> [[a]]

f2 :: Int -> Int -> a

lcs:: String -> String -> Int
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-01 16:00:47

我假设f1Int参数是某种界限?请记住,使用列表的好处是不需要指定界限(因为懒惰),但它会降低访问时间。

这个函数应该做你想让f1做的事情(记住一个给定的函数):

代码语言:javascript
复制
memo :: (Int -> Int -> a) -> (Int -> Int -> a)
memo f = index where
  index x y = (m !! x) !! y
  m         = [[f x y|y <- [0..]]|x <- [0..]]

-- memoized version of f2
f2' = memo f2
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7616151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档