What are the names used in computer science for some of the following tree data types?
有时我会在Haskell中使用不同类型的树,但我不知道它们的名称,也不知道在哪里可以使用它们或类实例获取有关算法的更多信息,甚至不知道某些早已存在的代码或库。骇客。
示例:
标签在叶子或树枝上的二叉树:
1 2 3 4 5 | data BinTree1 a = Leaf | Branch {label :: a, leftChild :: BinTree1 a, rightChild :: BinTree1 a} data BinTree2 a = Leaf {label :: a} | Branch {leftChild :: BinTree2 a, rightChild :: BinTree2 a} |
类似地,每个子节点带有标签的树或所有子节点带有通用标签的树:
1 2 3 | data Tree1 a = Branch {label :: a, children :: [Tree1 a]} data Tree2 a = Branch {labelledChildren :: [(a, Tree2 a)]} |
有时我开始使用
此外,如果您可以张贴其他您认为有用的其他种类的树,请这样做。
总而言之:您可以告诉我的那些树的所有内容将非常有用! :)
谢谢。
编辑:
说明:这不是家庭作业。只是我通常最终会使用这些数据类型并创建实例(Functor,Monad等),也许,如果我重新命名它们,我会发现带有已实现内容和更多理论信息的库。
通常,当Hackage上的库名称为Tree时,它实现BinTree2或某种版本的非二进制树,仅在叶子上带有标签,因此在我看来,Tree2和BinTree2可能具有其他名称或标识符。
我还觉得可能存在某种双重性或同构性,或者一种将使用Tree1的代码转换为使用Tree2进行某些转换的代码的方法。有没有?可能只是印象。
我听到的名字:
-
BinTree1 是二叉树 -
BinTree2 不知道名称,但是您可以使用这样的树来表示无前缀的代码,例如霍夫曼编码 -
Tree1 是一棵玫瑰树 -
Tree2 与[Tree1] (Tree1 的林)是同等的,或者另一种查看方式是Tree1 ,没有根标签。
仅在叶子中具有标签(
因此,如果您有4个带有以下哈希码的值:
1 2 3 4 | ...000001 A ...000010 B ...000011 C ...000010 D |
...您可以将它们存储在二叉树中(隐式的patricia trie),如下所示:
1 2 3 4 5 6 7 | + <- Bit #1 (least significant bit) of hash code / \\ 0 = left, 1 = right / \\ [B, D] + <- Bit #2 / \\ / \\ [A] [C] |
我们看到,由于
这种哈希表的实现有点不好,因为插入某些元素时可能必须重新计算哈希,但是没关系。