数据结构与算法
文章平均质量分 78
json_it学习笔记
纸上得来终觉浅,绝知此事要躬行
展开
-
数据结构之高级排序<希尔排序、快速排序>
1、希尔排序 基于插入排序,将增量应用到插入排序,然后逐渐减小增量。希尔排序通过加大排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项能大跨度地移动。当这些数据项排过一趟序之后,希尔排序算法减小数据项的间隔再进行排序 ,依次进行下去。间隔序列采用Knuth提出的:h = 3*h+1;此序列很常用。 效率:时间级从O(N^2/3)~O(N^7/6)示例:public原创 2017-07-31 14:54:41 · 366 阅读 · 0 评论 -
数据结构之哈希表
哈希表是一种数据结构,可以提供快速的插入和查找操作。哈希表的速度明显比树快,树的操作通常需要O(N)的时间级,而哈希表只需要接近常量的时间:即O(1).哈希表不仅速度快,编程实现也相对容易。哈希表也有缺点:它是基于数组的,数组创建之后,难于扩展。某些哈希表被基本填满时,性能下降的非常严重,所以必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。而且,也没原创 2017-08-07 16:52:25 · 635 阅读 · 0 评论 -
数据结构之二叉搜索树
树是一种很有意思的数据结构,它既能像链表那样快速的插入和删除,又能像有序数组那样快速的查找,一般我们探究的树是一种特殊的树 -- 二叉树。如果树中每个节点最多只能有两个子节点,这样的树就成为“二叉树”,否则,就是多路树了。二叉搜索树是一种更特殊的树 -- 父节点的左子节点的关键字值小于父节点,右子节点的关键字的值大于或等于这个父节点。 一般树的节点包括三个部分:data、leftN原创 2017-08-02 15:52:19 · 397 阅读 · 0 评论 -
数据结构之二分查找、简单排序(冒泡、插入、选择)、归并排序
1、二分查找只能应用于有序的数据,其实现也是比较简单的,每执行一次查找,则查找的范围变为原来的一半,其可查找的范围可以用如下函数表示:s = 2^r,其中s是查找的范围,而r表示步数。比如r =10,则2^10个数,查找某个数需要10步。其实现如下:// 二分查找对应的元素的positionpublic int binarySearchFind(int searchKey) {int原创 2017-07-17 14:02:31 · 542 阅读 · 0 评论 -
红黑树(一)之 原理和算法详细介绍
转自:http://www.cnblogs.com/skywang12345/p/3245399.html概要目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 概述:R-B转载 2017-08-03 17:16:05 · 388 阅读 · 0 评论 -
数据结构之哈夫曼树、红黑树
二叉树作为数据存储的工具具有重要的优势:可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。其他的数据存储结构,例如数组、有序数组以及链表,执行这些操作却很慢。因此,二叉树似乎是理想的数据存储结构。遗憾的是,二叉搜索树有一个很麻烦的问题。如果树中插入的是随机数据,则执行效果很好。但是,如果插入的是有序的数据(17、21、28、36.....)或者逆序的数据(36,28,21,原创 2017-08-05 18:51:18 · 1563 阅读 · 1 评论 -
数据结构之堆
数据结构中的堆是一种特殊的二叉树(不要和Java、c++中的“堆”混淆,后者指的是程序猿用new能得到的计算机内存的可用部分)。 堆是具有如下特点的二叉树:a)它是完全二叉树。也就是说除了树的最后一层节点不需要是满的,其他的每一层从左到右都完全是满的。b)它常常用一个数组实现。树的实现可以使用数组而不是由引用连接起来的各个节点来存储二叉树。c)堆中的每个节点都满原创 2017-08-13 19:58:55 · 299 阅读 · 0 评论 -
无向带权图的最小生成树算法——Prim及Kruskal算法思路
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。 构造网的最小生成树必须解决下面两个问题: 1、尽可能选取权值小的边,但不能构成回转载 2017-08-21 15:58:18 · 8186 阅读 · 0 评论