【问题标题】:Standard Deviation of Linked Binary Search Tree链接二叉搜索树的标准差
【发布时间】:2021-07-23 09:14:29
【问题描述】:

我目前正在为我的数据结构课程做一个项目,该项目涉及使用双向链表类型格式构建的二叉搜索树(其中每个节点都有一个左、右和父指针)。管理树的类也有一个根指针和一个当前指针(如游标)。

我需要构建的函数之一是计算整个树的标准差。不幸的是,我被困在如何在不使用标准库容器的情况下使用此功能(在课程中强烈建议不要这样做)。我了解如何获得整棵树的总和,但是能够单独访问每个数字以计算标准差让我感到困惑(因为我可以将树存储为数组并访问内容按顺序排列。

如果这是一个基本问题或者我遗漏了一些明显的方法,请原谅我。我倾向于与数据结构概念作斗争,尤其是在递归方面。我不是要求某人编写函数,但至少可以为我指明正确的方向。谢谢!

编辑:谢谢 trincot 的帮助,我想的方法不对,但你的解释有帮助!

【问题讨论】:

  • 您用于标准差的公式是什么?关键是大多数统计书籍中提供的公式并不友好,因为您必须对数据进行多次传递。 See this 替代方案。
  • 我了解如何获得整个树的总和——然后​​在一次通过中获得方差(我发布的链接描述的)没有什么不同。一旦有了方差,您只需取该总数的平方根即可得到标准偏差。这不是真正的 C++ 问题,而是“选择适当的公式”问题。

标签: c++ math linked-list binary-search-tree standard-deviation


【解决方案1】:

我明白如何得到整棵树的总和

所以您知道如何检查每个节点的值并执行以下操作:

sum += current_node->value;

然后也跟踪计数(除非您已经将计数作为列表属性跟踪):

sum += current_node->value;
node_count++;

访问完所有节点后,可以计算均值:

mean = sum / node_count;

然后第二次遍历树的所有节点,计算偏差的平方和,从零开始:

sum_sq_dev += (current_node->value - mean) * (current_node->value - mean);

在您访问所有节点以累积该平方偏差的总和后,计算它的方差和标准偏差:

variance = sum_sq_dev / node_count;
std_dev = sqrt(variance);

参见维基百科sample variance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2015-10-19
    • 2010-10-26
    相关资源
    最近更新 更多