Hello 算法 1.0.0b1 Golang版,我们先将其添加到堆底。添加后,由于 val 可能大于堆中其它元素,此时堆的成立条件可能已 经被破坏,因此需要修复从插入结点到根结点这条路径上的各个结点,该操作被称为「堆化 Heapify」。 考虑从入堆结点开始,从底至顶执行堆化。具体地,比较插入结点与其父结点的值,若插入结点更大则将它们 交换;并循环以上操作,从底至顶地修复堆中的各个结点;直至越过根结点时结束,或当遇到无需交换的结点 时提前结束。 8. 堆 hello‑algo func (h *maxHeap) siftUp(i int) { for true { // 获取结点 i 的父结点 p := h.parent(i) // 当“越过根结点”或“结点无需修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两结点 h.swap(i, p) 8. 堆 hello‑algo 循环向上堆化 i = p } } 堆顶元素出堆 堆顶元素是二叉树根结点,即列表首元素,如果我们直接将首元素从列表中删除,则二叉树中所有结点都会随 之发生移位(索引发生变化),这样后续使用堆化修复就很麻烦了。为了尽量减少元素索引变动,采取以下操 作步骤: 1. 交换堆顶元素与堆底元素(即交换根结点与最右叶结点); 2. 交换完成后,将堆底从列表中删除(注意,因为已经交换,实际上删除的是原来的堆顶元素);0 码力 | 190 页 | 14.71 MB | 1 年前3
如何向Go官方提交代码-蒙卓org/pub/linux/mips/doc/ABI/elf64-2.4.pdf This CL makes loadelf aware the difference. Update #35779 跟哪些bug有关 修复的就用Fixed 没修复就用Update CL举例 1. 跑全量用例 (cd src; ./all.bash -v) 2. commit信息 a. 信息要完整,改了什么, 为什么要改 b. 引用数据源0 码力 | 38 页 | 5.95 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版,我们先将其添加到堆底。添加后,由于 val 可能大于堆中其它元素,此时堆的成立条件可能已 经被破坏,因此需要修复从插入结点到根结点这条路径上的各个结点,该操作被称为「堆化 Heapify」。 考虑从入堆结点开始,从底至顶执行堆化。具体地,比较插入结点与其父结点的值,若插入结点更大则将它们 交换;并循环以上操作,从底至顶地修复堆中的各个结点;直至越过根结点时结束,或当遇到无需交换的结点 时提前结束。 8. 堆 hello‑algo func (h *maxHeap) siftUp(i int) { for true { // 获取结点 i 的父结点 p := h.parent(i) // 当“越过根结点”或“结点无需修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两结点 h.swap(i, p) 8. 堆 hello‑algo 循环向上堆化 i = p } } 堆顶元素出堆 堆顶元素是二叉树根结点,即列表首元素,如果我们直接将首元素从列表中删除,则二叉树中所有结点都会随 之发生移位(索引发生变化),这样后续使用堆化修复就很麻烦了。为了尽量减少元素索引变动,采取以下操 作步骤: 1. 交换堆顶元素与堆底元素(即交换根结点与最右叶结点); 2. 交换完成后,将堆底从列表中删除(注意,因为已经交换,实际上删除的是原来的堆顶元素);0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏。因此,需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为「堆化 Heapify」。 考虑从入堆节点开始,从底至顶执行堆化。具体来说,我们比较插入节点与其父节点的值,如果插入节点更 大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无需交换 的节点时结束。 8. 堆 hello‑algo func (h *maxHeap) siftUp(i int) { for true { // 获取节点 i 的父节点 p := h.parent(i) // 当“越过根节点”或“节点无需修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两节点 h.swap(i, p) // 循环向上堆化 循环向上堆化 i = p } } 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采取以下操 作步骤: 1. 交换堆顶元素与堆底元素(即交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,实际上删除的是原来的堆顶元素)。0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.1.0 Go版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 func (h *maxHeap) siftUp(i int) { for true { // 获取节点 i 的父节点 p := h.parent(i) // 当“越过根节点”或“节点无须修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两节点 h.swap(i, p) // 循环向上堆化 循环向上堆化 i = p } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为「堆化 heapify」。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 func (h *maxHeap) siftUp(i int) { for true { // 获取节点 i 的父节点 p := h.parent(i) // 当“越过根节点”或“节点无须修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两节点 h.swap(i, p) // 循环向上堆化 循环向上堆化 i = p } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏。因此,需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为「堆化 heapify」。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 func (h *maxHeap) siftUp(i int) { for true { // 获取节点 i 的父节点 p := h.parent(i) // 当“越过根节点”或“节点无须修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两节点 h.swap(i, p) // 循环向上堆化 循环向上堆化 i = p } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采用以下操 作步骤。 1. 交换堆顶元素与堆底元素(即交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,实际上删除的是原来的堆顶元素)。0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 func (h *maxHeap) siftUp(i int) { for true { // 获取节点 i 的父节点 p := h.parent(i) // 当“越过根节点”或“节点无须修复”时,结束堆化 if p < 0 || h.data[i].(int) <= h.data[p].(int) { break } // 交换两节点 h.swap(i, p) // 循环向上堆化 循环向上堆化 i = p } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 384 页 | 18.49 MB | 10 月前3
Go持续集成一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历0 码力 | 39 页 | 10.74 MB | 1 年前3
如何消除程序中的数据竞争-周光远基于Golang的特性优化 Compiler Runtime In go way 在编译器和runtime的通用优化 Not go way 特定领域场景下的定制优化。 社区贡献 (bug修复、特性优化、提案推送) 定制优化 对Go语言技术感兴趣或者想 加入我们的Go语言优化团队, 可以关注这个公众号。 这个公众号将会不定期发布 一些技术文章和招聘信息。 • 你对Golang有更深刻的理解了吗?!0 码力 | 30 页 | 1.92 MB | 1 年前3
共 15 条
- 1
- 2













