我正在为数据结构课程的练习决赛工作,我有几个问题,我希望得到帮助:
void BST::traverse(Vertex *V) // post order traversal recursively
{
if (V != NULL)
{
traverse(V->Left);
traverse(V->Right);
cout << V->elem << endl;
}
}
我需要将其更改为深度优先搜索。我相信我必须重新访问每个递归的根,但是很困惑,因为那时我永远不会离开根。也许是暂时的根?不确定!
对于我们的链表实现,我必须描述两次使用复制构造函数的情况。我知道它被调用函数调用。但是另一个原因呢?
为什么我们使用大O符号[例如O(n ^ 2)而不是说2n ^ 2 + 3n + 4)。我知道这样做会忽略常数,但我能给出的答案还有更多吗?
时间与空间的复杂性。对我来说最明显的是合并排序与快速排序,但如果测试要求更多,你能想到另一个吗?我们在课堂上经历了这么多,我无法相信我不能说出更多的名字。
答案 0 :(得分:4)
如果只是添加搜索代码,它已经是深度优先搜索。
当BST
通过值传递给函数作为参数时,您已经有了这种情况。你复制一个对象的另一个时间是什么时候? (提示:一个也与功能有关)
因为当n
很大时,2 n 将比等式中的任何其他东西大得多,所以你只需要留下常量和其他所有东西。 Big-O表示法绝对不是准确的,它只是让你知道当输入变得非常大时问题的解决方案如何扩展。当n
变得足够大时,复杂性是如此巨大,以至于其他东西相形见绌,基本上是2 n 。
你必须对这个更具体。你在寻找两种交换空间速度的算法吗?
答案 1 :(得分:1)
3大O符号仅引用主导词。当n变大时,这是结果中最重要的部分。
4考虑冒泡排序 - 我曾经不喜欢它,因为它需要很长时间,但只需要一个空间再用一件物品。