最小堆以及优先级队列的Golang实现

前言 堆,是计算机科学中的一种特别的完全二叉树。若父节点的值恒小于等于子节点的值,此堆称为最小堆(min heap);反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆(max heap)。在堆中最顶端的那一个节点,称作 根节点(root node),根节点本身没有 父节点(parent node)。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。 ...

May 13, 2021 · JemmyHu(hujm20151021@gmail.com)

优秀数据结构--默克尔树

一、简介 默克尔树是一种典型的二叉树结构,由一个根节点、一组中间节点 和 一组叶节点 组成。默克尔树最早由 Merkle Ralf 在 1980 年提出,曾广泛用于 文件系统 和 P2P 系统中,比如 Git、区块链、IPFS 等大名鼎鼎的项目或技术。 他又被称为 哈希树,即存储哈希值的树。树的叶子结点是 数据块(文件或者对象)的哈希值,而非叶子结点保存的是其子节点连接起来后的哈希值。简单来说,它有以下特点: ...

October 22, 2020 · JemmyHu(hujm20151021@gmail.com)

跳表原理以及Golang实现

一、前言 大家应该对 二分查找算法 不陌生,二分查找之所以能达到 O(logN) 的时间复杂度,一个重要原因在于它所依赖的数据结构是数组,数组支持随机访问,可通过下标很容易地定位到中间的某个元素。但是链表就没有 随机访问数据 这个特性,要判断是否包含某个元素,只能从头开始遍历对比。但是数组有数组的局限性,比如需要连续的内存空间,插入删除操作会引起数组的扩容和元素移动;链表有链表的优势,链表不需要先申请连续的空间,插入删除操作的效率非常高。 ...

October 5, 2020 · JemmyHu(hujm20151021@gmail.com)