小编Dav*_*vid的帖子

如何在退化树中找到所有等于路径的路径,这些路径从特定的顶点开始?

我有一些degenerate tree(它看起来像数组或双链表).例如,就是这棵树:

在此输入图像描述

每个边缘都有一些重量.我想找到所有相等的路径,它们从每个顶点开始.

换句话说,我想得到所有元组(v1,v,v2),其中v1和v2是任意的祖先和后代,这样c(v1, v) = c(v, v2).

让边具有以下权重(这只是示例):

a-b = 3

b-c = 1

c-d = 1

d-e = 1

然后:

  1. 顶点A没有任何相等的路径(左侧没有顶点).
  2. 顶点B有一对相等.路径B-A等于路径B-E (3 == 3).
  3. 顶点C有一对相等.路径B-C等于路径C-D (1 == 1).
  4. 顶点D有一对相等.路径C-D等于路径D-E (1 == 1).
  5. 顶点E没有任何相等的路径(右侧没有顶点).

我实现了简单的算法,它适用于O(n^2).但对我来说这太慢了.

algorithm sum graph doubly-linked-list

9
推荐指数
1
解决办法
239
查看次数

在Haskell中实现可折叠

例如,我有一些数据类型.让它成为二叉树:

data Tree a = Leaf a | Branch (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)

例如,我实现了树的遍历:

treeFoldt :: Tree t -> [t]
treeFoldt = foldt1 (:) []
Run Code Online (Sandbox Code Playgroud)

它的效果非常好.但我想实现Foldable界面.

我想,我应该这样写:

instance Foldable Tree where
  foldr = treeFoldt
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我怎样才能解决这个问题?

haskell tree-traversal

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

背包任务中所有组合的数量

有一个经典的背包问题。我对这个问题的版本有点不同。

给定一组物品,每个物品都有一个质量,确定包装物品的组合数量,以便总重量小于或等于给定的限制。

例如,有 5 个质量为: 的项目1, 1, 3, 4, 5。有一个错误limit = 7。有以下组合:

1 + 3
1 + 4
1 + 5
1 + 1 + 3
1 + 1 + 4
1 + 1 + 5
3
3 + 4
4
5
Run Code Online (Sandbox Code Playgroud)

有没有办法计算组合数量而不用蛮力?

algorithm combinations dynamic-programming

5
推荐指数
1
解决办法
3824
查看次数

如何在map函数中连接列表 - Haskell?

我有两个功能:

fun1 :: Int -> [Int]
fun2 :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)

fun2在帮助下接受Int list并适用fun1于此列表的每个元素map.但fun1回归[Int].所以,我有类型冲突.如何解决我的问题?

haskell function

3
推荐指数
1
解决办法
976
查看次数

求解方程a*b = c,其中a,b和c是自然数

我有一些自然数c.我想找到所有对自然数a and b,其中a < b,如a * b = c.

我有一个解决方案:

solve c = do solveHelper [1..c] c where
                   solveHelper xs c = do
                       x <- xs
                       (division, modulo ) <- return (c `divMod` x)
                       True <- return (modulo  == 0)
                       True <- return (x <= division)
                       return (x, division)
Run Code Online (Sandbox Code Playgroud)

例:

*Main> solve 10
[(1,10),(2,5)]
Run Code Online (Sandbox Code Playgroud)

有没有办法加速我的代码,或者我应该使用更好的算法?

haskell equation brute-force

2
推荐指数
1
解决办法
314
查看次数

如何在foldl函数Haskell中记录操作?

例如,我想开发sum函数,它将显示中期结果.

我的基本功能是:

ownPlus start list = foldr (+) start list
Run Code Online (Sandbox Code Playgroud)

我想在Writer Monad里面添加foldl.所以我的功能原型是:

sumWithLogging :: (Show a, Num a) => a -> [a] -> Writer String a
sumWithLogging start list = foldr ((+) do tell ["msg"]) start list
Run Code Online (Sandbox Code Playgroud)

我写这个函数有问题.但我希望我的结果看起来像这样:

*Main> runWriter $ sumWithLogging 0 [1..2]
(3,"(1+(2+0))")
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
218
查看次数

什么是Haskell生成符号列表从Start字符到Finish字符的方法?

我想以([a, b, ..., z])相反的顺序生成所有英文字母字符.我该怎么做?

我的解决方案是:

returnPrev c = chr (ord c - 1)

generateList t = unfoldr (\b -> if b == (returnPrev (fst t)) then Nothing else Just (b, returnPrev b)) (snd t)

*Main> generateList ('a', 'z')
"zyxwvutsrqponmlkjihgfedcba"
Run Code Online (Sandbox Code Playgroud)

有更正确的解决方案吗?

haskell linked-list

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

很奇怪无法匹配类型错误

我有简单的一行功能:

revRange :: (Char,Char) -> [Char]
revRange t = unfoldr (\b -> if b == (pred (fst t)) then Nothing else Just (b, pred b)) (snd t)
Run Code Online (Sandbox Code Playgroud)

效果很好:

*Main Data.List> revRange ('a', 'f')
"fedcba"
Run Code Online (Sandbox Code Playgroud)

然后我想提取展开lambda作为唯一函数:

revRange :: (Char,Char) -> [Char]
revRange t = unfoldr fun t
fun t = (\b -> if b == (pred (fst t)) then Nothing else Just (b, pred b)) (snd t)
Run Code Online (Sandbox Code Playgroud)

现在,我有一个奇怪的错误:

Couldn't match type `Char' with `(Char, Char)'
Expected type: (Char, Char) -> Maybe …
Run Code Online (Sandbox Code Playgroud)

haskell types fold unfold

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

使用foldr查找列表的第K个元素

我尝试按列表中的索引实现自己的安全搜索元素.我想,我的功能必须有这个签名:

safe_search :: [a] -> Int -> Maybe a
safe_search xs n = foldr iteration init_val xs n
iteration = undefined
init_val = undefined
Run Code Online (Sandbox Code Playgroud)

我有迭代实现的问题.我想,它必须看起来像这样:

safe_search :: [a] -> Int -> Maybe a
safe_search xs n = foldr iteration init_val xs n
    where
    iteration :: a -> (Int -> [a]) -> Int -> a
    iteration x g 0 = []
    iteration x g n = x (n - 1)
    init_val :: Int -> a
    init_val = const 0
Run Code Online (Sandbox Code Playgroud)

但它有很多错误.我对haskell的直觉是错误的.

haskell fold

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

解析错误(可能是错误的缩进或括号不匹配) - Haskell

这很愚蠢,但我甚至无法解决空格和制表符的问题.有时我认为问题不在我身上,而是在Haskell中.为什么Python没有相同的问题?

我的代码是:

lookups :: (Eq a) => a -> [(a,b)] -> [b]
lookups x ys = do y <- ys
                  if fst y == x then return (snd y)
Run Code Online (Sandbox Code Playgroud)

我有一个错误:parse error (possibly incorrect indentation or mismatched brackets).我的代码只使用空格.

haskell

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

如何在没有three.js的情况下渲染OBJ模型 - WebGL

我上了计算机图形学课程。所以我想学习,如何渲染 OBJ 模型。当然,我不能使用这样的three.js库。

让我们考虑来自webgl-obj-loader 的模型。

            #   OBJ File Generated by Blender
            #
            ####
            o my_cube.obj
            v 1 1 1
            v -1 1 1
            v -1 -1 1
            v 1 -1 1
            v 1 1 -1
            v -1 1 -1
            v -1 -1 -1
            v 1 -1 -1
            vn 0 0 1
            vn 1 0 0
            vn -1 0 0
            vn 0 0 -1
            vn 0 1 0
            vn 0 -1 0
            f 1//1 2//1 3//1
            f …
Run Code Online (Sandbox Code Playgroud)

javascript graphics rendering webgl

0
推荐指数
1
解决办法
4680
查看次数