小菜开始学习算法(返璞归真->程序=数据结构+算法)
2012-04-17 20:55
253 查看
算法
算法(algorithm)就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组作为输出。衡量算法效率的常用标准是速度,即一个算法得到最后所需要的时间。
算法分析即指对一个算法所需要的资源进行预测。
RAM模型包含了真实计算机中常见的指令:算术指令(加法,减法,乘法,除法以,取余,向下取整,向上取整指令),数据移动指令(装入,存储,复制指令)和控制指令(条件和非条件转移,子程序调用和返回指令)。其中每条指令所需的时间都为常量。
1.1. 插入算法
插入算法的核心是循环不变式。循环不变式的三个性质:
Ø 初始化;它在循环的第一轮迭代开始之前,应该是正确的。
Ø 保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下一次迭代开始前,它也应该保持正确。
Ø 终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。
首先假定第一个元素有序,那么第二个元素为KEY值,不论是从小到大,还是从大到小。
都是从有序序列的最后一个开始比较,逐个向前跟KEY值比较。
算法实现:
void Insert_sort( int *a)
{
for( int j = 1;j<=length(a);j++)
{
int key = a[j];
int i = j-1;
while( i>= 0 && a[i] > key) //有序元素的最后一个元素开始
{
a[i+1] = a[i];
i= i -1;
}
A[i+1] = key; //每插入一个元素保持有序
}
}
时间复杂度:理论值是::O(N)~O(N的平方) 实际值:c1n2+c2n+c3
空间复杂度:理论值是:O(1) 实际值:只需一个KEY所占的额外空间。
测试 :随机12000个数
Starttime 1.75s
Endtime 2s
using time0.25s
相关文章推荐
- 在delphi中建立程序的快捷方式--并将快捷方式放在开始->程序->的启动组中
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- 已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。 从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(最后结果向上取整)。
- Express学习之开始入门<1>
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<tomcat>(二十五)
- Express学习之开始入门<2>
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server>(二十一)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<javascript>(三十)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<jsp>(二十六)
- 2-2 开始学习<p>标签(2)
- 推荐引擎算法学习导论-(协同过滤、聚类、分类、模糊和精确k-means算法等)<转>
- <收藏> 我的算法学习之路
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<反射>(二十九)
- 开始学习Nodejs的API参考文档<2>
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<数据库连接配置>(二十八)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(中)>(三十九)
- <算法导论>学习笔记(3)--递归树求递归算法时间复杂度
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Hibernate_配置详解>(三十六)