- 博客(6)
- 收藏
- 关注
原创 懒驱字典堆(lztrieap):一个支持检索功能的小(大)顶堆
懒驱字典堆拥有小(大)顶堆所具有的快速获取最大最小值的特性,也具有字典树所具有的快速检索的能力,能实现热度排序等功能。
2023-03-09 14:37:54
103
原创 基于二叉平衡树的懒驱树
上一节中介绍了懒树,考虑到便于理解,因此提取了两个规则修改了名称为“懒驱树”。之前基于一个类似radix的树构建了懒驱树,这次基于二叉平衡树来构建一棵懒驱树。先假设有一棵这样的树:当然,图中其中有些式子是可以化简的,这里不化简是为了能够更直观的看出节点之间的关系。为了方便后续说明,现在这棵树里看到的这些值,姑且先给它们一个名称,叫做“假值”。值在插入时,先和节点中的“假值”进行比较。若等于则说明来到了对应的节点,若小于则下一步向左,若大于则下一步向右。驱赶规则这样定义:当值来到对应的节.
2021-12-20 09:28:45
142
原创 假想树(或懒树)——一种空间消耗与红黑树相同,但插入、删除和查找的速度更快的树
随着人工智能和大数据的快速发展,程序处理的数据量正在变得越来越大,迫切地需要一种能够快速查找的数据结构。目前能够实现快速查找的数据结构中,最主流的有平衡查找树(常用的是红黑树)、多路查找树和哈希表。本文中提出了一种全新的数据结构,根据其特点,暂且将之命名为“假想树”。经过实际测试,假想树拥有比红黑树更快的插入、删除和查找速度,且空间占用与红黑树基本一致。在文章的末尾会附上代码。1.假想树的基本概念1.1.如何构建一棵假想树?要构建一棵假想树,过程为以下几步(小顶堆、大顶堆或平衡二叉树都可以用
2020-10-20 11:17:53
2356
2
原创 通知响应线程(消息线程)实现
这里将要实现的是一个通知响应的线程,当我们传入一个函数并设置了参数后,线程就会收到通知,并去执行这个函数。若我们没有传入任何函数,则该线程会始终处于挂起状态;若我们连续传入了多个函数,则所有函数会按照传入顺序在该线程中依次执行。这里主要涉及的是两个个问题:1.线程同步;2.函数和参数的保存和传递。这两个问题,我们可以用之前已经实现了的工具parameters和queue_semaphore来解决。...
2018-05-11 09:50:05
1265
原创 c++参数包的实现
在开发过程中,在写一些回调函数的过程中,常常希望参数是不确定、可变的,这个时候我就希望能有一个参数包,各种参数都可以塞到参数包里面,然后将该参数包作为一个参数。之前一直使用tuple或结构体指针来实现该功能,但这两者在使用过程中还是有些不方便,于是就想自己写一个参数包的类。在boost库中有一个any类型,可作为参数包中参数的载体,可自行从boost中摘抄过来。我这边也提供一份代码:#ifndef...
2018-04-25 10:20:25
1173
原创 基于c++11的信号量(携带数据)
在多线程工作中,线程同步是绕不过的一个问题。线程同步的方式主要有互斥量、临界区、原子操作等,本文主要研究信号量在线程同步中的作用。信号量的实质是一把数据锁,本身并不具备数据传递的功能。但我在实际使用中,常常会需要在发送一个通知的同时,传递数据给线程,因此就希望能让信号量拥有数据传递的能力。1. condition_variable和mutexc++11中,本身便提供了很方便的信号量实现方案,即利用...
2018-04-20 13:55:59
3027
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人