【问题标题】:How to break down 2-3-4 tree in OCAML如何在 OCAML 中分解 2-3-4 树
【发布时间】:2021-07-18 04:03:02
【问题描述】:

我想将 2-3-4 树分解为小节点。

这些是我正在使用的类型:

        type ele = int 
        type color = Red|Black
        type ab = Vide | Node of ( ele * color * ab * ab *ab) 
        type ab234 = Vide
        |Node_1 of (ele * ab234* ab234)
        |Node_2 of(ele * ele * ab234 *ab234 *ab234) ``
        |Node_3 of(ele * ele * ele *ab234 * ab234* ab234 *ab234)

我的映射基于此:

我需要帮助来完成我的转型。我试过这个功能,但它似乎不起作用,它确实分解了根,但它不会继续到分支:

    let rec eclat = function
    | Vide -> Vide 
    | Node_3(r,x,y,ag,mg,md,ad) -> eclat ( Node_1(x,(Node_1(r,ag,mg)),Node_1(y,md,ad)))
    | Node_2(r,x,ag,ml,ad) -> eclat(Node_1(r,(Node_1(x,ag,ml)),ad))
    | _ -> failwith("zebi") ;;

【问题讨论】:

  • StackOverflow 主要用于帮助解决您在使用某些代码时遇到的特定问题。否则就像你在要求别人为你写作业一样。因此,您应该首先编写一些代码来进行转换,然后在此处询问有关您的代码的问题。关于您目前所拥有的一项观察结果是,您有两种名为ab 的类型。其中第二个将隐藏第一个,因此您不能同时使用两者。这两种树类型需要有不同的名称。
  • 对不起,我没有注意到我的函数没有出现,我编辑了,所以现在它已经修复了
  • “它似乎不起作用”是什么意思?在哪种情况下不起作用?你怎么知道?除了我们你猜吗?
  • 你能举一个输入和预期输出的例子吗?
  • 我在图片 2-3-4 树中做了双色

标签: ocaml red-black-tree 2-3-4-tree


【解决方案1】:

如果我输入你现在拥有的eclat 函数,我会得到:

提示:如果这是一个递归定义,您应该在第 1 行添加 'rec' 关键字

所以这是一个问题。

我还注意到您将ab 更改为ab234,但您没有更改类型内部的外观。所以ab234类型的内容都被定义为ab类型。这似乎不正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 2012-02-04
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多