程序设计与基础算法

程序 = 算法+数据结构

算法定义:

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

 算法的五个特征:

  1. 有穷性(Finiteness)算法必须在执行有限个步骤之后终止
  2. 确切性   (Definiteness) 每一步必须有确切的定义
  3. 输入项  (Input)一个算法有0个或多个输入,以刻画运算对象的初始情况
  4. 输出项 (Output) 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
  5. 可行性 (Effectiveness) 每个计算步都可以在有限时间内完成

数据对象的运算和操作

  • 算术运算:加减乘除等运算
  • 逻辑运算:或、且、非等运算
  • 关系运算:大于、小于、等于、不等于等运算
  • 数据传输:输入、输出、赋值等运算

算法的控制结构 :与各个操作之间的执行顺序有关

常用的算法 

  • 递推法:把一个复杂的庞大的计算过程转化为简单过程的多次重复
  • 递归法:把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
  • 穷举法:对于要解决的问题,列举出它的所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解
  • 贪心算法:是一种改进了的分级处理方法,采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解
  • 分治法:把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
  • 动态规划法:将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。
  • 迭代法:是一种不断用变量的旧值递推新值的过程,迭代法又分为精确迭代和近似迭代
  • 分支界限法:对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。最终得出最优解
  • 回溯法:一种选优搜索法,按选优条件向前搜索,以达到目标

算法的描述方式:

  • 搜索自然语言
  • 结构化流程图
  • 伪代码
  • PAD图

算法的分类:

  • 基本算法、
  • 数据结构的算法、
  • 数论与代数算法
  • 计算几何的算法、
  • 图论的算法、
  • 动态规划以及
  • 数值分析、
  • 加密算法、
  • 排序算法、
  • 检索算法、
  • 随机化算法、
  • 并行算法,
  • 厄米变形模型,
  • 随机森林算法。

未完待续。。。。。。

你可能感兴趣的:(开发,C/OC基础)