
算法
风雨中奔跑的小孩
这个作者很懒,什么都没留下…
展开
-
程序猿必修课之数据结构(二)算法和算法的复杂度
算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法的特性 算法具有五个基本特性:输入、输出、有穷性、确定性、可行性。 算法设计的要求 好的算法,应该具有:正确性、可读性、健壮性、高效率和低存储量的特征。 函数的渐近增长 输入规模 n 在没有限制的情况下,只要超过一个数值 N, 这个函数就总是大于另一个函数,我们称函数是...转载 2018-08-27 17:34:01 · 210 阅读 · 0 评论 -
程序猿必修课之数据结构(三)线性表1
线性表的定义 线性表(List):零个或多个数据元素的有限序列。 首先它是一个序列。也就是说,元素之间是有顺序的,若存在多个元素,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。 其次,线性表强调是有限的。 线性表元素的个数 n (n >= 0) 定义为线性表的长度,当 n = 0 时,称为空表。 线性表的抽象数据类型 ADT 线性表(List) ...转载 2018-08-27 17:34:18 · 174 阅读 · 0 评论 -
程序猿必修课之数据结构(四)线性表2
上篇我们复习的线性表的顺序存储结构,它的最大缺点就是:插入和删除是需要移动大量元素,造成时间的浪费。 导致这个问题的原因是,相邻两个元素的存储位置也具有邻居关系,也就是说它们在内存中是挨着的,中间没有空隙,当然就无法快速插入,而删除后,当中就会留出空隙,自然需要弥补。链式存储就是为了解决这个问题而产生的。 线性表链式存储结构定义 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数...转载 2018-08-27 17:34:38 · 151 阅读 · 0 评论 -
程序猿必修课之数据结构(五)线性表3
循环链表 对于单链表,由于每个结点只存储了向后的指针,到了链表末尾就停止了向后链的操作,这样,结点就无法找到它的前驱结点了。 将单链表中终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。 循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是判断 p->next 是否等于头...转载 2018-08-27 17:35:05 · 185 阅读 · 0 评论 -
堆操作与堆排序
首先,我们来认识堆: 堆的建立:将给定的序列按层次遍历建立完全二叉树,然后从最后一个非终端结点开始自下向上逐步调整为堆。 这里就有两个重要的操作,shift_up(int t)和shift_down(int t),这样我们就建立了堆。 对于堆排序,就相当于每次取出堆顶的元素值,这样是从大到小排序的,因为建立的是大顶堆。堆排序是一种树型 选择排序。 现在来详细说一点:比如...转载 2018-08-14 14:29:03 · 239 阅读 · 0 评论 -
编程算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个...转载 2018-08-13 09:06:23 · 1562 阅读 · 0 评论