一、算法的定义

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

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

    算法的设计和分析过程

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

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

  算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。   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. VC++ 6.0下OpengGL配置以及glut配置
  2. 铅笔芯为什么点不着?
  3. [改善Java代码]生成子列表后不要再操作原列表
  4. Python基础语法:数据类型、进制转换、转义字符、字符编码、整数与浮点数运算规则、布尔型运算规则
  5. Android学习笔记
  6. ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' 解决Mysql错误
  7. C和指针之函数之递归实现厄密多项式
  8. 微信企业号开发[二]——获取用户信息
  9. Vue-Router + Vuex 实现单页面应用
  10. shell批量修改后缀_bash批量修改文件名称的方法小结(增加,去除,修改后缀)
  11. python 时间_Python-基础-时间日期处理小结
  12. java中断异常_Java中断异常 InterruptedException 的正确处理方式
  13. Spring系列之Bean生命周期
  14. 【华为云技术分享】如何度量前端项目研发效率与质量(上)
  15. aes 加密_AES加密的安全问题
  16. MongoDB学习笔记(四)--索引 性能优化
  17. [转载] Java基础知识面试题(2020最新版)
  18. mac系统maven spring mvc小试牛刀
  19. Hls之TS流分离音视频
  20. 对于algorithm102的总结

热门文章

  1. Python实现智能语音播报功能
  2. Web技术的发展 网络发展简介(三)
  3. Excel(WPS)使用VBA,不打开文件情况下提取其他工作簿数据
  4. 浅入浅出LuaJIT
  5. 前端JSer装逼手册
  6. Edge Case UVA - 1646
  7. MySQL连接错误实例
  8. delphi多线程TThread类介绍
  9. 元宇宙的“42条共识” ,全网阅读量超1000万!
  10. Linux TCP之sack(一)