随笔分类 -  数据结构与算法

摘要:排列(Arrangement),简单讲是从N个不同元素中取出M个,按照一定顺序排成一列,通常用A(M,N)表示。当M=N时,称为全排列(Permutation)。从数学角度讲,全排列的个数A(N,N)=(N)*(N-1)*...*2*1=N!,但从编程角度,如何获取所有排列?那么就必须按照某种顺序逐 阅读全文
posted @ 2017-01-08 01:25 eudiwffe 阅读(24448) 评论(1) 推荐(3) 编辑
摘要:归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序;然后将已经有序的两个子部分进行合并,最终完成排序。其时间复杂度与快速排序均为O(nlogn),但是归并排序除了递归调用间接使用了辅助空间栈,还需要额外的O(n)空间进行临时存储。从此角度归 阅读全文
posted @ 2017-01-05 23:27 eudiwffe 阅读(28695) 评论(0) 推荐(1) 编辑
摘要:在前面几篇博文中曾经提到链表(list)、队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现。 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据时,优先使用数组。数组可以通过下标直接访问(即随机访问),正是由于这个优点,数组无法动态添加或删除其 阅读全文
posted @ 2016-12-24 22:21 eudiwffe 阅读(15133) 评论(0) 推荐(3) 编辑
摘要:二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙。其衍生出各种算法,以致于占据了数据结构的半壁江山。STL中大名顶顶的关联容器——集合(set)、映射(map)便是使用二叉树实现。由于篇幅有限,此处仅作一般介绍(如果想要完全了解二叉树以及其衍生出的各种算法,恐怕要写8~10篇) 阅读全文
posted @ 2016-12-21 14:29 eudiwffe 阅读(16735) 评论(0) 推荐(1) 编辑
摘要:顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn)。虽然从此角度讲,也有很多排序算法如归并排序、堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于STL中默认排序方法就是快速排序。此外,快速排序的思想——划分(Partition)思想给人很多启发 阅读全文
posted @ 2016-12-20 15:57 eudiwffe 阅读(7727) 评论(0) 推荐(1) 编辑
摘要:堆(heap),是一种特殊的数据结构。之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree)。其中,前者称为小顶堆(最小堆,堆顶为最小值),后者为大顶堆(最大堆,堆顶为最大值)。然而更加特殊的是,通常使 阅读全文
posted @ 2016-12-20 14:41 eudiwffe 阅读(7202) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示