2014-5-28任务完成情况
2014-05-28 19:39
148 查看
(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小时)
阅读完后,将里面的代码敲了一遍。
未完成
(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小时)
阅读完后,将里面的代码敲了一遍。
相关文章推荐
- 2014-6-24任务完成情况
- 2014-7-16任务完成情况
- 2014-6-4任务完成情况
- 2014-6-5任务完成情况
- 2014-6-6任务完成情况
- 与上级领导的交流(反馈任务完成情况) [ 光影人像 东海陈光剑 的博客 ]
- 第一次任务完成情况
- 2014-6-13任务完成情况
- 2014-6-25任务完成情况
- 2014-6-19任务完成情况
- 2014-6-26任务完成情况
- 2014-7-15任务完成情况
- 2014-5-31任务完成情况
- 2014-6-16任务完成情况
- 2014-6-12任务完成情况
- 2014-6-27任务完成情况
- 2014-7-18任务完成情况
- 与上级领导的交流(反馈任务完成情况)