算法情缘

算法情缘

“程序员与算法,是一个永恒的话题,无论在哪个论坛,只要出现此类主题的帖子,一定会看到两种针锋相对的观点的“激烈碰撞”,其实泡过论坛的人都知道,两种观点“激烈辩论”的惨烈程度往往上升到相互问候先人的高度,即使是技术论坛也不例外。”比如CSDN推出征文活动,论坛下面的讨论那是相当激烈啊,算法对于程序员来说,相似的情思,一样的共鸣,你懂与不懂,我一直在那里,悠悠的等待,浅浅流露着丝丝的忧愁,却又不失唯美,原来算法也可以这么的美好,诗情画意的场景,不由得为此浮想翩翩……《算法的乐趣》,充满了欢乐和趣味,淡淡的喜欢,浅浅的爱意,作者以唯美的语调诠释了算法的美丽,以单纯的感情,唯美之处,唯有心通的人儿,体会算法的乐趣,犹如天青色等烟雨,而我在等你,隔着千万里,似在近旁,青花瓷的美丽,隔着几千年静静观赏,蓝底色的花纹下,流露着穿越隔世的等待,念依旧清晰如初。

  算法,在儿时的记忆里,在现在的生活中

度娘对算法如此定义,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 王晓华老师说,算法的实质就是解决问题, 算法是数学与应用数学重要的组成部分,是计算数学的基础。算法并不神秘,相反,它每天陪伴在我们的左右。我们去超市买东西,计算机会计价,要涉及到计算机的编程,涉及到算法。对于小编来说,算法小编认识,又不认识,认识是因为,小编从小就开始接触,比如在小编上小学的时候,学习过的四种运算法则是先乘除后加减,有括号的要先运算括号里的,这些都是简单的算法,再比如说,小编要从北京回安徽需要一定的路程,路程也是一种算法。

生活中,很多事情,都需要按照一定的步骤去完成,算法太神奇又太平凡,我们都没有发现她的存在,不同的步骤都可以看作是不同的算法。不同的步骤,具有不同相对应的程序框图,就有不同的程序,说小编不认识算法,是因为算法的概念是人们在长期的科学探索中不断总结和提炼出来的,算法的多样性使得算法相当的灵活,所以算法在慢慢长大之中,所以要想完全地掌握算法,对小编来说有相当大的挑战,所以算法对小编来说,有时候又不认识。在二十一世纪的今天,计算机以迅雷不及掩耳之势大步向前发展,算法更是被应用到计算机的工作中,计算机可以解决很多问题,但是这并不是它本身的作用,必须是由人类给出解决问题的算法步骤,将其变成计算机指令,通过计算机的运算来解决这些问题,所以说算法在计算机中扮演一个相当重要的角色。我们只有深刻地认识到算法的概念,了解多种不同的算法,才能更好地将其运用,使计算机更好的为我们服务。

算法小Demo

算法能解决的问题很多,涉及的范围非常广泛,小到人们的日常生活,大到国家的政策出台,都离不了算法的实施。那么算法都有哪些特征呢?如下所示:
        A、确定性。算法的每一种运算必须有确定的意义,一道题目可以有好几种算法,但一种算法只能解决目的非常明确的问题,结果唯一,不能模糊。
        B、可行性。算法是计算机完成,所以输入的只能是计算机识别的语言,这就要求算法的可行性。要求算法中有待实现的运算都是基本的,每种运算至少在原理上能由人用纸和笔在有限的时间内完成。
        C、输入。一个算法有一个或多个语句的输入,在算法运算开始之前给出算法所需数据的初值,这些输入取自特定的对象集合;
        D、输出。作为算法运算的结果,一个算法产生一个或多个输出,输出是同输入有某种特定关系的量有关,输入的量不同,结果可能不同,取决在于程序的执行和步骤。
        E、有穷性。一个算法总是在执行了有穷步的运算后终止,即该算法是可达的,不能永无休止。满足前四个特性的一组规则不能称为算法,只能称为计算过程,操作系统是计算过程的一个例子,操作系统用来管理计算机资源,控制作业的运行,没有作业运行时,计算过程并不停止,而是处于等待状态。
        介绍了这么多的理论知识,小编来举一个简单的例子,还请各位算法大神们多多指教:比如暑假,小编想从北京回到小编的家乡安徽,小编可以选择做火车、高铁或者飞机(想做,就是囊中羞涩),告诉大家一个小秘密,小编的家乡通高铁了,开心ing,假如小编选择做高铁回家,小编可以制定以下步骤。
       第一步:查看高铁时刻表;
       第二步:在列车表中寻找是否有直接从北京到安徽无为的直达车,如果有,小编就选择该趟车,over。
       第三步:如果没有,查找从北京通往安徽合肥的列车,继续下来。
       第四步:查找所有经过安徽的列车,记录下来。
       第四步:整合搜索到的相关列车的信息,找出重合的交叉点,这个交叉点就是中转站合肥,小编可以从北京到合肥,在从合肥到无为。

小编列出来的步骤也是一种算法,我们选择“做什么”的方式是坐火车,接下来的步骤是在阐述“怎么做”,所以总结一下,算法实际就是对“做什么”和“怎么做”解决方案。 算法不是我们随便想怎么写就怎么写的,算法还具有几个基本特征如上所示,像上例中,所有经过北京和安徽的列车都算是算法的输入数据,而我们得到的出行路线则是输出。我们在脑子里勾画出算法了,但还需要清晰地表达出来,这就涉及到一个算法表示的问题,通常来说,算法有三种表示方法,一是用汉语、英语等自然语言表示,这种方式通俗易懂,但是也具有很大的缺陷,既是文字冗长,很容易出现歧义,而且输入到计算机中似乎也是有点不切实际。 由于这种方法的不足,我们进行改进,产生了流程图,就我们学习而言,我们使用流程图法较多,顾名思义,流程图就是将算法的步骤一步一步按顺序表示出来,是算法的执行过程,小编简单画了一个流程图,如下所示:

小编寄语:算法具有很强的实用性,在科技高速发展的今天,算法思想已经成为每一个人必备的数学修养。算法所体现了通用化、机械化、程序化等数学思想,在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。随着计算机的发展和普及,我们现在越来越依赖计算机帮我们完成各种工作,通常我们会设计一些程序来解决问题,一个程序通常是由算法和数据结构共同构成,算法是用来解决“做什么”和“怎么做”的问题,只有明确清晰地知道解决问题的方法,我们才能设计解决步骤,解决问题,算法是一个程序的灵魂!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 16:04:42

算法情缘的相关文章

(十)装饰器模式详解(与IO不解的情缘)

LZ到目前已经写了九个设计模式,回过去看看,貌似写的有点凌乱,LZ后面会尽量改进. 那么本章LZ和各位读友讨论一个与JAVA中IO有着不解情缘的设计模式,装饰器模式. 定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.                  这一个解释,引自百度百科,我们注意其中的几点. 1,不改变原类文件.                  2,不使用继承.                  3,动

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

密码算法详解——AES

0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128.AES-192和AES-256.本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加. 1 算法流程 AES加解密的流程图如下: AES加密过程涉及到4种操作:字节替代(SubBytes).行移位(ShiftRows).列混淆(MixCo

矩阵乘法的Strassen算法详解

题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

基于Spark MLlib平台的协同过滤算法---电影推荐系统

基于Spark MLlib平台的协同过滤算法---电影推荐系统 又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用.其中,主要包括三部分内容: 协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,

算法 希尔排序

希尔排序 Shell Sort 介绍: 希尔排序(Shell Sort)也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高. 执行流程: 首先