文章列表
disjointSet
# 简介
并查集是计算机中的集合算法。不同集合间无交集,可用于解决元素分组问题。
在每个集合中指定一个代表元素,代表该集合。
该算法有两种基本操作:
合并(Union) 把两个不相交的集合合并成一个集合
查询(Find) 查询两个元素是否在同一个集合中。
利用树构成一个集合。递归查询节点的父节点便可获得根节点。
# 实现
设立一个数组,储存每个元素的父元素。
如第 1 个节点的父节点为 fa[1]
# 优化
# 路径压缩
合并集合时,每个节点只储存根节点。即,树的深度为 2。
# 秩的压缩
more...graph
# 路径
# 最小路
# Dijkstra
步骤
初始化,寻找起始点 s 到各点距离的最小值。以及最小值对应点 u
查找,利用中间点 k,寻找 u 到终点 v 的最短路劲 (u,v) 。 if (matrix[start][u] +matrix[u][k] < matrix[start][k]) matrix[start][k]=matrix[start][u]+matrix[u][k]
# 最小生成树
# Kruskal 算法
加边法。
将所有边按权重排序,从小到大。
从小到大选择边,将两个节点合并为一个节点。
重复 2,直到只剩一个节点或达到 n-1 条边为止。
#
more...ioFile介绍
# 简介
IO_FILE 是描述 IO 的文件结构体,相关源码来自 libio/libioP.h 文件中。
IO_FILE 结构:在执行 fopen 等函数时创建。不同 IO_FILE 以链表形式串接起来。
# _IO_list_all 变量
_IO_list_all 变量:指向链表头部。默认链如下。
_IO_list_all - stderr -> stdout -> stdin# 三文件流
存在以下三种符号,指向他们对应的 file 结构。
其存放在 libc.so 中。
_IO_2_1_stderr_
_IO_2_1_stdout_
_IO_2_1_stdi
more...