数据结构底层思想及设计实现
文章平均质量分 88
数据结构底层思想及设计实现
WilsonSong1024
这个作者很懒,什么都没留下…
展开
-
动态规划之背包问题原理详细推导及其实现
贪心算法:(1) 给定n个物品,物品价值分别为P1,P2,…,Pn,物品重量分别W1,W2, …, Wn,背包容量为M。每种物品可部分装入到背包中。输出X1,X2,…,Xn,0<Xi<1, 使得 最大,且 <M。试设计一个算法求解该问题,分析算法的正确性.解: 设计思路:首先将n个物品按单位价值从大到小排序,每...原创 2018-03-05 18:46:41 · 4367 阅读 · 0 评论 -
贪心算法解决最少圆覆盖最多点问题
贪心算法解决最少圆覆盖最多点问题 海面上有一些船需要与陆地进行通信,需要在海岸线上布置一些基站。现将问题抽象为,在x轴上方,给出N条船的坐标 ,在x轴上安放的基站可以覆盖半径为d的区域内的所有点,问在x轴上至少要安放几个点才可以将x轴上方的点都覆盖起来。试设计一个算法求解该问题,并分析算法的正确性。解: 设计思路:首先...原创 2018-03-05 18:51:40 · 15976 阅读 · 11 评论 -
动态规划--找一串数字的最大算式
(1)给出N个1-9的数字 (v1,v2,…,vN),不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。并说明其具有优化子结构性质及子问题重叠性质。例如: N=5,K=2,5个数字分别为1、2、3、4、5,可以加成: 1*2*(3+4+5)=24 1*(2+...原创 2018-03-07 20:21:34 · 3345 阅读 · 0 评论 -
二分搜索树设计思想及实现
二分搜索树定义二分搜索树(Binary Search Tree),也称二叉查找树,有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键值相等的节点(no duplicate nodes)...原创 2018-09-02 20:05:12 · 2288 阅读 · 0 评论 -
堆树详解及使用最大堆实现优先队列
堆树详解及使用最大堆实现优先队列定义堆树的定义如下:堆树是一颗完全二叉树;堆树中某个节点的值总是不大于或不小于其孩子节点的值;堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆。构造二叉堆这里是一自定义的动态数组作为底层来实现最大堆这种数据结构,使用数组存...原创 2018-09-02 20:03:43 · 1414 阅读 · 0 评论 -
并查集详解及底层实现
并查集详解及底层实现定义并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集(Union/Find)从名字可以看出,主要涉及两种基本操作:合并和查找。这说明,初始时并查集中的元素是不相交的,经过一系列的基本操作(Union),最终合并成一个大的集合。...原创 2018-09-02 20:05:43 · 928 阅读 · 0 评论 -
线段树(segment tree)详解
segment tree(线段树)详解什么是线段树线段树是一棵平衡搜索树,但是不是完全二叉树,其实也是一棵二分搜索树,它储存的是一个区间的信息。每个节点以结构体的方式存储,结构体包含以下几个信息:区间左端点、右端点;(这两者必有)区间内要维护的信息(实际情况而定,数目不等)。一个具体的线段树如下所示,这里是一数组作为底层数据结构来阐述线段树,所以就简单的将线段树看为满二...原创 2018-09-02 20:06:16 · 2493 阅读 · 0 评论 -
AVL树的思想及实现
AVL树的思想及实现定义AVL树是高度平衡的二叉搜索树,按照二叉搜索树(Binary Search Tree)的性质,AVL首先要满足:若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。AVL树的性质:左子树和右子树的高度之差的绝对值不超过1树中的每个...原创 2018-09-02 20:06:55 · 921 阅读 · 0 评论 -
红黑树思想详解及实现
红黑树思想详解及实现从2-3树开始2-3树定义2-3树在《算法4》这本树中的定义是这样子的:一棵2-3查找树或为一棵空树,或由以下节点组成:2-节点,含有一个键(及其对应的值)和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的节点值都大于该节点。3-节点,含有两个键(及其对应的值)和三条链接,左链接指向的2-3树中的键都小于该节点,中连...原创 2018-09-02 20:07:27 · 1410 阅读 · 1 评论 -
哈希表设计思想及实现
哈希表设计思想及实现定义哈希表在《算法4》这本书中是这么介绍的:哈希表其实又叫散列表,是算法在时间和空间上做出权衡的经典例子。如果一个表所有的键都是小整数,我们就可以用一个数组来实现无序的符号表,将键作为数组的索引而数组中i出存储的值就是它对应的值。其实散列表的思想也是这样的,只不过他的键的类型更加复杂,是这种简易方法的一种扩展。使用散列查找分为两步:用散列函数将被查找的键转...原创 2018-09-02 20:07:53 · 6215 阅读 · 0 评论 -
Map及其底层简单实现
Map数据结构及其底层简单实现其实Java中的map就是映射,叫字典也可以,其实map也是一种容器,在这里为了深入的去理解map这种数据结构,从底层自己简单的实现 一下。使用链表作为底层基础来实现Map其实链表这种数据结构我们知道其一般只包含next和value两个属性,但是其实你也可以多给他添加一个key的属性。这样的话就和我们的map这种数据结构很像了,具体的实现如下:...原创 2018-09-02 20:02:49 · 2186 阅读 · 0 评论