算法太重要了

人工智能”,“机器学习”,“大数据”,这些越来越常听到的字眼,背后其实都是一个个“算法”。

诸多高新科技,似乎都离不开“算法”的“加持”。

科学家 / 工程师 / 技术人员,现在如果不懂点算法,都不太好意思了。

算法其实很容易

听着这么高大上的“算法”其实一点也不难学!

为啥讲算法的书却很难看懂?

就是讲得太复杂了么,不同编程语言还都不一样。

专栏特点

1. 语言和逻辑极简,化复杂为通俗易懂,极速掌握;

2. 不使用编程语言!是的,这才是算法入门的最速方法;

3. 直击算法思维的核心点,不在次要知识上浪费时间。

什么是“算法”

算法,一看字面就知道,肯定是“计算方法”的简称啦,特指“计算机的计算方法”,所以,算法是由电脑程序来实现的。

算法,英文叫Algorithm,就是为了让电脑解决一个问题而设计出来的一套计算方法,这套计算方法的设计是依靠“数学模型”的建立。

也就是说,程序员在设计算法之前,会将实际问题理解分析,归纳为一个“具体的数学问题”

算法是解决问题的计算方法

算法有这么几个特征

确定

算法的每一个步骤都有“明确的意义”,对于算法结果的预期也是明确的。

2 有穷

算法不能一直算,停不下来是不行的;要有一个明确的结束条件,要不然算到“天荒地老”还有什么意义呢?

可行

有个笑话说一个人面试会计师,算数特别快瞬间出结果,但是就是算得不对。

输入输出

算法就是用来解决问题的,问题的来源就是输入,问题的结果就是输出。

再复杂的算法也是由一个个小算法组合成的

怎么设计一个算法程序呢

算法有三个要素——

数学模型输入输出方法算法步骤

所以说,怎么设计一个算法呢?

首先,先对要解决的问题建立一个数学模型,把原问题化为数学问题;

然后,将问题的“已知条件”化为“数据”输入到数学模型中;

再然后,通过对输入一步一步的转化/处理/计算,得到结果;

最后,把结果按照希望的形式,输出出来。

举个例子吧

比如我们要解决一个问题——班级里有30个同学,我们现在知道他们的姓名和考试分数,比如小红90分,小刚97分,小明60分等等,求班级里面哪位同学成绩最好?

谁的成绩最好呢?

那么我们按照上面的步骤来设计一个小算法吧。

把原问题转化为数学问题

求30个成绩值中的最大值及对应的姓名;

已知条件化为输入数据

依次输入30个名字和30个成绩值;(其中名字的数据类型为字符串,成绩值的数据类型为整数型,关于数据类型我们将在后面详细讲解)

分步计算

这是一个典型的求最大值的问题,方法很多,这里举一种方法:

3-1 取出第1个同学和第2个同学的姓名和成绩,比较大小,将那个较大的成绩值储存在一个位置,这个位置我们给他起个名字,就叫<当前最大成绩值>吧,再把这个较好的成绩对应的同学姓名存到另一个位置,就叫<当前最好成绩的同学姓名>;

3-2 这样,第1个同学和第2个同学成绩比较完成,得到了这2名同学中的成绩最好的同学,信息储存在:<当前最大成绩值>和<当前最好成绩的同学姓名>中;

3-3 下面就是重复性的工作了,把得到的<当前最大成绩值>和<当前最好成绩的同学姓名>与第3位同学进行比较,仍然是把较大的成绩值储存在<当前最大成绩值>里,把这个较好的成绩对应的同学姓名存到<当前最好成绩的同学姓名>里;

3-4 这个过程一直进行,直到把30个同学的信息都比较完,这时<当前最大成绩值>里存的值就是最好的成绩,<当前最好成绩的同学姓名>里存的值就是这位最厉害的同学的姓名。

输出

按照你想要的格式,将上面两个储存的值显示出来,就完成了!

借上面的例子有几点要说明一下

解决同一个问题,可能有各种各样的算法。不同的算法,可能执行速度不同,可能编写难易度不同,可能占用的资源不同,甚至可能计算准确度都不同;很多时候并没有最好的算法,只有在特定条件下最适合的算法

每一个算法都有适用的条件,条件变了,算法可能就用好用了。比如上面例子,如果这个班级中有2个同学的成绩刚好一样,那么按理说就应该输出两个姓名和成绩,上面的算法就需要改进一下了。

算法 —— 一个强逻辑体

能把问题具体化为一个或几个数学问题,问题就解决了一半。就如同学习和工作中一样,所谓解决问题的能力,有一半是分析问题的能力,能够将大问题分解成小问题,将抽象问题等价为具体问题。

最简单易懂的10堂算法入门课——算法是什么相关推荐

  1. 11.贪心算法入门-----Dijkstra算法详解

    Dijkstra算法详细(单源最短路径算法) 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算 ...

  2. 2020年牛客算法入门课练习赛1【完结】

    感觉题挺不错的,自己也觉得做过很多题了,但是做这一套题还是有的题有些许不会. 目录 第k小数[难度: 简单 / 快排] 不平行的直线[难度: 简单 / 数学] 丢手绢[难度: 一般 / 取尺法 双指针 ...

  3. 2020年牛客算法入门课练习赛1

    第k小数 链接:https://ac.nowcoder.com/acm/contest/12144/A 来源:牛客网 题目描述 给你一个长度为n的序列,求序列中第k小数的多少. 输入描述: 多组输入, ...

  4. 算法入门——排序算法

    1.排序 package suanfa; /*** 需求把一串字符数组按从小到大排列.* @author lindq3** 2017-2-15*/ public class SortTest {pub ...

  5. 算法入门篇八 贪心算法

    牛客网 左程云老师的算法入门课 贪心算法 贪心算法的解题步骤  例子 题目要求  解题策略 按照结束时间早的会议先安排,比如先安排[2,4],当4结束了,所有开始时间小于4的全部淘汰,[1,7].[3 ...

  6. 算法入门篇七 前缀树

    牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树,那么后继节点就是右子树的最左边的第一个节点 如果节点没有右子树,如果节点是父节点的右孩子,就继续往上找,直到找到一个父 ...

  7. 算法入门篇九 暴力递归

    牛客网 左程云老师的算法入门课 暴力递归 原则  汉诺塔问题 问题 打印n层汉诺塔从左边移动到最右边的过程 思想 一共六个过程,左到右.左到中,中到左,中到右,右到左,右到中,互相嵌套使用 左到右 将 ...

  8. 算法提高课——3.10 欧拉路径和欧拉回路

    欧拉路径和欧拉回路 哥尼斯堡七桥问题 以下内容摘自<信息学奥赛一本通·提高篇>. 欧拉回路问题是图论中最古老的问题之一.它诞生于18世纪的欧洲古城哥尼斯堡,普瑞格尔河流经这座城市,人们在两 ...

  9. 2019 年入门AI算法工程师,你需要掌握什么技能?

    一篇推文,感兴趣的同学可以了解一下,有需要请继续往下阅读,没有需要的打扰各位金主了 ----- 人工智能与自然语言处理/计算机视觉课培训招生 Artificial Intelligence ForNL ...

  10. 《算法图解》读书笔记—像小说一样有趣的算法入门书

    前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...

最新文章

  1. python3 文本文件内容去除重复行
  2. 动态规划备忘录方法Java_动态规划和备忘录法的区别
  3. Cacti迁移RRA数据迁移脚本
  4. 加固工程验收规范50550_轻质隔墙怎样做才规范,看完这3点
  5. Nodejs模块初始化
  6. 助力南京打造创新名城 第三届未来网络发展大会将召开
  7. C#使用DirectoryEntry类操作Windows帐户
  8. 微型计算机原理实验二,微型计算机原理与接口技术实验指导(第2版)
  9. 在js中为什么0.1+0.2不等于0.3
  10. Spring Cloud源码阅读(一)
  11. pygame 游戏开场动画渲染学习,绘制 10*7=70 个小方块
  12. Android远程真机调试(电脑使用 Vysor 控制手机)
  13. DGV:人类基因组结构变异数据库
  14. windows 7 cmd(ms DOS)命令窗口没有滚动条 还原CMD默认设置
  15. 手板(prototype)
  16. 记一次JVM故障排除
  17. B/S架构及其运行原理
  18. java 图片去除黑边,头顶黑边,求大神解决
  19. 手把手教你学习单片机-硬件基础知识
  20. feign.RetryableException: 连接超时 (Connection timed out) executing xxx FeignException.java:249

热门文章

  1. NTP授时服务器(网络校时服务器)对医院信息化建设的重要
  2. 2022年5款免费聊天机器人,帮助独立站降本增效
  3. HTML如何下载文件
  4. 免费在线的数据库建模工具,云版PownerDesigner
  5. 完整安装PX4/PX4-Autopilot,无需科学上网。
  6. selenium弹窗处理,包括Javascript弹窗、HTML弹出层和Windows弹窗
  7. Cholesky 分解,QR分解
  8. java获取序列号_纯Java获取CPU序列号
  9. 1.2.1 Simulink入门操作
  10. RAID环境中增加容量-在线扩容