一、算法的定义

“算法”是一系列解决问题的清晰指令。也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出。如图:

可以认为算法是问题的程序化解决方案。这些解决方案就是上面说的清晰精确指令。那么算法的一系列解决问题的步骤可以总结为:

    算法的设计和分析过程

算法不仅要有正确性,还要有简单性,也就是时间效率和空间效率的的体现。我们当然希望一个算法运行速度快而且占用较少的存储空间。当我们对算法写代码的时候,可以先写伪代码,伪代码是一个很好的解决方案,它可以清晰地表达出解决问题的步骤。当我们真正用写代码的时候,就可以根据伪代码来作为参考,而不是语言描述。

一个算法应该具有以下七个重要的特征:

  算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。   1、有穷性(Finiteness)   算法的有穷性是指算法必须能在执行有限个步骤之后终止;   2、确切性(Definiteness)   算法的每一步骤必须有确切的定义;   3、输入项(Input)   一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;   4、输出项(Output)   一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;   5、可行性(Effectiveness)   算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);   6、 高效性(High efficiency)   执行速度快,占用资源少。

   二、算法的基本要素

      数据对象的运算和操作:一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:

  1,算术运算:加减乘除等运算   +   -   *   /   2,逻辑运算:或、与、非等运算   ||   &&   !    3,关系运算:大于、小于、等于、不等于等运算   >   <   ==  !=   4,数据传输:输入、输出、赋值等运算    (根据所用编程语言来确定)    算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

1、判断 if

2、循环 for, while

    三算法的评价
    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。   1.时间复杂度
  算法的时间复杂度是指执行算法所需要的时间。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
  T(n)=Ο(f(n))
  因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。   2.空间复杂度
  算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。   3.正确性
  算法的正确性是评价一个算法优劣的最重要的标准。   4.可读性
  算法的可读性是指一个算法可供人们阅读的容易程度。   5.健壮性
  健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也成为容错性。
    四、算法的基本方法
        1.递推发:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.
        2.递归法:程序调用自身的编程技巧称为递归,递归就是在过程或函数里调用自身,在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
        3.穷举法:逐一遍历。
        4.贪心算法:一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯
        5.分治法:分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
        6.分治法:是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
        7.迭代法:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题
        8.分枝定界限法:分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索
        

算法初步--什么是算法相关推荐

  1. c语言dfs算法初步讲解,[转载]算法初步

    此类的题目都是刚学C语言不久刚接触ACM的时候做的..完全没算法..最多有点小技巧.. 题型很杂.. 评述的话主要是自己以后找起题来方便..大牛们忽略就好.. 1000纯属适应题 1003做的时候花了 ...

  2. python socket发送数组_利用pyprocessing初步探索数组排序算法可视化

    [经过两次更新,功能基本完成]最终效果请直接下拉到最后一个视频观看 背景说明 这篇文章旨在初步探索利用pyprocessing的强大的可视化功能,以及pyprocessing和Ipython之间的本地 ...

  3. 【原创】tarjan算法初步(强连通子图缩点)

    [原创]tarjan算法初步(强连通子图缩点) tarjan算法的思路不是一般的绕!!(不过既然是求强连通子图这样的回路也就可以稍微原谅了..) 但是研究tarjan之前总得知道强连通分量是什么吧.. ...

  4. java五子棋的重要算法讲解_[Java五子棋小游戏-Ai算法精讲以及实现]-02--高级算法初步...

    高级算法初步 走对自己利益最大的路 它有难了不要慌,抛弃它,以这盘棋局的胜利为他报仇 碰撞检测与跨步算法原理图 反向计算权重 每次计算完权重,都要进行一次反向权重计算 权重值 : 两侧的权重值相加 权 ...

  5. 初步理解pagerank算法

    初步理解pagerank算法 第一次写不是课程要求的博客,可能有不严谨的地方,如果有写错的希望能在评论区指出. 算法思想 pagerank算法用于网页排序,根据给网页的重要程度给各个网页打分,根据分数 ...

  6. 【PAT】第四章 算法初步

    第四章 算法初步 目录 第四章 算法初步 4.1 排序 4.1.1 选择排序 4.1.2 插入排序 4.1.3 排序题与sort函数的应用 strcmp 计算排名 4.2 散列 4.2.1 散列 1. ...

  7. 算法(一) 算法初步

    算法(一) 算法初步 1. 十进制转为二进制(除二取余法) 简单的求值方法: 给出一个数字x,求x十进制各位相加的和 (将它转化为二进制呢?) temp=1; while(x>0){ ans+= ...

  8. 有关七巧板复原的算法初步探讨

    按:家里面有个七巧板,自从拿出来之后,就再也没能复原,尝试了好几次,都失败. 后来想想能不能用程序试试呢.初步思路 1.七巧板表示法 由于积木不是简单矩形的组合,因此它的表示方法比较麻烦.表示不清楚, ...

  9. 动态规划算法初步(6)——0/1 背包

    动态规划算法初步(6) 例题五:0/1 背包(背包型) 题目: 一个旅行者有一个最多能装m公斤物品的背包,现在有n件物品,它们的重量分别是w1,w2,-,wn,它们的价值分别为c1,c2,-,cn.若 ...

最新文章

  1. 使用DLL封装窗体和业务类
  2. nyist -- 组队赛(一)
  3. Leecode22. 括号生成——Leecode大厂热题100道系列
  4. 将JQGrid与Spring MVC和Gson集成
  5. React开发(134):ant design学习指南之form中getFieldValue
  6. 近期海内外 AI 领域招聘、招生信息汇总
  7. 关于Android RenderScript 的详细说明和一些实用文档
  8. Facebook斥资5亿美元 建设全风电数据中心
  9. 电阻式传感器原理与应用
  10. pdf服务器签章系统,PDF离线签章工具使用方法
  11. python基础总结02
  12. 小闹乎谈新手必备的撸猫手册
  13. 日期时间选择器bootstrap(手机适应)
  14. 移动端字体显示大小和css设置大小的不一致解决方案
  15. 前端技术周刊 2018-12-24:移动无限加载
  16. IPTV与DTV:竞争还是共存?
  17. 量化对冲策略在内的实践程
  18. QT西游回合制源码+java后台管理系统
  19. 如何用数字化构建企业的“韧性”?
  20. 基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真

热门文章

  1. 像素及其表示,灰度图
  2. list过滤重复数据java_java中List去除重复数据的五种方式
  3. Google Android 原生Rom 下载地址及刷机教程--Factory Images for Nexus and Pixel Devices
  4. 打开运行PS、AI等软件时卡在启动窗口的解决办法
  5. Idrac卡偶尔不可用处理办法
  6. 你知道哪些出身最奇特的程序员?
  7. 岭南师范学院计算机考试考场,广东专插本考场安排在哪?附:2018年考场详细安排表~...
  8. Delphi 中 FireDAC 数据库连接(多线程)
  9. linux系统中XLib在什么位置,什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是lo...
  10. Android 获取设备唯一标识