西维蜀黍

【Data Structure】图(Graph)- 图的物理存储

图的顺序存储方法 - 邻接矩阵(Adjacency Matrix)

使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)。

  • 如果只是存储图中包含的顶点,使用一维数组就足够了;
  • 然而,我们还需要存储顶点之间的关系,因此要记录每个顶点和其它所有顶点之间的关系,所以需要使用二维数组。

这个二维数组称为邻接矩阵(Adjacency Matrix)


不同类型的图,存储的方式略有不同,根据图有无权,可以将图划分为两大类:

图,包括无向图有向图,是指带权的图,包括无向网有向网


存储方式的不同,指的是:在使用二维数组存储图中顶点之间的关系时,如果顶点之间存在边或弧,在相应位置用 1 表示,反之用 0 表示;如果使用二维数组存储网中顶点之间的关系,顶点之间如果有边或者弧的存在,在数组的相应位置存储其权值;反之用 0 表示。

无向图

我们来看一个无向图的实例,下图的左图就是一个无向图:

对于无向图来说,二维数组构成的邻接矩阵,实际上是对称矩阵。因此,在存储时就可以采用压缩存储的方式存储下三角或者上三角。

通过二阶矩阵,可以直观地计算出各个顶点的度,为该行(或该列)非 0 值的和。例如,第一行有两个 1,说明 V1 有两个边,所以度为 2。

有向图

我们再来看一个有向图的样例,如下图所示的左图:

例如,arcs[0][1] = 1 ,证明从 V1 到 V2 有弧存在。且通过邻接矩阵,可以很轻松得知各顶点的出度和入度,出度为该行非 0 值的和,入度为该列非 0 值的和。例如,V1 的出度为 2 (因为第二行中有两个 1 ),为 2 ; V1 的入度为 1 (第二列中只有一个 1 )。

  ...


【Data Structure】图(Graph) - 图的深度优先搜索(Depth First Search)

  ...


【Data Structure】Tries树(字典树)

Trie树

Trie树,又叫字典树前缀树(Prefix Tree)单词查找树键树,是一种多叉树(k-ary search tree)结构。如下图:

  ...


【Database】索引(Index)

索引(Index)

A database index is a data structure that improves the speed of data retrieval operations on a database table at the cost of additional writes and storage space to maintain the index data structure. Indexes are used to quickly locate data without having to search every row in a database table every time a database table is accessed. Indexes can be created using one or more columns of a database table, providing the basis for both rapid random lookups and efficient access of ordered records.

  ...


【Database】索引 - B 树和 B+ 树

背景

  • Binary tree:二叉树(Binary tree),每个节点只能存储一个key
  • B-tree:B树(B-Tree,并不是B“减”树,横杠为连接符,容易被误导)
    • B树属于多叉树,同时也属于平衡多路查找树。每个节点可以包含多个key(包含多少个由磁盘的页的大小决定)。
    • B+tree(B+树)B*tree(B*树) 都是 B-tree 的变种
  ...