小编Joh*_*n G的帖子

如何在Haskell的FGL中实现"匹配"为O(1)?

在Haskell的函数图像库(FGL),大部分的图形算法依赖于"匹配"功能,其中,由于一Node nGraph g,退货c & g',其中cContextn,并且g'是图的其余部分(其中包含没有引用n).

我能看到这样做的唯一方法是检查每个上下文g并删除任何引用n并将它们添加到上下文中的边c.我相信,这需要线性时间.

马丁Erwig,谁写的图书馆,表明在这个文件,这个转换可以在不断的或至少子线性时间来完成.任何人都可以向我解释这是如何实现的吗?

haskell functional-programming graph-algorithm

11
推荐指数
1
解决办法
367
查看次数

Haskell中多参数函数的记忆

使用记忆化的函数下面的例子是提出了关于此页:

memoized_fib :: Int -> Integer
memoized_fib = (map fib [0..] !!)
    where fib 0 = 0
          fib 1 = 1
          fib n = memoized_fib (n-2) + memoized_fib (n-1)
Run Code Online (Sandbox Code Playgroud)

但是,如果我们想要记住多参数功能怎么办?例如,我们可以创建一个'乘以斐波那契'来定义f(m,n) = m*f(m,n-2) + m*f(m,n-1).我修改了上面这个'乘法斐波那契'函数的代码,如下所示:

mult_fib :: Integer -> Int -> Integer
mult_fib mult = (map (m_fib mult) [0..] !!)
    where m_fib _ 0 = 0
          m_fib _ 1 = 1
          m_fib m n = m*(mult_fib m (n-2)) + m*(mult_fib m (n-1))
Run Code Online (Sandbox Code Playgroud)

修改后的函数的运行时是指数的,即使原始是线性的.为什么这种技术在第二种情况下不起作用?另外,如何修改函数以使用memoization(不使用库函数)?

haskell memoization ghc

8
推荐指数
1
解决办法
374
查看次数