算法学习(1)——算法绪论

来源:互联网 发布:无限透支黑卡 知乎 编辑:程序博客网 时间:2024/05/16 12:10

初识算法还是在大一学习C语言时,老师在讲选择排序法和冒泡排序法听说,起初觉得很高大上;后来有了一定了解之后知道就是一种解决问题的方法,发觉算法也不过如此;接着由于机缘巧合,对计算机开始逐步深入了解,发现算法真是门大学问,简直就是计算机科学的核心竞争力。我想,随着对计算机更加深入的学习,算法还是会刷新我对它的认识。

本文主要记录了算法学习过程中的一些最最基本的知识和概念。

1 算法的定义

解决问题W的一个算法A,是对一种计算过程的严格描述。对W的任何一个实例w,实施算法A描述的计算过程,就能得到w的一个解。例如:一个求矩阵行列式的算法应当能应用于任何矩阵并计算得到其行列式的值。

2 算法的性质

算法通常有以下几个性质:

  • 有穷性:算法的描述由有限条操作指令或者语句构成;
  • 可行性:算法中每一条指令或语句严格且简单明确,描述的过程可以完全机械的进行;
  • 确定性:对于特定问题的给定输出,总是能通过算法发生确定的动作序列,输出唯一确定的解(根据是否满足确定性,可分为确定性算法和非确定性算法);
  • 终止性:对于问题的任何实例,算法产生的动作序列是有穷的;
  • 输入/输出:有明确定义的输入和输出。

3 算法的描述

算法严格描述了一种计算过程,但是并没有限制使用哪一种描述方式。算法主要是用于人与人之间的交流,因此只需要保证易读易、理解并且保证严格性,具体使用什么样的描述形式并不重要。常见的描述形式有:

  • 采用自然语言描述:这种方法易于理解,但是略嫌啰嗦且易出现歧义;
  • 采用自然语言和公式描述:是对前一种描述方式的改进,主要是为了简洁和避免歧义;
  • 采用眸中严格定义的形式化记法形式描述;
  • 使用类似某种计算机编程语言,其中夹杂部分公式;
  • 使用伪代码。

4 算法设计模式

算法设计模式是人们对算法设计的经验的总结,不是规定,也不是教条。常见的算法设计模式有:

  • 枚举法:枚举所有可能性,充分利用计算机的速度优势,仅适用于简单问题;
  • 贪心法:在算法的每个子部分都求得该部分的最优解,然后求下一子部分。这种方法在求解复杂问题时往往无法求得整体最优解;
  • 分治法:将复杂问题分解为相对简单的子问题,分别求解,最后通过组合起子问题的解的方式得到原问题的解;
  • 回溯法(搜索法):对于复杂而没有清晰思路的问题,可以采用试探的方法,根据实际情况选择一种可能的方式;
  • 动态规划法:计算过程中根据之前步骤积累的信息动态选择一致的最好求解路径;
  • 分支限界法:搜索法的一种改良,在搜索过程中可以通过某些信息排除某些路径,从而缩小搜索范围。

上面这些模式是经验总结,可以组合使用。并不存在万能的算法设计模式。

原创粉丝点击