[2017/08/22]高性能C/C++编程中的那些数据结构

本文探讨了在高性能C/C++编程中,哈希表、红黑树和跳表等数据结构的优缺点。哈希表在理论上有O(1)的查找效率,但在冲突和扩容问题上存在挑战。红黑树和跳表在解决冲突方面优于哈希表,但它们需要额外的空间,并且红黑树在并发性能上不如跳表。有序数组配合二分查找在特定场景下可以提供更高的缓存命中率,因此在查找效率上可能优于其他数据结构。
摘要由CSDN通过智能技术生成

本文首发于腾讯KM,如转载请注明作者,出处。

偶然在k吧首页看到了luckyzuo的分享,因为自己一直对这方面很感兴趣,所以在工作之余对照ppt听了讲座录音,受益匪浅。这次分享提到了几种数据结构,我结合了自己的一些理解,写了这篇文章。写的时候查阅了许多资料,越发认识到自己基础知识的薄弱(还是要学习一个)。由于水平有限,若有错误,请各位指正。

目录:

一. 哈希表的弱点

1.1 hash的硬伤

  1.1.1 没有通适的高效hash函数

  1.1.2 容易存在冲突

  1.1.3 预估容量困难,存储数据量增多导致冲突加剧,扩容的话需要对已保存元素做rehash

1.2 一些弥补:动态多阶哈希

二. 红黑树 VS skip list

2.1 介绍

  2.1.1 红黑树概述

  2.1.2 skip list概述

2.2 高并发友好:红黑树 || skip list?

  2.2.1 什么样的数据结构才是高并发友好的?

  2.2.2 链表——高并发友好的数据结构

  2.2.3 红黑树——牵一发而动全身

2.3 一些缺点:红黑树 & skip list :

三.缓存友好的CP :有序数组+二分查找

3.1 使用场景

3.2 缓存命中率的那些事儿

  3.2.1 缓存不命中的时间处罚

  3.2.2 CPU预取与缓存命中率

  3.2.3 缓存命中率:线性结构 VS 非线性结构

3.3 缓存友好的CP :有序数组+二分查找


谈到高性能,选择合理的数据结构总是必要的。这次分享中提到了这几种数据结构:①AVL树,红黑树; ③skip list(跳表) ②Hash表 ④有序数组。下面我将结合自己的理解,谈一谈这几种数据结构。

一. 哈希表的弱点

谈到快速查找,必须要提到的数据结构就是哈希表。它以理论上O(1)的时间复杂度横扫四海八荒无敌手。分享中抛出了一个经验性的结论,就是在数据量很大(百万以上)的情况下,哈希表比AVL树的查找效率更高。hash的好处我就不多说了,主要总结一下分享中提到的三处hash的硬伤:

1.1 hash的硬伤

1.1.1 没有通适的高效hash函数
对于不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值