数据结构
kdb_viewer
这个作者很懒,什么都没留下…
展开
-
《c++并发编程实战解析》 无锁数据结构 doubly-buffered-data
多线程环境设计数据结构相比单线程,需要额外注意的是利用多线程提升并发度同时保持数据结构不变性,即满足如下两个原则:1、正确性,保证多线程并发访问没有 data race2、性能,保护最小的数据,提供最大的性能《c++并发编程实战》提供了一种【无锁数据结构】,注意这里无锁的含义不是真正无锁,而是利用数据结构特性保证运行时并发抢锁的线程数量最小,达到一种常态下访问数据结构不被锁阻塞的状态使用场景:1、读远多于写2、数据小,一般最大为几K字节的元数据3、数据可以应用到一致性状态机,即b原创 2020-05-22 17:57:32 · 1112 阅读 · 0 评论 -
树(一)概述
树的时间界:大部分操作运行时间是O(logN),某些树每次操作最坏可能到O(N),但是具有O(logN)的摊还时间,如splay tree。树的图形特点:没有环路,就可以叫做树,否则只能叫做图树的一些概念:节点高度:从某个节点到一片树叶最长的路径的长节点深度:从某个节点到根的唯一路径的长树结构的编码:有两种常用表示方法,一种是儿子兄弟表示法,每个节点保存一个*first_child和*next_s...原创 2018-05-22 23:29:17 · 244 阅读 · 0 评论 -
树(二)二叉查找树
SearchTree每个节点被指定一个Key,这里假设Key是不同的(这一假设是合理的,在实际应用中,按照Key来存储不同的软件信息,若有相同Key可以增加一个引用计数字段)。SearchTree具有结构性和堆序性:结构性:二叉树堆序性:所有节点的左子树上所有节点的Key值比自身小,右子树上所有节点Key值比自身大头文件searchtree.h#ifndef _SEARCHTREE_H_#def...原创 2018-05-23 00:36:52 · 113 阅读 · 0 评论 -
树(三)AVL树
AVL树是对二叉查找树的改进,注意任何对二叉查找树的改进都必须保证树具有O(logN)的深度或摊还深度,若深度增加到O(N)级别,就和链表一样了,没有意义。AVL树保证了O(logN)深度的同时具有平衡性,是一种自平衡二叉查找树。AVL树平均高度大概是1.44logN + c,c是常数,是O(logN)级别。比二叉查找树增加的结构性:要求每个节点的左子树和右子树的高度相差最多为1,(为了方便N...原创 2018-09-19 23:46:10 · 881 阅读 · 0 评论