算法学习笔记(1)
来源:互联网 发布:哈尔滨编程培训学校 编辑:程序博客网 时间:2024/05/01 23:38
- 作者:Rockics(http://blog.csdn.net/Rockics )
- 转载请注明出处
一些学习前的准备:
首先,在windows底下编写代码,我推荐使用RJ TextEd,很不错的编辑器。Mark一下。
没有安装VC,它太庞大了,试了试cygwin,安装实在太慢,放弃了。
转而使用MinGW,以前使用过,印象很不错。简单记录一下过程:
1:下载http://www.mingw.org/
2:安装
3:相关配置。建立一个bat文件,如下:(参考 k1988的程序生活 之 MinGW介绍与使用):
有了环境,开始吧。
算法研究是一门关注性能的课程。如果站在工程学的角度编写软件,相对于性能来说,还有什么比之重要的?
正确性?简单?可维护性?健壮性?用户友好性?
代价,编码时间等等(性能的一方面)?函数性?模块化?安全性,很重要。
可扩展性?
如此多的特性比性能重要,为什么我们还要研究性能?
没有什么比等待更令人沮丧了,性能是很多特性的保证。
有些事情不过不考虑性能,他将十分耗时,而变得不再实用。
可以使用性能为其他特性买单。比如说,使用java编程而不使用c编程,我们宁愿损失性能,因为java有面向对象的所用特性,异常机制等等,对工程来说很重要。
我们喜欢快哈。极品飞车?滑雪?速度的魅力无限。
插入排序之实例:
插入排序,仅仅考虑关键字,不考虑卫星数据:
基本思想:想象扑克牌,手上的牌已经是排好的,摸一张新牌,放到手上,并且排好顺序:做好通常是:
找到新牌该在的位置,插入,在其后面的牌依次往后走一下。完成一趟排序。
运行时间依赖:
1.输入情况,比如有序程度
2.输入规模
对于性能,我们希望知道运行时间上界upper bounds,对用户保证
算法复杂度分析类型:
1.最坏情况(WORST-CASE)
T(n) = max time on any input of size n
2.平均情况(AVERAGE-CASE)
T(n) = expected time over all inputs of size n
这里使用到概率上知识,需要做一些假设,比如说,输入服从什么样的分布,最简单的就是均匀分布。但是也存在其他分布的可能性。
3.最好情况(BEST-CASE)-----伪造的(bogus)
欺骗嫌疑
插入排序的的最坏情况θ(n方),算术级数1+2+3+···+n;这里首先初略的使用了θ符号。
运行的计算机情况;(相对速度,绝对速度)
对于讨论算法的课程来说,尽量不要涉及到硬件的讨论。
要忽略掉和机器相关的一些参数;
(重要思想)研究运行时T(n)随着n趋近与无穷大时候的增长情况。
渐近线符号:
θ:忽略低阶,忽略常系数。
O,Ω,θ。符号不好打,略过。这些符号,大多是描述符号,而不是操作符号(比如说:莱布尼兹的微积分符号)。
从工程学的角度来考虑问题,我们很多时候不得不处理
输入规模很大额情况,所以忽略低阶项还有常系数是合理的。
合并排序,实践中,合并排序比插入排序更优:
思想:如果规模n=1,结束排序,常数时间θ(1);
递归排序前半部分还有后半部分;
合并这两部分θ(n),线性;
合并排序的时间复杂度分析:θ(nlgn)递归式子。
递归树方法,把一层一层的时间全部相加起来,就得到
运行时间,不是仅仅计算叶子节点的时间哈,切记。
编程心得:
变量先定义再使用;
应该有返回值;
小心地使用宏定义,上代码说明问题。
使用GCC编译会报错:
exam.c: In function 'main':
exam.c:11: error: expected expression before 'else'
有心的读者可以验证一下,宏要仔细使用。
- 算法学习笔记(1)
- 算法笔记学习1
- 算法笔记 ---- 学习笔记 1
- 算法导论学习笔记-1
- 《算法引论》学习笔记(1)
- 算法学习笔记--递归(1)
- [算法学习笔记]算法基础知识
- 【算法学习笔记】-排序算法
- 【算法学习笔记】贪心算法
- 算法学习笔记--狄克斯特拉算法
- 算法学习笔记--贪婪算法
- 数据结构学习笔记(1)算法分析
- 算法导论学习笔记--1--分治排序
- 算法导论学习笔记(1)
- 学习笔记1:c++实现LRU算法
- 数据结构学习笔记1(算法分析)
- 算法导论学习笔记-1-4章
- 聚类算法学习笔记(1)
- [转载][java]Java Map 集合类简介
- 经典汇编语言教程:第8章 输入输出和中断
- C语言指针 -- 面试题
- SSH 生成execl
- Pipeline adder
- 算法学习笔记(1)
- MFC绘图基础
- 光速是什么?
- [三思笔记]-手把手教你用vmware安装oracle10g RAC
- Linux中sqlplus退格显示“^H” 的解决
- 建立软连接
- 异常处理与MiniDump详解【转帖】
- Amazon云计算服务体系EC2/S3/MapReduce介绍
- 复空间