博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法的实现 —— 结点定义与数据结构的选择
阅读量:4965 次
发布时间:2019-06-12

本文共 1385 字,大约阅读时间需要 4 分钟。

  • 汽车的等候 ⇒ 队列
  • 具有某一优先级顺序的序列 ⇒ 优先队列;

0. 常见命名规范(naming conventions)

  • 向量:

    typedef int Rank;       ⇒ Rank 用以标识结点的位置;// 当然也可以使用索引typedef unsigned int Index;
  • 二叉树

    #define BinNodePosi(T) BinNode
    * ⇒ BinNodePosi(T) 二叉树结点

1. 图

  • 最小生成树(MST),

    比如在对使用( Kruskal 或 Prim)算法得到的最小生成树进行表示时,其实是把最小生成树(MST)当做一些列边的集合,进行存储。对于边而言,具有三个属性,分别是起点 vi 和终点 vj,以及边上的信息比如权值 w。也即最小生成树是边的集合,而边的形式是 ((vi,vj),w)

  • Kruskal 算法

    reps = range(vnum)

    使用一维数组为每一个连通分量确定一个代表元,

    连通分量与唯一的代表元对应,或者说连通分量交由代表元表示;

  • Prim 算法:

    将从已访问过的结点 U,到未访问过的结点 VU,之间的边放入优先队列(小顶堆实现),每次都选择权值最小的;

2. 树

  • 哈弗曼树
    • 因为每次都要从结点中选出权值最小的两个结点,
      • 选择使用优先队列(小顶堆),弹出两次

3. 优先队列

优先队列中的元素必须是可比较大小(未必是简单的值的大小,而是由问题决定的某一优先准则)的;

4. 自定义的结点

template 
struct Entry{ K key; V value; Entry(K k = K(), V v = V()) :key(k), value(v){} Entry(const Entry
& e) :key(e.key), value(e.value){} bool operator<(const Entry
& e) { return key < e.key; } bool operator>(const Entry
& e) { return key > e.key; } bool operator==(const Entry
& e) { return key == e.key; } bool operator!=(const Entry
& e) { return key != e.key; }};

这样的重载了基本简单运算符重载的键值对(key-value pair)词条类有什么意义呢,就是有些特定问题下用到的特殊数据结构内部存储的未必是基本数据类型(比如 int、float 等可比较数据类型),而也可能存储的是一些较为复杂的键值对、结构体或者其他自定义的类。当存储在优先队列(大/小顶堆)或者二叉搜索树等数据结构时,需要这些复杂的元素支持比较特定的比较运算符。

转载于:https://www.cnblogs.com/mtcnn/p/9423985.html

你可能感兴趣的文章
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
面试题14 调整数组顺序使奇数位于偶数前面
查看>>
grid网格布局
查看>>
flask简单的注册功能
查看>>
JSP常用标签
查看>>
dashucoding记录2019.6.7
查看>>
IOS FMDB
查看>>
编码总结,以及对BOM的理解
查看>>
九涯的第一次
查看>>
PHP5.3的VC9、VC6、Thread Safe、Non Thread Safe的区别
查看>>
Android中全屏或者取消标题栏
查看>>
处理器管理与进程调度
查看>>
页面懒加载
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java zip 中文文件名乱码_java使用zip压缩中文文件名乱码的解决办法
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
kafka的java客户端_KAFKA Producer java客户端示例
查看>>
java -f_java学习笔记(一)
查看>>
java 什么题目好做_用java做这些题目
查看>>
java中的合同打印_比较方法违反了Java 7中的一般合同
查看>>