美文网首页app开发程序员
为什么一定要学算法?

为什么一定要学算法?

作者: Italks | 来源:发表于2016-08-05 13:07 被阅读221次

算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。---云风《游戏之旅-我的编程感悟》第二章(4m8h)

1、算法评估

    1.空间复杂度

    2.时间复杂度

    3.对基本操作的评估(一次加减乘除或内存访问,函数调用,都可以算作一次基本操作)

通常用大O表示法(big-Oh notation)来表示问题的复杂度,它表达的是问题的计算量的层次,O即Order的缩写,O(n^2)表示基本操作使用的次数和问题的规模成平方的关系。

常见的层次按一下表递增:

复杂度

2、数据结构

程序是由算法和数据结构组成的,要想学算法,也要学会如何去组织数据,处理数据。

    1.线性表

    a.数组和链表

数组:指屋里地址连续的表,可以用内存地址来检索到对应的元素,可以用常数时间访问到指定2位置的元素,但是在中间插入和删除元素的时间复杂度为线性的

链表:每个元素的物理位置是任意的,通过指针串接起来,它访问的时间非常长,但是插入和删除的速度却很快,由于需要额外的空间记录元素的前后关系,占用内存也大于数组

    b.堆栈、队列和串

堆栈和队列是两种特殊的线形表。

堆栈:只能从一头进出,先进入的数据后出来,广泛用于类C语言的函数调用机制。做深度优先搜索求解问题时也需要它。

队列:和堆栈相反,采用先进先出,让数据从线性表的一头进入,从另一头出去,用来保持元素的先后顺序,被广泛用在消息通讯中,也可以用于广度搜索的算法。

优先队列:每个元素都有一个优先级,出队列的时候,永远是优先级最小的元素优先,通常不是由线性表来实现。

c.树、二叉树及其他

树:对有层次的数据集的一种组织方式,树中每个数据节点都有或没有它所下属的数据集,除了根节点是整棵树的根源外,每个数据节点都有唯一的父亲。

二叉树:二叉树的子树有明确的左右之分,让左子树指向自己的一个儿子,让右子树指向自己的下一个兄弟。在表达式计算和数据压缩,以及排序查找方面都有很多的用途。

四叉树及八叉树:四叉树用于平面划分,八叉树用于三维空间,这里所说的空间,不仅仅局限于游戏里的场景空间。

图:图中每个节点并没有父子关系,图纯粹是点和边的集合,节点和节点之间允许加上一些与它相关的数,称为权,带权的图一般叫做网络,节点和节点之间可以是无方向的连接,也可以是有向连接。

d.映射表

key和内容对应起来。

相关文章

  • 为什么一定要学算法?

    算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。---云风《游戏之旅-我的编程感悟...

  • 斐波那契查找算法

    学算法一定要了解斐波那契算法,它也是顺序查找算法的一种,可以非常精准定位要查找的数据,又称为“黄金分割”查找算法。...

  • 为什么一定要学游泳?

    为什么一定要学游泳? 我最先想到的是蔡康永说过的一段话。 15岁觉得游泳难,放弃游泳,到18岁遇到一个你喜欢的人约...

  • 为什么一定要学Python?

    选择要学习的技术和选择要上的大学一样重要,如果选错了,你将来不仅得不到自己喜欢的高薪工作,反而会弄得一堆麻烦。如果...

  • 为什么一定要学别人

    虽然校长说我们的坊不如别人的,说实在的我觉得祁阳的不如我们,我只能说我们领导没有深入我们的工作坊,也不了解我们的坊...

  • 为什么一定要学拳

    为什么一定要学拳(深度好文) 拳分很多流派。截拳道、跆拳道、巴西柔术、自由搏击、泰拳、拳击等。 ...

  • 英语为什么一定要学?

    最近女儿英语成绩非常差,为了让她拾起对学习英语有兴趣,特意为此写了自己学习英语的心得,给孩子树立一个好榜样!

  • 我为什么学算法

    为什么要学习算法?想必很多人的第一反应就是应对大的IT公司的面试.但其实算法的应用远不止这些,只是我们没有意识到,...

  • 为什么我们需要学习算法?

    算法是计算机科学领域最重要的基石之一,特别是面试的时候,算法是必不可少的一部分。 为什么学算法? 李开复曾经把基础...

  • GitHub上标星79K的LeetCode算法小抄开放下载了

    在大厂面试中我们不可避免的会考到算法,为什么大厂一定要考察算法呢?因为它包含了太多的逻辑思维,可以考察你思考问题的...

网友评论

本文标题:为什么一定要学算法?

本文链接:https://www.haomeiwen.com/subject/eeehsttx.html