什么是算法,学习算法有什么用

什么是算法

任何一个问题的解决方案都并非是凭空出现的,解决一个问题都需要选择一个合适的方法,并在此方法的引导下完成一系列的解答步骤,最终将问题转换为结果状态,对于计算机来说,这样的方法就是算法。
算法有很多种分类,可以是一系列的数学计算,也可以是一系列的操作步骤,总之,它存在的意义就是为了有针对性地解决问题,之所以强调针对性解决问题,是因为这个世界上还没有一种可以解决一切的万能算法,每个问题都有它独特的一面。
而对于这些特殊的需求,于是在这行业中出现了新的一批人,他们负责设计解决各种问题的算法。

不过也正所谓没有最好用的,只有最合适的方案,不同的算法能够适配的是不同的环境,就好比不同的场景也要使用不同的服务架构模式。

所以算法是什么,答案已经出来了 => 算法就是对问题一系列的分析得出的数据进行数学建模,用程序表达出来,来解决实际遇到的问题。

学习算法的用处

我们在软件开发的领域中,很多东西都会因为时间的变迁而变化,编程语言也会不断地推陈出新,各种软件技术的更新换代更是日新月异,但是万变之中,有一种东西是不变的,那就是算法
数据结构,算法,计算机体系原理,远比编程语言,软件开发技术重要,因为算法和数据结构被称为软件的核心内容。

在现今软件开发的领域中,技术迭代速度飞快,掌握任意一个技术都有可能在第二年被技术的潮流所冲走,而算法,是一个应用程序中不可动摇的东西,无论语言怎么改变,算法的设计理念都是一样的。

包括在工作中遇到的算法也往往并非是ACM那样的题目(所以说比赛误人子弟啊...误),常见的问题比如说是:

  • 交换机中端口和VLAN的映射关系维护 (没听说过...附文)
  • 路由器带宽限速 (也没什么想法...附文)
  • ...

学习算法的目的是为了提高自己的软件编写,解决问题的能力,这种能力是在今后的工作或者项目开发过程中所需要展现出来的关键能力,换句话来说,就是:

本身学习算法,目的是培养出一套思维框架,在未来可以真正改变自己做事的思维,而不是为了算法而学习算法,那样只会让自己被封闭住,最终失去了自己的弹性。

秉承着这种原则去学习算法,更应该做的是找到方法,思考算法实现的设计和分析过程,而并非是去死记硬背各种算法的实现方法,学会钓鱼的方法永远比鱼更受益不是么?

所以我们学习算法不能死记硬背各种算法的实现方法,而是通过这些算法的学习,特别是算法实现的设计和分析的过程,培养我们解决实际问题的能力,工作中遇到的问题是自己动手解决的问题,还是到处贴吧发帖子求助,它的背后就是这种能力的体现,而这种能力,笼统的来说,就是编程能力。

编程能力大致包括以下:

  • 逻辑思维能力
  • 抽象建模能力
  • 编程的方法与技巧
  • ...

编程能力的培养,不是三五天能成的,也不是死记硬背就能会的,需要的是大量的实践(鄙人也在学绘画...两者感触颇深....)



学习算法本身,有几点是值得借鉴的:

  • 是能够比较直观的去提升自己编程能力的方法,掌握核心思想,能够在程序的道路中如虎添翼。
  • 同样是在写代码,但是在和别人思考同样的问题的时候,就会想的更细致些,比如时间复杂度,空间复杂度,计算效率问题的求解过程,对其它模块的影响等等(感触不能颇深,但有过的开发经验告诉我还是有的)
  • 我们经常会用代码堆出来一个功能,比如用户点击按钮的事件,这种流程化的动作机器也是可以做的,大量这样的场景都是可以避免去堆代码的

学习算法,有很多种方法,可以根据问题的类型采取不同的方法,算法被权威人士大致分为三类,权威人士有多权威,我就不说了:

  • 已知算法 (拥有成熟且高效的实现方法的算法) { 这类算法,除非是这个领域的从业人员或是励志成为该领域的专家,否则了解下就好,不至于工作中束手无策 }

    • avl树和红黑树的插入 (附文 => 戳此)
    • 删除算法 (附文 => 戳此)
    • 二分图匹配的匈牙利算法 (附文 => 戳此)
    • 数据压缩
    • 视频编码
    • 编解码算法
    • ...
  • 理论算法 (没有固定的实现方法的算法) { 理论中的内容是需要进行数学建模之后才会有结果的,抽象的方法本身是需要根据场景变动而变动 }
    • 遗传算法
    • 贝叶斯算法
    • 决策树算法
    • KN分类算法
    • ...

原文地址:https://www.cnblogs.com/Arunoido/p/10934044.html

时间: 2024-10-06 19:05:27

什么是算法,学习算法有什么用的相关文章

Stanford机器学习[第五讲]-生成学习算法

本课内容: 生成学习算法的介绍: 第一个典型的生成学习算法--高斯判别分析: 生成学习算法与之前的判别学习算法的对比: 朴素贝叶斯算法, Laplace平滑. 1.生成学习算法 学习算法分为两种:一种是判别学习算法(Discriminative Learning Algorithm),简称DLA,另一种是生成学习算法(Generative Learning Algorithm),简称GLA. DLA通过建立输入空间X与输出标注{1, 0}间的映射关系学习得到p(y|x).而GLA首先确定p(x|

Ensemble_learning 集成学习算法 stacking 算法

原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学习器的概念,但是使用的相对于bagging和boosting较少,它不像bagging和boosting,而是组合不同的模型,具体的过程如下:1.划分训练数据集为两个不相交的集合.2. 在第一个集合上训练多个学习器.3. 在第二个集合上测试这几个学习器4. 把第三步得到的预测结果作为输入,把正确的回

算法学习 - 表达树的建立(后缀表达式法),树的先序遍历,中序遍历,后序遍历

表达树就是根据后缀表达式来建立一个二叉树. 这个二叉树的每个叶子节点就是数,真祖先都是操作符. 通过栈来建立的,所以这里也会有很多栈的操作. 树的先序遍历,中序遍历,后序遍历的概念我就不讲了,不会的自行百度,不然也看不懂我的代码. 下面是代码: // // main.cpp // expressionTree // // Created by Alps on 14-7-29. // Copyright (c) 2014年 chen. All rights reserved. // #includ

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

算法学习三阶段

?? 第一阶段:练经典经常使用算法,以下的每一个算法给我打上十到二十遍,同一时候自己精简代码, 由于太经常使用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都能够把程序打 出来. 1.最短路(Floyd.Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal 要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘.判线段相交.然后写个凸包. 6.BFS.DFS,同一时候熟练hash 表(要熟,要灵活,代码要

写在前面:21天学习算法

最近打算找一份新的工作,感到自己在算法环节还很疲弱.由于时间还算充裕,就决定将LeetCode上面的算法题学一遍,找出自己的薄弱,锻炼算法思维,吸收他人长处.个人觉得,刷题只是学习算法中的一个环节,主要的作用是用来反馈错误和增加熟练度.相比较刷题,更加重要的是对比和总结,对比自己的代码和他人的代码,对比不同的解法,总结一类算法或一类问题,总结一些tips,这两步是提升自己的关键.另外,为了不让自己的视野过于局限,让得到的碎片化学习成果体系化,可以在刷题的时候,就某方面的算法或数据结构,多参考其他

周总结(2017.2.16):第一周算法学习。

周总结:算法学习总结之DFS和BFS 一:DFS算法 目的:达到被搜索结构的叶节点. 定义:假定给定图G的初态是所有的定点都没有访问过,在G中任选一定点V为初始出发点,首先访问出发点并标记,然后依次从V出发搜索V的每个相邻点W,若W未曾出现过,则对W进行深度优先遍历(DFS),知道所有和V有路径相通的定点被访问. 如果从V0开始寻找一条长度为4的路径的话: 思路步骤: 先寻找V0的所有相邻点:dis{v1,v2,v3},V1没有访问过,所以对V1进行深度遍历并将V1标记为访问过,此时路径长度为1

知其所以然(以算法学习为例)

原文发表于2008年 其实下文的绝大部分内容对所有学习都是同理的.只不过最近在正儿巴经地学算法,而后者又不是好啃的骨头,所以平时思考总结得就自然要比学其它东西要多一些. 问题:目前几乎所有的算法书的讲解方式都是欧几里德式的.瀑布式的.自上而下的.每一个推导步骤都是精准制导直接面向目标的.由因到果,定义.引理.定理.证明一样不少,井井有条一丝不乱毫无赘肉.而实际上,这完全把人类大脑创造发明的步骤给反过来了.看起来是阳关大道,实际上车马不通. 而对读者来说,这就等于直接告诉你答案&做法了,然后让你去

感知机学习算法 python实现

参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... 1 """ 2 感知机学习算法的原始形式 3 例2.1 4 """ 5 import numpy as np 6 7 class Perceptron: 8 def __init__(self,w,b,alpha): 9 self.w = w 10 self.b = b 11 self.alpha = alpha 12 13 def loss(self,x,y

算法学习 - 01背包问题(动态规划C++)

动态规划 01背包 问题描述 求解思路 代码实现 放入哪些物品 代码 动态规划 我在上一篇博客里已经讲了一点动态规划了,传送门:算法学习 - 动态规划(DP问题)(C++) 这里说一下,遇到动态规划应该如何去想,才能找到解决办法. 最主要的其实是要找状态转移的方程,例如上一篇博客里面,找的就是当前两条生产线的第i个station的最短时间和上一时刻的时间关系. minTime(station[1][i]) = minTime(station[1][i-1] + time[i], station[