- 博客(15)
- 收藏
- 关注
原创 大数据模型处理(哈希表,位图法,布隆过滤器)
使用位图法首先要直到待处理数据中的最大值,按照size=(maxNumber/32+1)的大小来开辟char类型的数组。区别:unordered_set存储唯一元素(适用于频繁插入和删除),unordered_map存储键值对,键唯一(适用于以键-值形式的存储)。位图法:用一个位(0或1)来存储数据状态,适用于状态简单,内存大,要求使用率低的场景。相同:同为无序集合容器,存储元素不允许重复,不保持任何顺序,底层实现是哈希表。步骤:1、计算待处理数据最大值,根据最大值来求bitmap的位图数组。
2025-10-11 11:47:48
205
原创 线性探测哈希表实现
要删除的值,(说明前面发生了哈希冲突)继续往后找该元素,若找到,修改状态为STATE_DEL,若遍历至STATE_UNUSE,则元素不存在。=要查询的值,(说明前面发生了哈希冲突)继续往后找该元素,直至遇到STATE_UNUSE(元素不存在)或STATE_DEL(元素已被删除)若该位置被占用,从当前位置向后遍历找空闲位置插入。若该值==要删除的值(key),修改状态为STATE_DEL.3、查询:通过哈希函数计算数据存放的位置,从该位置取值(先判断状态)若该值==要查询的值(key),找到了。
2025-09-28 17:17:06
157
原创 基数排序(桶排序)
2、依次由个位开始处理,把相应位数上的数字放入相应的桶里面,完成后再按照桶的序号依次取出桶里面的数据放回原数组中。1、找出最长的数字,确认要处理的桶排序趟数(位数)。3、处理完所有位数得到有序的序列。
2025-09-10 17:11:34
342
原创 高级排序(堆排序)
堆排序在于首先将一个数组利用二叉堆的逻辑思维整理,将数组数据堪称一个二叉堆,利用下沉操作将二叉堆变为一个大根堆。再将大根堆从最后一个非子叶节点开始,把堆顶元素与末尾元素互换位置,再进行下沉操作获取到堆顶元素(最大元素),此过程不再考虑上一轮循环所得到的最大元素。以此类推,最后将得到一个从小到达的数组。时间复杂度(平均时间复杂度,最好、最坏时间复杂度):O(logn*n)测试结果:2 3 5 6 7 8 9 11 12。测试数据:12 5 2 8 9 3 7 11 6。空间复杂度:O(1)
2025-09-09 11:31:42
141
原创 基于堆的优先级队列(二叉堆)
if (child + 1 < size_ && comp_(que_[child+1],que_[child]) ){//存在右孩子且右孩子大于左孩子。if (comp_(val,que_[father])) {//当前节点比父节点值大。while (i <= size_/2-1) {//最多下沉不能超过最后一个有孩子的节点。int pop() {//删除堆顶元素,将堆尾元素放置堆顶在进行下沉。while (i > 0) {//最多计算到根节点。
2025-09-08 17:24:54
296
原创 高级排序(归并排序)
while (i <= m && j <= r) {//i为第一段首元素,j为第二段首元素,比较两个元素大小进行排序。递的过程利用二分法取有效基准数将数组分为[begin,mid],[mid+1,end]两个区间,分别进行递的操作。//[begin,mid],[mid+1,end]把两个小段有序的序列合并成大段。//再把合并好的大段有序的结果,拷贝到原始arr数组[l,r]区间内。//开辟额外的空间将两小段有序的序列合并成大段。最坏时间复杂度:O(n*logn)//归并排序递归接口。空间复杂度:O(n)
2025-09-05 11:57:21
405
原创 高级排序(快速排序)
/优化2:三数取中法:找合适的基准数,保持二叉树平衡 arr[l],arr[r],arr[(l+r)/2],选数值大小在中间的数作为基准数。while (l<r && arr[r] > val) {//l<r避免首元素为最小元素时将自身再和自身比较。//在[begin,end]区间的元素做一次快排分割,方便对基准数左右分别处理。//找基准数右边小于基准数的元素。//当右边的元素一直大于基准数时。//找基准数左边大于基准数的元素。//找到小于基准数的元素。//l=r的位置放基准数。//对基准数右边用快排。
2025-09-04 17:22:33
524
原创 基础排序(冒泡、选择、插入、希尔)
j++) {//j<size-1是因为j只需要取到倒数第二个元素,实际比较的就是j和j+1,i++) {//趟数:假设第一个为有序,从第二个元素开始比较。j++) {//每比完一轮从i下一个位置开始比。//j-1-i是因为每次处理的元素的个数都比上一趟少一,也就是比第一次少i个元素。i++){//趟数 size-1:最后一趟不用比较。j--) {//从右向左比较。
2025-09-03 11:54:20
828
原创 二分搜索(非递归以及递归实现)
int Binryserch(int arr[], int i, int j, int val) {//数组,起始下标,末尾下标,搜索的对象,返回搜到对象的下标。2、一定要弄清楚递归函数的意义(返回值,参数,函数功能)return -1;//未搜到,函数结束的条件。3、每个数据规模要写好他们之间的关系。1、一定要有递归结束的条件。//二分搜索非递归实现。//二分搜索递归实现。
2025-08-28 11:29:25
512
原创 用栈实现队列,用队列实现栈
新元素在s1中直接入队,需要执行pop和peek操作时,将s1中的元素出栈,全部导入s2中,直接从s2的栈顶实现pop和peek操作。实现思路:*q1记录存放新入栈元素栈的地址,*q2记录存储调整好的栈的地址.入栈操作q1直接push,若q2不为空则依次加入q1。这里分别使用两个栈实现队列Push()、Pop()、Peek()//返回队头、Empty()功能。这里分别使用两个队列实现栈Push()、Pop()、Top()、Empty()功能。//记录存放新入栈元素栈的地址。//记录存储调整好的栈的地址。
2025-08-27 11:56:30
593
原创 环形队列(动态数字实现和双向循环列表实现)
特性链表队列数组队列内存连续性不连续连续缓存性能差好扩容成本无高内存开销高(指针)低实现难度高低随机访问不支持支持内存碎片可能产生较少。
2025-08-26 12:01:08
777
原创 中缀表达式转逆波兰表达式
当当前符号优先级高时,当前符号直接入栈,当前符号优先级低时,栈顶符号出栈并输出,然后继续比较。// 输出: 246+2/+63/+cout << MiddleEndExpr("3+4*2/(1-5)") << endl;// 输出: 342*15-/+cout << MiddleEndExpr("(1+2)*(3+4)") << endl;else if (ch == '(') { // 左括号直接入栈。
2025-08-08 17:25:19
441
原创 c++栈 数据结构
/制定一个新的容器,大小是原来的两倍。}//将旧容器数据移动到新容器,利用c++11特性:std:move,避免不必要的深拷贝,提高性能。//顺序栈 c++容器适配器 stack=//入栈 把首元节点作为栈顶。//出栈(访问不到就是出栈。
2025-08-07 11:48:52
264
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅