数据结构与算法的实现 —— 结点定义与数据结构的选择
2016-09-02 10:58
246 查看
汽车的等候 ⇒ 队列
具有某一优先级顺序的序列 ⇒ 优先队列;
二叉树
比如在对使用( Kruskal 或 Prim)算法得到的最小生成树进行表示时,其实是把最小生成树(MST)当做一些列边的集合,进行存储。对于边而言,具有三个属性,分别是起点 vi 和终点 vj,以及边上的信息比如权值 w。也即最小生成树是边的集合,而边的形式是 ((vi,vj),w);
Kruskal 算法
使用一维数组为每一个连通分量确定一个代表元,
连通分量与唯一的代表元对应,或者说连通分量交由代表元表示;
Prim 算法:
将从已访问过的结点 U,到未访问过的结点 V−U,之间的边放入优先队列(小顶堆实现),每次都选择权值最小的;
因为每次都要从结点中选出权值最小的两个结点,
选择使用优先队列(小顶堆),弹出两次
这样的重载了基本简单运算符重载的键值对(key-value pair)词条类有什么意义呢,就是有些特定问题下用到的特殊数据结构内部存储的未必是基本数据类型(比如 int、float 等可比较数据类型),而也可能存储的是一些较为复杂的键值对、结构体或者其他自定义的类。当存储在优先队列(大/小顶堆)或者二叉搜索树等数据结构时,需要这些复杂的元素支持比较特定的比较运算符。
具有某一优先级顺序的序列 ⇒ 优先队列;
0. 常见命名规范(naming conventions)
向量:typedef int Rank; ⇒ Rank 用以标识结点的位置; // 当然也可以使用索引 typedef unsigned int Index;
二叉树
#define BinNodePosi(T) BinNode<T>* ⇒ BinNodePosi(T) 二叉树结点
1. 图
最小生成树(MST),比如在对使用( Kruskal 或 Prim)算法得到的最小生成树进行表示时,其实是把最小生成树(MST)当做一些列边的集合,进行存储。对于边而言,具有三个属性,分别是起点 vi 和终点 vj,以及边上的信息比如权值 w。也即最小生成树是边的集合,而边的形式是 ((vi,vj),w);
Kruskal 算法
reps = range(vnum)
使用一维数组为每一个连通分量确定一个代表元,
连通分量与唯一的代表元对应,或者说连通分量交由代表元表示;
Prim 算法:
将从已访问过的结点 U,到未访问过的结点 V−U,之间的边放入优先队列(小顶堆实现),每次都选择权值最小的;
2. 树
哈弗曼树因为每次都要从结点中选出权值最小的两个结点,
选择使用优先队列(小顶堆),弹出两次
3. 优先队列
优先队列中的元素必须是可比较大小(未必是简单的值的大小,而是由问题决定的某一优先准则)的;4. 自定义的结点
template <typename K, typename V> struct Entry{ K key; V value; Entry(K k = K(), V v = V()) :key(k), value(v){} Entry(const Entry<K, V>& e) :key(e.key), value(e.value){} bool operator<(const Entry<K, V>& e) { return key < e.key; } bool operator>(const Entry<K, V>& e) { return key > e.key; } bool operator==(const Entry<K, V>& e) { return key == e.key; } bool operator!=(const Entry<K, V>& e) { return key != e.key; } };
这样的重载了基本简单运算符重载的键值对(key-value pair)词条类有什么意义呢,就是有些特定问题下用到的特殊数据结构内部存储的未必是基本数据类型(比如 int、float 等可比较数据类型),而也可能存储的是一些较为复杂的键值对、结构体或者其他自定义的类。当存储在优先队列(大/小顶堆)或者二叉搜索树等数据结构时,需要这些复杂的元素支持比较特定的比较运算符。
相关文章推荐
- 数据结构与算法分析 阅读笔记一
- <数据结构与算法> 学习记录
- 浅谈Java中常用数据结构的实现类 Collection和Map
- 数据结构-顺序表(C语言)
- [LeetCode 84, 85]Largest Rectangle in Histogram / Maximal Rectangle
- 哈希表——基本概念
- 一个lua版的zset数据结构实现
- 数据结构作业——N个数中未出现的最小整数(想法题)
- 数据结构作业——N个数中未出现的最小整数(想法题)
- 数据结构之链表:实现单链表的k逆序(2)
- 数据结构之链表:实现单链表的逆序 (1)
- 数制转换
- 一元多项式
- 高校社团助手
- 数据结构——快速排序
- 表达式求值
- HDU 5444 二叉树的遍历,先根据先序遍历建树
- 【数据结构】数据的存储结构
- redis中5种数据结构的使用
- 数据结构C语言实现之链式队列的6种算法代码