![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGuass
文章平均质量分 95
霁月风
这个作者很懒,什么都没留下…
展开
-
OpenGuass源码中对bipartite_match.h的分析
二分图匹配是图论中的一个重要问题,它通常涉及到一个包含两组节点的图,其中一组节点表示为 U,另一组节点表示为 V。二分图匹配的目标是找到一种配对方式,使得没有节点同时与两组中的不同节点相连,而且匹配的边数最大化。定义每个节点最多与一个边相连。没有节点与两个不同的边相连。目标是找到一个最大基数匹配,即包含最多边的匹配。应用社交网络中的好友匹配。任务分配和资源调度问题。婚姻稳定性问题,如稳定婚姻匹配。传输网络中的流量分配。计算机视觉中的特征点匹配。Dilworth 定理。原创 2023-10-16 11:49:16 · 79 阅读 · 1 评论 -
OpenGuass源码中对circularqueue.cpp的分析
循环队列在数据库系统如OpenGauss中有多种应用,通常用于提高性能、优化资源管理以及处理特定的任务。日志管理:OpenGauss需要记录各种数据库操作和事件的日志信息,包括事务日志和错误日志。循环队列可以用于管理这些日志,确保新的日志消息可以按照顺序写入,并在空间不足时覆盖旧的日志。查询请求队列:对于并发的查询请求,OpenGauss可以使用循环队列来管理它们的排队和执行顺序。这有助于限制同时执行的查询数量,以避免服务器超负荷。内存池管理:OpenGauss可能使用循环队列来管理内存分配和释放。原创 2023-10-16 11:41:48 · 73 阅读 · 1 评论 -
OpenGuass源码中对circularqueue.h的分析
循环队列(Circular Queue)是一种队列(Queue)的数据结构,与普通队列不同之处在于它具有环形结构,允许在队列满时重用之前出队的位置。环形结构:循环队列使用一个数组或链表来存储元素,并且队列的前后端都有指针。当队列满时,新元素会从队列的头部重新开始插入,形成一个环。指针:循环队列通常包括两个指针,即front和rear,分别指向队列的前端和后端。这些指针帮助确定队列的状态和位置。入队操作:将元素插入循环队列时,将元素放置在rear指针所指的位置,并将rear指针向后移动。原创 2023-10-16 11:40:43 · 61 阅读 · 1 评论 -
OpenGuass源码中对于binaryheap.cpp的分析
在C++中,其实封装好了二叉堆的实现,而且是以priority_queue的形式。C++的priority_queue是STL中的一个容器,它是一个优先队列,允许我们在队列的任意位置插入元素,并按照元素的优先级顺序自动排序,队列中的元素总是按照优先级从高到低排序,即越“重要”的元素越靠前,越容易被取出。priority_queue在头文件中,是一个模板类,使用时需要注意元素类型和比较规则(默认是小于号“原创 2023-10-15 16:17:33 · 51 阅读 · 1 评论 -
OpenGuass源码中对diilist.cpp的分析
return ret;注:在多线程编程中,当多个线程同时访问共享资源时,可能会发生竞争条件(Race Condition),即多个线程尝试同时修改共享资源,导致不确定的行为或数据不一致性。为了避免竞争条件,可以使用临界区来保护共享资源,以确保在任何给定时间只有一个线程能够访问或修改它。是一个通常用于数据库系统或其他多线程应用程序中的宏或函数。它的作用是创建一个临界区,以确保在多线程环境下的某段代码块执行期间不会被中断。而用于结束临界区。原创 2023-09-09 21:08:15 · 72 阅读 · 1 评论 -
OpenGuass源码中对dllist.h的分析
双向链表(Doubly Linked List)是一种常见的线性数据结构,与普通链表(单向链表)相似,但每个节点除了指向下一个节点外,还指向前一个节点,因此可以在两个方向上遍历链表。双向链表是一种灵活的数据结构,可以在两个方向上遍历,适用于需要频繁插入和删除节点的场景。然而,由于额外的指针开销,它可能占用更多的内存。在选择数据结构时,需要根据具体的需求来权衡其优势和劣势。的线性数据结构,与普通链表(单向链表)相似,但每个节点除了指向下一个节点外,还指向前一个节点,因此可以在两个方向上遍历链表。原创 2023-09-09 21:06:54 · 107 阅读 · 1 评论 -
OpenGuass源码中对于binaryheap.h的分析
二叉堆通常用于实现优先队列等数据结构,因为它支持高效的插入(insert)和删除(extract)操作。在最大堆中,插入操作会将新元素插入到堆的合适位置,然后通过一系列的"上浮"操作来维护堆的性质。删除操作通常是移除根节点,将最后一个元素移到根节点位置,然后通过一系列的"下沉"操作来重新构建堆。在算法和数据结构中,二叉堆是一个重要的基本工具,它具有高效的时间复杂度,如插入和删除操作的时间复杂度为 O(log n),其中 n 是堆中元素的数量。这使得它成为许多算法和数据处理场景中的有用工具。原创 2023-09-09 21:05:20 · 53 阅读 · 1 评论