南斗工作组

很多东西不记下来,总归是回忘记的

[算法每日一学]-算法基础入门--2008.08.06

| |
10:18 , Model.King
/*************************************************************
** 作者:P.Qingliang (P.Qingliang at msn.com)
** 创建时间: 2008-8-5
** 声明:笔记不是教程,这是我系统学习算法的记录而已
**
*************************************************************/

算法的定义
算法(Algorithm)是指在有限步骤内解决问题的一组明确定义的规则,通俗的说,就是计算机解决问题的过程。

算法的特点
  有穷性、确切性、输入、输出、可行性

  即使是错误的算法,当其错误率在可接受范围内时也就是认为是“正确”的算法。算法的描述一般是伪代码(类c,类c++,类pascal等等)来进行。

分析算法
  算法分析的重要内容:算法的复杂性,包括空间复杂性和时间复杂性,一般只讨论时间复杂性。所谓时间复杂性,简单的说就是指在一定的输入规模下算法执行的时间效率。通常我们分析算法时假定指令是一条接着一条的执行的,而没有并发操作,也就是所谓的RAM模型。

  相关术语:输入规模,运行时间,最坏情况

算法从排序开始
  插入排序c语言实现:


运行结果

********* Array print begin *********
array[0] = 22
array[1] = 73
array[2] = 54
array[3] = 92
array[4] = 14
array[5] = 32
array[6] = 65
array[7] = 98
array[8] = 55
array[9] = 43
********* Array print end *********
********* Array print begin *********
array[0] = 14
array[1] = 22
array[2] = 32
array[3] = 43
array[4] = 54
array[5] = 55
array[6] = 65
array[7] = 73
array[8] = 92
array[9] = 98
********* Array print end *********

Process returned 0 (0x0)   execution time : 0.031 s
Press any key to continue.

分析算法:

这里我们假设计算机执行每一步基本运算代码的时间都是个常量,在这里也就是c1, c2, c3……c8都是常量。
上面函数运行的时间总和是T = c1+ nc2+(n-1)c3+(n-1)c4+f(j, n)c5 + (f(j, n)-1)c6 + (f(j, n)-1)c7+(n-1)c8。
其中f(j, n) 是关于j,n的函数,其值同数组的排序程度有关,通常我们都假设为最坏情况,这里的最坏情况为初始数组按从大到小排序,这样f(j, n) = 点击在新窗口中浏览此图片
最终我们得出 T = an*n + bn + c, a,b,c为常数。
利用高中的求极限的知识,我们得出T = f(n*n),这样我们就得出了插入排序算法的时间复杂性公式。

算法设计
增量法,分治法等等

排序算法分治版


最后编辑: Model.King 编辑于August 7, 2008 18:08
类别:问题求解与算法 | | 0 条评论, 21 次阅读
网友评论(0):
发表评论:

昵称: 
电邮:
网址: