Eralng的常用数据结构
1.记录(record)
适用于小数据,并且用属性名方便查找
2.Key/Value 类型
a.属性列表
就是类似[{Key, Value}]的列表,可以通过proplists模块来处理这样的列表
当涉及到下面的操作的时候,proplists的性能要比lists还差
Bifs: keymember/3, keysearch/3, keyfind/3
b.有序字典 orddict
基于lists实现的有序字典,每个键只出现一次,并且插入会重新排序(也就是整个列表重新排序咯),还有一个是dict,一样的接口,但是dict判断是用=:=,orddict用==
当元素小于75个的时候,在复杂性和效率之间做了很好的平衡(不过谁用的时候还看是不是小于75个??)
c.散列字典 dict
dict是基于散列存储数据的,所以增删和查找的速度都很快,综合了数组和链表的优点,而且dict比orddict而言可以存储大数据。
d.平衡树gb_trees
根据《erlang趣学指南》字典的读取性能最好,GB树在其他方面的性能就更快一些,不过当需要排序的时候自然只能选择二叉树
总的选择顺序是:dict/gb_trees > lists > orddict
当然了,当数据量小的时候,只考虑方便使用和可读行好的结构,最后附上一张图

3.集合
a.ordsets 适用小数据,最慢的一种集合,同样基于lists实现的,这说明什么呢,如果我们自己要实现某种结构,没有算法支持少用lists做底层
b.sets 和dict相似,那么也支持大数据,也是读取性能比较好
c.gb_sets
The complexity on set operations is bounded by either O(|S|) or O(|T| * log(|S|)), where S is the largest given set, depending on which is fastest for any particular function call. For operating on sets of almost equal size, this implementation is about 3 times slower than using ordered-list sets directly. For sets of very different sizes, however, this solution can be arbitrarily much faster; in practical cases, often 10-100 times. This implementation is particularly suited for accumulating elements a few at a time, building up a large set (> 100-200 elements), and repeatedly testing for membership in the current set.
As with normal tree structures, lookup (membership testing), insertion, and deletion have logarithmic complexity.
官方文档,在生成集合操作的复杂度比ordset慢3倍,更适合一次插入100-200以上的情况,另外,查找,插入,删除都是对数复杂度。
d.sofs 用于处理集合和集合之间的关系
4.有向图
digraph digraph_utils
5.队列
queue采用两个list来实现,效率也很高,之前还被考过,有空看一下源码怎么写的==
参考:
http://blog.51cto.com/10lover10/1085470
https://www.jianshu.com/p/f0cb1806132d
Eralng的常用数据结构的更多相关文章
- JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
原文地址:http://www.cnblogs.com/gaochundong/p/data_structures_and_asymptotic_analysis.html 常用数据结构的时间复杂度 ...
- php常用数据结构
# 常用数据结构--------------------------------------------------------------------------------## 树(Tree)- ...
- Redis常用数据结构
Redis常用数据结构包括字符串(strings),列表(lists),哈希(hashes),集合(sets),有序集合(sorted sets). redis的key最大不能超过512M,可通过re ...
- Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)
Java中的集合包括三大类,它们是Set.List和Map, 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类. List.Set都继承自Collection接口 ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- 常用数据结构及算法C#/Java实现
常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) ,, , , , , , , , , }; //冒泡排序 int length = waitSort.Length; ...
- 图解Java常用数据结构(一)【转载】
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
- 图解Java常用数据结构(一)
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
随机推荐
- Scala之String
一.前言 大数据领域的Spark.Kafka.Summingbird等都是由Scala语言编写而成,相比Java而言,Scala更精炼.由于笔者从事大数据相关的工作,所以有必要好好学习Scala语言, ...
- Vijos-P1057题解
题目如下: https://www.vijos.org/p/1057 思路分析: 输入文件第一行为两个整数n,m(1<=n,m<=1000),接下来n行,每行m个数字,用空格隔开.0表示该 ...
- 初学HTML5,你要懂得哪些?
很多人问过我这个问题,想要做HTML5页面你要懂得哪些知识?而问这个问题的人基本上都是刚听说过或刚接触HTML5,处在迷茫的阶段,他们往往会被一些网上炫酷页面所吸引,然后自己也想学习HTML5,能通过 ...
- deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记
1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1383[Submit][Stat ...
- Gym 100952H&&2015 HIAST Collegiate Programming Contest H. Special Palindrome【dp预处理+矩阵快速幂/打表解法】
H. Special Palindrome time limit per test:1 second memory limit per test:64 megabytes input:standard ...
- hdu_5104 Primes Problem()
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5104 rimes Problem Time Limit: 2000/1000 MS (Java/Oth ...
- 跟我一起读postgresql源码(十二)——Executor(查询执行模块之——Materialization节点(下))
接前文,我们继续说剩下的4个Materialization节点. 7.SetOp节点 SetOp节点用于处理集合操作,对应于SQL语句中的EXCEPT.INTERSECT两种集合操作,至于另一种集合操 ...
- [国嵌攻略][174][CGI快速入门-网页控制LED]
CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...
- HDU 1232 畅通工程(模板——并查集)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出 ...