
数据结构与算法
服务端开发
这个作者很懒,什么都没留下…
展开
-
数据结构-树(一):树的设计初衷与二叉树的前序、中序、后序遍历(递归与循环两种版本)
树的设计初衷操作时间复杂度树这种数据结构的出现主要是对链表数据结构的优化,链表数据结构是线性结构,操作一般需要O(N)的时间复杂度,树是链表的变形,即链表的每个节点包含一个节点,而树的节点可以包含多个节点,如二叉树为根节点,左节点,右节点三个字节组成一个大节点,所以相对链表来说,相同的节点个数由于这种大节点的存在,故长度变小了,每次可以获取更多个子节点的信息,操作时间复杂度也减小了,如二叉树...原创 2019-03-30 14:43:36 · 3753 阅读 · 0 评论 -
数据结构-树(二):平衡树AVL树
设计初衷树主要是链表数据结构的变形,目的是实现各种操作的O(logN)时间复杂度,从而优化链表的O(N)时间复杂度。对于二叉查找树来说,对于每个节点,左子树的值均小于该节点的值,右节点的值均大于该节点值。故当数据分布不均匀时,可能会导致所有节点都在根节点的左子树或者右子树,从而退化回了链表,造成性能问题。所以为了解决这个问题,AVL树通过对树节点的旋转操作,保证每个节点的左右子树高度差最大...原创 2019-03-30 21:17:19 · 2336 阅读 · 0 评论 -
数据结构-树(三):多路搜索树B树、B+树
多路搜索树完全二叉树高度:O(log2N),其中2为对数完全M路搜索树的高度:O(logmN),其中M为对数,树每层的节点数所以每层的节点数越多,则树的高度越矮。M路搜索树主要用于解决数据量大无法全部加载到内存的数据存储。通过增加每层节点的个数和在每个节点存放更多的数据来在一层中存放更多的数据,从而降低树的高度,在数据加载时减少磁盘访问次数。B树B树是一种M路搜索树,B树主要用于...原创 2019-03-31 16:23:15 · 3192 阅读 · 0 评论 -
基于双向链表和哈希表(开放地址)实现LRU缓存
一、设计思路1. 数据存储数据存储使用开放地址哈希表,而不是使用链表哈希的方式,从而保证存放最多指定容量的数据。如果发生冲突,则往下查找直到找到一个空位置。对应的数据结构层面,则是使用数组,更确切地说是环形数组,因为当发生冲突时,需要查找除了直接通过 key % 容量capacity 取模之外的所有其他位置一遍,直到找到一个可以存放该键值对的位置。对于数据获取,也是类似的思路。2. LRU特性实现仿照Java的linkedhashmap来维护一个双向链表,每次访问一个节点或者新增一个节点则原创 2020-05-16 14:04:41 · 1327 阅读 · 0 评论