浅谈算法,一些感悟(1)

最近看到好几个同学在学算法,看了一些书,另外跟一个算法较好的同学讨论了一下,若有所悟,作此文,以求各位大神指教;

 现在看到好多同学学算法,可是,事实上看起来,真正明白理解了算法是一种什么东西的极少,很多都是为了参加ACM而去学算法,并没有对算法有真正意义上的研究,甚至说,他们拿到了ACM的入场券的时候还不知道算法是什么,我感到很惋惜,从我个人的理解来说,算法其实一直都在我们身边,它就是一切可以通过逻辑解释的活动的一整个过程,这样说可能有点泛泛而谈了,总的来说,算法就是一个抽象的流程;而且在我看来,我们计算机领域内所谈的算法应该算是一种比较狭义上的算法,是一种基于计算机的算法,而此类算法,我觉得应该可以分两种类型:求解型和功能型,何为求解型呢?具体说来,就是当前各种算法大赛所要求的那种算法,是为了对一类题求解,至于功能型,就是软件设计方面所用到的算法,可以说是把一系列求解型算法整合在一起的算法,好了,说了这么多废话,该入正题了;

会算法的人很多,可是算法也是有好有坏的,对一个程序来说,在得到同等结果的情况下,能尽量地减少时间损耗的就是好算法,但是,很多人为了追求完成任务,在时间损耗上不加以注意,使用了很多很粗糙的算法,比如说:要做一个循环十次的算法,有的人使用了循环算法,有的就使用分步的算法,把每一步都写出来,这只是一种很极端的情况,一般已经入门的人都不会这样做,后者就是一种很粗糙的算法,不仅执行效率低,而且写起来也吃力不讨好,相对后者来说,前者就是一种较美的算法,简洁、执行效率高、写起来也方便,这就是我对算法美的一种定义;

至今为止,我也没写出多少美的算法,但是,可以说我一直在追求,我尝试通过不断地思考,学习去改善一个算法,一下就是在算法由粗糙到美这个过程的一些感悟:

1、模糊算法模型,在写算法之前,应该先对整个算法有一个比较模糊的算法模型,应该知道这个算法是干嘛的,要怎么实现等等,不要一拿到题目就急着写算法,然后一边写一边思考,这种行为会把一个原来比较容易写的美的算法写的粗糙的;

2、在模糊算法模型的基础上,一步步往模型中添加具体的算法,使整个模型清晰起来,如果只是做一些比较的小的算法的话,这种行为可能没太大必要,可是,对一些比较大的算法来说,或者一下子要把整个算法模型弄出来会很困难,而且很多细节地方会顾及不到,因此,在模糊算法模型的基础上,把整个完整的模型分解成很多小的算法,一些小的算法比较容易写得美;

3、整合所有小算法,往模糊模型中添加完小算法之后,最重要的就是如何把这些小算法连接起来,这又涉及到一些连接的算法,而这些连接算法,有可能是相同的;

4、很多人写完算法之后,就开始根据算法编程,可是,有的时候,我们没预料到的就是语言本身的一些问题,会导致我们的算法错误,因此,我们在写完算法,甚至在写的过程加入我们所需要注意的编程问题,以求最好的算法;

5、有的时候,我们看看身边事物,没有什么特别,可是当我们从算法的角度出发,思考每种行为的算法的时候,我们可以领悟到更多的算法,同时,这些算法也可以在某些时候被应用到我们的项目之中;

时间问题,这次就先写这么多吧,只是个人的一些感悟,可能不太正确,恳请各位赐教!

原文地址:http://blog.51cto.com/14052480/2311630

时间: 2024-08-03 23:48:28

浅谈算法,一些感悟(1)的相关文章

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

浅谈算法和数据结构(1):栈和队列

浅谈算法和数据结构(1):栈和队列 2014/11/03 ·  IT技术                                         · 2 评论                                      ·  数据结构, 栈, 算法, 队列 分享到: 60 SegmentFault D-Day 2015 北京:iOS 站 JDBC之“对岸的女孩走过来” CSS深入理解之relative HTML5+CSS3实现春节贺卡 原文出处: 寒江独钓   欢迎分享原创

浅谈算法和数据结构: 四 快速排序

原文:浅谈算法和数据结构: 四 快速排序 上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort). 快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序. 快速排序也是一种采用分治法解决问题的一个典型应用.在很多编程语言中,对数组,列表进行的非稳定排序在内部实现中都使用的是快速排序.而且快速排序在面试中经常会遇到. 本文首先介绍快速排序的思

浅谈算法和数据结构: 九 平衡查找树之红黑树

原文:浅谈算法和数据结构: 九 平衡查找树之红黑树 前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度.但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 定义 红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,

浅谈算法和数据结构: 十 平衡查找树之B树

转载自 http://www.cnblogs.com/yangecnu/p/3632027.html 浅谈算法和数据结构: 十 平衡查找树之B树 前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

浅谈算法和数据结构系列汇总(转)

突然看到一个大神的系列文章讲的就是算法和数据结构,现在把它的文章集中分享给大家,向大神致敬: 浅谈算法和数据结构: 一 栈和队列 浅谈算法和数据结构: 二 基本排序算法 浅谈算法和数据结构: 三 合并排序 浅谈算法和数据结构: 四 快速排序 浅谈算法和数据结构: 五 优先级队列与堆排序 浅谈算法和数据结构: 六 符号表及其基本实现 浅谈算法和数据结构: 七 二叉查找树 浅谈算法和数据结构: 八 平衡查找树之2-3树 浅谈算法和数据结构: 九 平衡查找树之红黑树 浅谈算法和数据结构: 十 平衡查找

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

浅谈算法和数据结构: 六 符号表及其基本实现

http://www.cnblogs.com/yangecnu/p/Introduce-Symbol-Table-and-Elementary-Implementations.html 浅谈算法和数据结构: 六 符号表及其基本实现 前面几篇文章介绍了基本的排序算法,排序通常是查找的前奏操作.从本文开始介绍基本的查找算法. 在介绍查找算法,首先需要了解符号表这一抽象数据结构,本文首先介绍了什么是符号表,以及这一抽象数据结构的的API,然后介绍了两种简单的符号表的实现方式. 一符号表 在开始介绍查找