为什么一定要学算法?

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

1、算法评估

    1.空间复杂度

    2.时间复杂度

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

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

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

复杂度

2、数据结构

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

    1.线性表

    a.数组和链表

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

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

    b.堆栈、队列和串

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

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

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

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

c.树、二叉树及其他

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

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

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

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

d.映射表

key和内容对应起来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,173评论 0 12
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,491评论 1 31
  • 四. 走向世界之巅——快速排序 你可能会以为归并排序是最强的算法了,其实不然。回想一下,归并的时间效率虽然高,但空...
    Leesper阅读 1,780评论 9 7
  • 问题:为什么需要尊重到每个细节? 我以前一直不太能理解,为什么书里描写的那些如此能力超群的人,会如此刻意的尊重每一...
    维京阅读 186评论 0 1