我在Haskell中实现了二叉树数据结构。Haskell二叉树快速实现
我的代码:
module Data.BTree where
data Tree a = EmptyTree
| Node a (Tree a) (Tree a)
deriving (Eq, Ord, Read, Show)
emptyTree :: a -> Tree a
emptyTree a = Node a EmptyTree EmptyTree
treeInsert :: (Ord a) => a -> Tree a -> Tree a
treeInsert x EmptyTree = emptyTree x
treeInsert x (Node a left right)
| x == a = (Node x left right)
| x < a = (Node a (treeInsert x left) right)
| x > a = (Node a left (treeInsert x right))
fillTree :: Int -> Tree Int -> Tree Int
fillTree 10000 tree = tree
fillTree x tree = let a = treeInsert x tree
in fillTree (x + 1) a
此代码非常缓慢。我运行:
fillTree 1 EmptyTree
我得到:50.24秒
我试图实现在C语言的代码,我的这个测试结果:0m0.438s
为什么这么大的差别? Haskell代码依赖如此之慢,或者我在haskell中的二叉树不好?我想问问haskell guru,也许我可以让我的二叉树实现更有效?
谢谢。
我不知道,你如何测量时间,但在我的电脑上,你的功能只需要3.3秒。你有没有忘记用'-O2'编译?在我的机器上,这花了一半的时间,尽管大部分时间都花在渲染树上。 – fuz