练习期末考试题目,“数据结构”课程

时间:2012-05-15 13:35:17

标签: c++ data-structures

我正在为数据结构课程的练习决赛工作,我有几个问题,我希望得到帮助:

  1. void BST::traverse(Vertex *V)  // post order traversal recursively
    {   
      if (V != NULL) 
        {
          traverse(V->Left);        
          traverse(V->Right);       
          cout << V->elem << endl;     
        }
    }
    

    我需要将其更改为深度优先搜索。我相信我必须重新访问每个递归的根,但是很困惑,因为那时我永远不会离开根。也许是暂时的根?不确定!

  2. 对于我们的链表实现,我必须描述两次使用复制构造函数的情况。我知道它被调用函数调用。但是另一个原因呢?

  3. 为什么我们使用大O符号[例如O(n ^ 2)而不是说2n ^ 2 + 3n + 4)。我知道这样做会忽略常数,但我能给出的答案还有更多吗?

  4. 时间与空间的复杂性。对我来说最明显的是合并排序与快速排序,但如果测试要求更多,你能想到另一个吗?我们在课堂上经历了这么多,我无法相信我不能说出更多的名字。

2 个答案:

答案 0 :(得分:4)

  1. 如果只是添加搜索代码,它已经是深度优先搜索。

  2. BST 通过值传递给函数作为参数时,您已经有了这种情况。你复制一个对象的另一个时间是什么时候? (提示:一个也与功能有关)

  3. 因为当n很大时,2 n 将比等式中的任何其他东西大得多,所以你只需要留下常量和其他所有东西。 Big-O表示法绝对不是准确的,它只是让你知道当输入变得非常大时问题的解决方案如何扩展。当n变得足够大时,复杂性是如此巨大,以至于其他东西相形见绌,基本上是2 n

  4. 你必须对这个更具体。你在寻找两种交换空间速度的算法吗?

答案 1 :(得分:1)

3大O符号仅引用主导词。当n变大时,这是结果中最重要的部分。

4考虑冒泡排序 - 我曾经不喜欢它,因为它需要很长时间,但只需要一个空间再用一件物品。