自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (1)
  • 收藏
  • 关注

原创 BST Application

每个内部节点(node)都可以看成一个范围的cut(割),目的是缩小范围,向左可以约定小于等于该割值的范围,向右是大于该割值的范围,割的值都是从点中提取的,但不是储存点信息的,是叶子节点才是储存点信息的,割到最后范围中只有一个点那就连接叶子节点,两个点以上继续割。1D的k-d树需要一个一个判断node的范围和查询范围的关系吗?构建树的时候每次往下能排除一半的不需要递归的节点,实际递归的节点每个高度只是常数个,所以是O(logn),n个区间就是nlogn,这个过程和1D的kd树范围查找很像。

2023-05-30 11:55:55 98

原创 排序-选取

第一页中的g与h大于d,但是只是常数意义上的大于d,即O(d),且互素。但是如果只是是d-sorting不是完全的sorting,每一个元素最多只可能交换X(g,h)/d次(一个元素的前X(g,h)个元素,在分成d列后,在每一列中只是前X(g,h)/d个元素),所以总时间是O(X(g,h)/d*n),再因为g,h都O(d),所以总时间O(n*d)。循环次数不会超过min(k,n-k),因为极限情况就是k中没有一个是排在0-k的,需要k次交换,同理对n-k也是同样分析,所以要小于min(k,n-k)。

2023-05-21 16:34:51 94

原创 串(string)

好后缀有点像KMP中的利用经验和教训,不同的是,KMP中只有在尾端(j接近m)时模式串才有可能移动接近m的距离,而BM好后缀中,无论j匹配失败在哪个位置,都有可能达到m的位移量,因为在BM中,后继的极限不是0,可能是j-m(这后继是在KMP的语境下,从头到尾进行比较,其实在BM里是从末端比较,后面这些根本不需要比较,也就没有什么如果是负数就定义为和所有的值相等),即有了m的位移量。的算法:主要思路是,在一次比对中,如果给定比对失败的位置,那么前面的比对成功的值是确定的,因此只根据模式串就可以。

2023-05-19 10:32:38 76

原创 优先级队列

(NPL有一些性质,例如节点NPL值等于左右孩子NPL较小值+1,NPL值等于该节点的子树所包含的最大满树的高度,所以该树所包含的节点数大于等于于2^n+1 -1,内部节点数比外部节点数少1(真二叉树),所以内部节点数大于等于2^n -1,所以对于一棵有n个节点的树,其根节点的NPL一定是O(logn))因为左孩子的NPL值大于等于右孩子(左式树特点),所以节点NPL值一定比右孩子大1,于是沿着右侧链走NPL步一定可以到达外部节点,即右侧链长度等于NPL值,即O(logn)。应该可以O(n)的时间。

2023-05-17 10:25:11 164 1

原创 图&图应用

1.图类型&顶点类型&边类型&邻接矩阵(Graghmatrix)(这里图实现的是带权有向图,每个顶点储存有数据,每条边也储存有数据)图类型(Gragh):一堆接口用于继承(这个和词典一样,只是一个空空的接口,而且很多接口都是纯虚函数需要重写,所以只是事先约定好这种类型有什么功能,具体实现交给它派生的类型)成员变量只有点数n以及边数e。顶点类型(Vertex):成员变量有Tv模板类型的数据data,出度、入度、状态(枚举数据类型:undiscovered、discovere

2023-05-15 17:35:04 125

原创 词典&散列

先求出最小值和最大值,再将(max-min)/n-1求出每个均匀间隔的长度(左闭右开区间,每个区间对应一个桶,一共有n个桶,min属于0号桶,man属于n-1号桶),之后可以将每个值都归入相应桶中(即归入相应区间,设值为x,x/k即是桶号,k为均匀间隔长度),桶中可以只保留两个数,即最大值和最小值,每次有进桶的都进行更新。除了散列函数的设计外,因为冲突不可避免,所以需要处理冲突的方式。跳转表和普通列表相比,普通列表插入和删除都是O(1),但是查找要O(n)(不仅是最坏情况O(n),期望值也是O(n)))。

2023-05-09 21:41:03 53

原创 BST应用及高级搜索树

首先要考虑的是数据访问的局部性。在这个例子中,伸展树还没伸展时,节点的访问可能达到n的时间,逐渐伸展后,分摊时间logn,再考虑可能会重复调用某个节点,这样的时间在平均上可能会更好。红黑树在普通的BST上有四条规则:根节点为黑,外部节点为黑(全部是引入的),红节点只能有黑孩子(这一条能推出红节点也只能有黑父亲),外部节点黑深度相等(深度在bst中的定义是路径的长度,这里的外部节点黑深度也可以理解为外部节点到根节点的黑路径长度,这个长度一定会等于路径上真实黑节点数量,因为外部节点和根节点都是黑色,

2023-05-07 10:33:45 69

原创 二叉搜索树

第一个问题可以换个视角,转变为n的最小值与h的关系,高度为h的AVL树,考察其左右子树,要想n尽可能小,那么子树高度一个为h-1,一个为h-2,即形成了s(h)=s(h-1)+s(h-2)+1的递推式,可知这是一个s(h)+1是个以h为fibnacci数列,所以最瘦的时候n都是h的指数级别,也就是最高的时候h不过logn。一开始肯定是插入,对空树进行插入,能很好实现,后续插入也能实现,二叉树中的节点确实是按关键码大小有秩序的插入的,实现了它的基本特性,保障了之后的操作的正确性。最坏情况退化成列表。

2023-04-22 17:54:52 30

原创 数据结构——二叉树

私有接口有更新节点高度(这个完全可以放到节点类中)、更新节点及祖先的高度(一般这是插入操作后使用),公共接口有插入左孩子右孩子(直接调用节点类的插入即可)(并没有蹩脚的插入父亲) ,接入左子树右子树(attach)(默认左孩子或右孩子为空),子树删除以及子树分离等,还有就是遍历等接口(直接对根节点调用遍历接口即可),这一点是最重要的,就像消灭西瓜游戏一样,合并的树一定是越来越大(最后霍夫曼树的根节点频率值等于所有字符频率值之和),直接放在队尾是最好的选择),这种是用空间换取了时间,

2023-04-20 22:54:45 216

原创 数据结构——栈与队列

利用两个栈可以实现队列,考虑复杂度的时候不能因为dequeue可能的时候要O(n)复杂度, 就认为每次都这样,O(n)的时候是把其他的元素转移时间也考虑在内,考虑一个完整的元素系列的复杂度也就O(n)的复杂度,一个元素平均两次出栈两次入栈,每个元素分摊是常数时间,而不能把那一次当作每个元素的分摊时间。因为栈混洗可以将栈的首元素出栈前已经有多少个元素已经进入栈B中进行分类,一共n种情况,每种情况正好是从c(n-1)*c(0),c(n-2)*c(1),c(n-3)*c(2)……的前者,横线表示后者。

2023-04-18 20:38:48 357 1

原创 数据结构-列表

其实就是定义两个数组(),一个存放数据,一个存放地址,其中地址用数组的秩来表示。free表示的是空余空间链表的首个地址,data白哦是的是后插入的节点的末地址(列表方向向前),当插入一个元素时,首先访问free,可以得到插入的地址在哪(free转向下一个值,即link表中的值),在相应位elem中计入数据,同时在link中填入上一个data值,同时更新data值为当前地址。删除操作将free值变成删除元素地址,同时link值变为之前的free值,同时将指向该元素的元素的link值变为删除元素的link值。

2023-04-17 12:18:39 73

原创 数据结构——向量(vector)

位图中有三个成员变量,一个是M(指向连续的char类型数据),N(char类型数据数量,类比于向量中的容量,因为char占一个字节,所以也表示M内存中的字节数),n代表总位数,_size表示。平均分析:以插入排序为例,其时间复杂度是输入敏感的,和输入的数列的逆序对数量有关,平均分析更多是对输入采取一个平均的概率分布,然后得出时间复杂度的期望值(区别于最坏的情况,插入排序最坏为O(n^2))分摊分析:从一个更长的时间的序列来考虑,考虑连续的一系列操作,把总体的时间分配给具体的某一个步骤。

2023-04-16 13:59:16 363

中国地势图 1∶1600万(8开).JPG

中国地势图高清

2021-01-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除