算法/数构
aaa
看,未来
墨家学徒
展开
-
三个小时写一个限制扩容的哈希表
话不多说直接贴代码。说真的,今天听到这个任务的时候我心里一惊,感触颇多。我想,该把下一个项目(毕设)尽早提上日程了(是时候找老师了)。#include<vector>/** 设计思路:哈希表构造时需要传入预期哈希表长度,以及开链法最长链表长度,建议设置8* 存储哈希节点的数组里存放的是链表的长度,直接开链* 当链表长度过长的时候将链表转化为AVL树,当链表长度缩减回可容纳范围时将AVL树切换回链表*///链表类class List_Node {public: Li原创 2021-10-12 20:41:46 · 201 阅读 · 1 评论 -
XXX为什么选择红黑树?
记得被面过这个问题,问的是epoll为什么选择红黑树不选择AVL树。当时脑子有点乱,回答的就有点乱,再整理一下语言吧。1、其实单次插入,二者没什么太大差别。2、删除的时候,红黑树依旧快,不过AVL树就不一定了,因为它要维护那一条路上的平衡,有可能会到log(N)。3、更重要的是,因为AVL是高度平衡的,所以在增删的时候需要调整的概率就变大了。在频繁增删的时候,第三点才是最要命的。跟哈希表对比也被问过,这个就脑子清醒多了:看业务场景,红黑树省内存、且有序。哈希表更快一些。...原创 2021-10-03 09:23:50 · 233 阅读 · 0 评论 -
滑动窗口类问题框架
文章目录算法框架最小覆盖子串最长无重复子串这种问题理解起来不难,但是框架写出来就有点长了,毕竟细节的东西有点多哈。什么时候右滑,右滑多少?什么时候左滑,左滑多少?这些问题平时都会说,但是放到真实场景中,总容易想不明白。算法框架初始化窗口端点L,R,一般L为0,R为1 初始化最优值 while R < len(Array): while R < len(Array): R += 1 #移动右端点 .原创 2021-09-29 17:06:27 · 183 阅读 · 0 评论 -
回溯类问题框架
文章目录N叉树的前序遍历回溯框架示例4*4数独N叉树的前序遍历void preorder(Node* node) { cout << "value:" << node->val << endl; for (Node* n : node->children) { preorder(n); } return;}其实回溯,可不就是N叉树的前序遍历带上功能嘛。回溯框架vector<T> re.原创 2021-09-29 16:59:31 · 160 阅读 · 0 评论 -
浅谈 B+树
目前常见的主要的三种存储引擎是:哈希、B+树、LSM树。LSM下次再说,hash讲过了。没有什么B-树,那是 B-tree,国内一直翻译成B-树,其实就是B树。B树我也不想说了,因为已经被升级过了,叫B+树。下图来自 小灰的算法之旅,懂得人自然就懂了:对比一下B树:这个是B树。B+树对于B树的改进1、所有数据都在叶子节点。算法更容易理解了。回头抽空手写一下B+树,正好跳表也要重写了。2、底层叶子节点使用链表串起来了。这第二个改进不可谓不秀。单这么看自然是不明所以的,但是凡事都要放在原创 2021-09-27 10:29:14 · 222 阅读 · 0 评论 -
get 到O(1)反转链表(尾插法)的那个点
其实一直没完全搞明白这个尾插法。也曾自己写过好多次的原地反转链表,无不以失败告终,最后不得不在O(N)的复杂度下草草收场。背题吧,咱也不是那块料、今晚突然就 get 到那个点了,原来,奥妙在这里···原创 2021-09-23 21:52:06 · 315 阅读 · 2 评论 -
再探 set/map
文章目录set篇放码过来set的定义自定义排序函数set的迭代器begin() 、end()是否成功插入元素的检索为何map和set的插入删除效率比其他序列容器高,而且每次insert之后,以前保存的iterator不会失效?为什么 set 的底层不用hash?set.lower_bound(x)/upper_bound(x)有一个结构体,里面有两个字符串,如何在一个set中查找这个结构体?map篇放码过来map的迭代器自定义排序[] 运算符重载函数C++map迭代器的++操作是如何实现的?set和ma.原创 2021-09-16 21:59:44 · 210 阅读 · 0 评论 -
数据结构(8)-- 图解红黑树
文章目录红黑树红黑树的特征红黑树红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构。红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但 对之进行平衡的代价较低, 其平均统计性能要强于 AVL 。由于每一棵红黑树都是一颗二叉排序树,因此,在对红黑树进行查找时,可以采用运用于普通二叉排序树上的查找算法,在查找过程中不需要颜色信息。红黑树的特征红黑树是每个结点都带有颜色属性的二叉查找树,.原创 2021-02-12 11:46:27 · 5667 阅读 · 11 评论 -
数据结构(7)-- Splay tree(伸展树)
文章目录前言伸展树自底向上旋转更进一步:展开情况一:之字型(zig-zag)情况二:一字型(zig-zig)示例伸展树的节点删除自顶向下伸展树zig(单旋转)zig-zig(一字型旋转)zig-zag(之字型旋转)合并树我一直没看懂的示例自顶向下伸展树代码实现前言之前也写过两篇关于伸展树的,一篇是概念,一篇是实现。今天重温一下。回顾往昔,光阴似箭,日月如梭啊。伸展树现在我们来介绍一种相对与AVL树更简单的数据结构,它叫伸展树,它保证从空树开始连续任意M次操作最多花费O(MlogN)时间。虽然.原创 2021-02-09 12:20:08 · 2617 阅读 · 3 评论 -
数据结构(9)-- 哈希表 unordered_map
文章目录哈希散列表小故事加载因子哈希函数的安全我的困惑资料哈希散列表需要我说一下什么是哈希表吗?上面那张图可以先看一下,然后我搬一段官方话过来。哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表hashtable(key,value) 就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就.原创 2021-02-14 21:28:57 · 2370 阅读 · 12 评论 -
数据结构(9)-- 跳表
文章目录跳表跳表的搜索跳表的插入抛硬币跳表的删除跳表的代码实现跳表数据结构初始化跳表插入节点删除节点销毁跳表为什么Redis要用跳表来实现有序集合?跳表让你现场手写一棵红黑树、AVL树、伸展树之类的,你行吗?要不让我查资料,我估计只能扯皮。跳表就不一样了,看懂它的原理很简单,根据它的原理直接手写也是可以实现的。为什么?跳表(skip list) 对应的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高.原创 2021-02-12 14:39:37 · 1544 阅读 · 13 评论 -
数据结构(12)-- 前缀树(字典树、Trie)
文章目录什么是前缀树?Trie的应用场景自动补全拼写检测最长前缀匹配Trie存在即合理什么是前缀树?直接说可能不太理解,我直接来张图:晓得了吧,一种特殊的N叉树。用于检索字符串数据集中的键。Trie的应用场景自动补全就是前面那张谷歌的图,我也想自己截,奈何技术跟不上啊。拼写检测最长前缀匹配比方说正则表达式,不过正则比这个要复杂一些了。可以用来提取出表中所有以“ABC”开头的数据,但是数据表浩如烟海,你总不能让我去遍历吧!!!Trie存在即合理在平衡树、哈希表等树据结构的.原创 2021-03-18 09:00:53 · 2778 阅读 · 13 评论 -
数据结构(十一)-- 并查集
我也不知道到底哪里来的,反正你不笑是你太高冷。我本来想自己写一篇的,但是这篇实在是太好笑了哈哈哈哈哈,我就转载了。转自:这篇博客故事读完,并查集就会了~~~~~江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形成了一个一个的帮派,通过两两之间的转载 2020-07-14 20:50:03 · 1639 阅读 · 12 评论 -
数据结构(四)-- 二叉树
文章目录前言二叉树前言半年前,种过一次树,有不少朋友喜欢。但是接下来我又要重新种树了,因为我发现,我忘了。不过可以放心,前面那篇我不会删,毕竟大家比较喜欢。二叉树原创 2021-02-07 12:48:59 · 1911 阅读 · 7 评论 -
数据结构(三)-- 栈、队列
思维导图是依旧还没有的啊文章目录栈①后进先出的叫栈②API设计③顺序栈实现④双端栈实现多端栈⑤动态栈⑥汉诺塔⑦单调栈性质:波兰式与逆波兰式什么是波兰表达式中缀表达式转逆波兰表达式后缀表达式运算流程放码过去队列消息队列栈想当一个合格的程序员,你敢出去说你不会栈吗?我不敢的。栈有很多用途,也分很多种类,顺序栈、双端栈、单调栈、链栈等。让我们一起带你,深入浅出栈结构。坐好上车咯。①后进先出的叫栈栈呐,你可以叫它弹(dan)栈,就像弹夹一样。入栈只能在栈顶,出栈也只能在栈顶,想象一下手枪弹夹。.原创 2020-12-21 09:23:14 · 1466 阅读 · 18 评论 -
数据结构(二): 链表篇
文章目录C链表初识链表单链表单链表实现尾插法循环链表判断链表是否有环寻找链表入环点双向链表LeetCode 上的链表题记一段曾经的问题代码翻转链表旋转链表STL 中的 List3、List基本函数使用C链表链表在C语言的数据结构中的地位可不低。后面很多的数据结构,特别是树,都是基于链表发展的。所以学好链表,后面的结构才有看的必要。初识链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以.原创 2021-02-03 08:57:59 · 3249 阅读 · 12 评论 -
数据结构(一):数组篇
文章目录序言C数组什么是数组数组初始化访问数组元素C++中没有数组边界检查细节决定成败传递数组给函数序言这不是,金三银四嘛。外边晃荡了这么久,突然发现老本儿有点松动了。斌哥(秋西哥)在他的毕业致辞上说:“一天不练,自己知道;两天不练,同行知道;三天不练,观众知道。”今晚我打开LeetCode,看到以前写过的一道题,想着写个循环,突然发现我只会写for i in XXX了,这时候我知道,问题有点严重了。第一篇不是指针,直到倒数第二篇也不会出指针,放心吧。因为指针实在太玄妙了,得压轴。虽然标题上写.原创 2021-02-02 10:43:20 · 1890 阅读 · 7 评论 -
字符串匹配算法知多少?
文章目录BF算法RK算法编辑器中的全局替换方法:BM算法坏字符好后缀规则代码实现KMP算法一说到字符串匹配算法,不知道会有多少小伙伴不由自主的想起那个kmp算法呢?想到是很正常的,谁让它那么优秀呢。BF算法不要被事物的表面现象所迷惑,这个算法全称:Brute Force,有个拉风的中文名:暴力匹配算法。能想明白了吧。如果模式串长度为 m,主串长度为 n,那在主串中,就会有 n-m+1 个长度为 m 的子串,我们只需要暴力地对比这 n-m+1 个子串与模式串,就可以找出主串与模式串匹配的子串。.原创 2021-07-03 11:12:39 · 5951 阅读 · 203 评论 -
“数据结构” 系列 -- 导航篇
从头整理了一堆的数据结构,来波整理。为实习准备的数据结构(1)-- 详尽数组篇为实习准备的数据结构(2)-- 详尽链表篇为实习准备的数据结构(3)-- 详解 栈为实习准备的数据结构(4)-- 二叉树为实习准备的数据结构(5)-- 图解AVL树(平衡二叉搜索树)为实习准备的数据结构(6)-- 优胜树与淘汰树为实习准备的数据结构(6)-- 伸展树为实习准备的数据结构(7)-- 线索二叉树为实习准备的数据结构(8)-- 倾心图解红黑树为实习准备的数据结构(9)-- 跳表为实习准备的数据结构.原创 2021-06-20 14:31:39 · 6857 阅读 · 24 评论 -
数据结构练手小项目(AVL树、哈希表、循环链表、MySQL数据库)
文章目录前言正文(无删减)我的想法(删减修改版)数据导入与数据存储功能实现数据结构用户结构SIM卡结构AVL树数据结构哈希表结构数据表用户表SIM卡表时间安排前言本月主打数据结构,当然,月初的时候入门了MySQL。不过吧,一直学一直学,人都学傻了,死读书读死书,以练代学,学以致用才是正道。这不,我找到了一个数据结构的练手小项目,拿来练练,如果有兴趣,可以一起试试啊。正文(无删减)1.主题区域“移动运营商的客户服务”的信息系统应在以下位置输入,存储,处理和显示数据:-顾客-移动运营商拥有的S.原创 2020-07-18 12:05:21 · 2377 阅读 · 19 评论