我有一些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
然后:
A没有任何相等的路径(左侧没有顶点).B有一对相等.路径B-A等于路径B-E (3 == 3).C有一对相等.路径B-C等于路径C-D (1 == 1).D有一对相等.路径C-D等于路径D-E (1 == 1).E没有任何相等的路径(右侧没有顶点).我实现了简单的算法,它适用于O(n^2).但对我来说这太慢了.
例如,我有一些数据类型.让它成为二叉树:
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)
但它不起作用.我怎样才能解决这个问题?
有一个经典的背包问题。我对这个问题的版本有点不同。
给定一组物品,每个物品都有一个质量,确定包装物品的组合数量,以便总重量小于或等于给定的限制。
例如,有 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)
有没有办法计算组合数量而不用蛮力?
我有两个功能:
fun1 :: Int -> [Int]
fun2 :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)
fun2在帮助下接受Int list并适用fun1于此列表的每个元素map.但fun1回归[Int].所以,我有类型冲突.如何解决我的问题?
我有一些自然数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)
有没有办法加速我的代码,或者我应该使用更好的算法?
例如,我想开发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) 我想以([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)
有更正确的解决方案吗?
我有简单的一行功能:
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) 我尝试按列表中的索引实现自己的安全搜索元素.我想,我的功能必须有这个签名:
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中.为什么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).我的代码只使用空格.
我上了计算机图形学课程。所以我想学习,如何渲染 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) haskell ×8
algorithm ×2
fold ×2
brute-force ×1
combinations ×1
equation ×1
function ×1
graph ×1
graphics ×1
javascript ×1
linked-list ×1
rendering ×1
sum ×1
types ×1
unfold ×1
webgl ×1