
正文
go语言数据结构和算法库 go语言的数据库
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Golang数据结构与算法全能战士
今天给大家推荐是由Social Explorer团队开源go语言数据结构和算法库的gods框架,自称"上帝",听这个名字就很霸气,正确的解释是GoDS(Go Data Structures),是数据结构与算法相关的框架。
全能战士,该框架覆盖了数据结构与算法里,大部分容器、集合类的实现, 比golang 的标准开发包提供更丰富的数据结构。
在Go中实现各种数据结构和算法。
吸取了其他算法库数十年的知识和经验。
通过针对给定的一组问题使用最佳算法和数据结构来避免消耗内存,例如, 在TreeMap的情况下,红黑树避免在内存中保留冗余排序的键数组。
结构良好的库,具有简单的原子操作集,胜任复杂的数据操作。
保持库向后兼容
可参考的例子非常多
可以方便集成到产品中.
没有额外的导入.当实现算法的时候,go语言数据结构和算法库我们通常要在时间效率与内存消耗之间权衡,go语言数据结构和算法库我们选择在内存首先的情况下,不断优化得到最好的时间效率;线程安全不是重点,应该在更高的应用层上处理。
囊括了列表,栈,图,树等基本数据结构 ,集合实现了HashSet, TreeSet, LinkedHashSet,列表实现ArrayList, SinglyLinkedList, DoublyLinkedList,对栈实现LinkedListStack, ArrayStack,图实现了HashMap, TreeMap, HashBidiMap, TreeBidiMap, LinkedHashMap,树实现了RedBlackTree, AVLTree, BTree,BinaryHeap,都经过性能测试的考验,值得信赖。
对于Golang开发而言,gods对底层数据结构做很好的封装,Social Explorer团队在数据处理领域,数据可视化领域有极具竞争力的产品,相信在数据处理领域有很深的积淀,才创造这么优秀的框架,由于篇幅限制,相关图片展示效果不好,感兴趣的上官网去看看。
官网:
GitHub
希望大家能从emirpasic/gods学到有价值的东西。
愿我们在Go 语言的学习之路上 从此结伴而行
相关问答
Q1: GO数据库介绍(转载)
类似于语义网络。是为了生物界有一个统一的数据交流语言。 因为在生物学界,存在在种种同名异义、异议同名的现象。为此产生了GO项目。
GO是用一套统一的词汇表来描述生物学中的分子功能、生物过程和细胞成分。其思想大概过程:对于一个基因产品(蛋白质或RNA),用某些词汇来描述它是干什么的或位于细胞哪里、或者参与了哪个生物过程,而这些词汇就是来自GO的Term。
(1)提供生物学功能(术语)的逻辑结构及其相互之间的关系,表现为有向无环图
(2)给特定的基因产物(蛋白质,非编码RNA或大分子复合体,简称为'基因')起一个特定的名字(唯一标识该基因)
Gene Ontology(GO)中最基本的概念是term。GO里面的每一个entry都有一个唯一的数字标记,形如GO:nnnnnnn,还有一个term名,比如"cell", "fibroblast growth factor receptor binding",或者"signal transduction"。每个term都属于一个ontology,总共有三个ontology,它们分别是
细胞成分:细胞的部分或其细胞外环境;
分子功能:基因产物在分子水平上的元素活性,例如结合或催化;
生物过程:具有确定开始和结束的分子事件的操作或集合,与综合生活单元的功能有关
理由一:
在基因表达谱分析中,GO常用于提供基因功能分类标签和基因功能研究的背景知识。利用GO的知识体系和结构特点,旨在发掘与基因差异表达现象关联的单个特征基因功能类或多个特征功能类的组合。
根据GO的知识体系,使用“功能类”(或者叫做“功能模块”)这一概念具有以下优点:我们认为,单个基因的表达情况的改变不足以反映特定功能/通路的整体变化情况。因为类似人类社会的组织结构,生物体的功能的实现决不仅仅是依靠一两个基因功能的改变来实现的。因此过分着重单个基因表达变化,将会在后期结果处理中严重干扰对于结果的合理分析,导致偏倚性加大,而且是无法避免的。因此利用GO的结构体系,把参与同样功能/通路的基因进行“功能类”层面的抽象和整合,提供比基因更高一层次的抽象结论,对理解疾病的发病机制或药物的作用机理等更有帮助。
但是该方法也存在一定的不足,由于生物体内部的调控网络可能具有“scale-free network”的特点,个别功能重要的基因(主效基因)具有“Hub节点”的重要特性,它的功能改变可能对于整个网络来说是至关重要的,在这点上,这些重要的基因又具有一定的“自私独裁”特点。而“功能类”之观点模糊了这种差别特性,过于强调“共性”,而忽视了“个性”,这也是“功能类”的一个不足之处,这就需要结合相关的生物学知识才能够实现
理由二:
GO(gene ontology)对大家而言也许会是一个相对陌生的名词,但是它已经成为生物信息领域中一个极为重要的方法和工具,并正在逐步改变着我们对 biological data的组织和理解方式,它的存在已经大大加快了我们对所拥有的生物数据的整合和利用,我们应该逐步学会理解和掌握这种思想和工具。
众所周知,sequence based biology中的核心内容即是对序列的Annotation(注释),其中主要包含structural annotation和functional annotation,前者涉及分析sequence在genome中的locus以及exon,intron,promoter等的location,而后者则是推断序列编码产物的功能
随着多种生物genome的相继解码,同时大量ESTs以及gene expression profile date的积累,使得annotation的工作量和复杂度大大增加。然而另一方面,大多数基因在不同真核生物中拥有共同的主要生物功能,通过在某些物种中获得的基因或者蛋白质(shared protein)的生物学信息,可以用以解释其他物种中对应的基因或蛋白(especially in comparative genomics)。由于这些繁复的功能信息主要是包含在积累的文献之中,如何有效的提取和综合这些信息就是我们面临的核心困难,这也是GO所要着力解决的问题。通过建立一套具有动态形式的控制字集(controlled vocabulary),来解释真核基因及蛋白在细胞内所扮演的角色,并随着生命科学研究的进步,不断积累和更新。一个ontology会被一个控制字集来描述并给予一定的名称,通过制定“本体”ontologies并运用统计学方法及自然语言处理技术,可以实现知识管理的专家系统控制
总结:
Gene Ontology(GO)包含了基因参与的生物过程,所处的细胞位置,发挥的分子功能三方面功能信息,并将概念粗细不同的功能概念组织成DAG(有向无环图)的结构。
Gene Ontology是一个使用有控制的词汇表和严格定义的概念关系,以有向无环图的形式统一表示各物种的基因功能分类体系,从而较全面地概括了基因的功能信息,纠正了传统功能分类体系中常见的维度混淆问题。
在基因表达谱分析中,GO常用于提供基因功能分类标签和基因功能研究的背景知识。利用GO的知识体系和结构特点,旨在发掘与基因差异表达现象关联的单个特征基因功能类或多个特征功能类的组合。
原文:
Q2: Go数据结构篇
1、基本数据类型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for int8
rune // alias for int32,represents a Unicode code point
float32 float64
complex64 complex128
常量定义
2、类型转换
(1)Go语言不允许隐式类型转换(不支持小位数类型向大位数类型转)
(2)别名和原有类型也不能进行隐式类型转换(type MyInt int64 = int64)
3、类型的预定义值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUInt32
4、指针类型
(1)不支持指针运算
(2)string是值类型,其默认的初始化值为空字符串,而不是nil
5、算术运算符
+ - * / % ++ --(不支持前置++ --)
6、比较运算符
#== != = =
(1)比较数组
相同维数且含有形同个数元素的数组才可以比较
每个元素都相同的才相等
7、位运算符
| ^
^ (按位置零) a (^b)
1 ^ 0 1
1 ^ 1 0
0 ^ 1 0
0 ^ 0 0
8、条件与循环
(1)循环
Go 语⾔仅⽀持循环关键字 for
(2)条件
9、数组和切片
数组截取,索引下标从0开始计数
a[开始索引(包含), 结束索引(不包含)]
a := [...]int{1, 2, 3, 4, 5}
a[1:2] //2
a[1:3] //2,3
a[1:len(a)] //2,3,4,5
a[1:] //2,3,4,5
a[:3] //1,2,3
切片内部结构
9、Map
9、字符串
Unicode UTF8
常⽤字符串函数
关于go语言数据结构和算法库和go语言的数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







