2014-5-28任务完成情况

来源:互联网 发布:承兑汇票 知乎 编辑:程序博客网 时间:2024/06/05 16:05
(1)想办法生成core文件;
         未完成

(2)初步学会gdb调试core;
        未完成

(3)算法时间复杂度分析:为什么增量方法比整理方法建堆速度慢? (耗时40分钟)
        调整法建堆的时间复杂度:循环是从i = headsize/2 -> 1。于是,有1/4的元素向下执行一次调整过程,有1/8的向下执行了两次,1/16的,向下执行了3次,......,1/2^k+1的向下比较了k次,其中1/2^k <= 1, k 约等于log(n)。总体经过计算其复杂度应该是O(n)级别.

       插入法的时间复杂度:首先从第一个元素开始复制,然后第一层元素不需要调整;从第二层开始每插入一个元素都要进行一次调整,第二层需要调整一次;第三层需要调整2次;最后一层需要调整log(n)-1次,最后一层元素个数为n/2。总体计算复杂度为nlog(n)。

(4)算法细节分析:为什么同样是整理方法建堆,我的实现比你的慢?(耗时1.5小时)

       对算法进行改进,改进之一:改写求最小值的方法函数,使函数更加简练,尽量将大多数的可能情况放到if中判断,较少出现的放到else中,发现效果不明显。另外使用list[i], list[j] = list[j], list[i]这样的语法代替利用中间变量tmp进行三次交换,发现效率也没有多少提升。

       改进之二:将判断最小值的的函数与down函数整合到一起,减少了一个层次的函数调用,发现效率得到了明显的提升。应该是增加一个层次的调用,系统会在堆栈等方面产生了更多的开销所致。

      下面是原程序、改进一、改进二这3种方法测试的结果,图中分别用111、222、333表示:



(5)读c++ primer第一章;(耗时2.5小时)

        阅读完后,将里面的代码敲了一遍。



0 0
原创粉丝点击