这题利用二叉堆维持堆性质的办法来维持Young氏矩阵的性质,题目提示中写得很清楚,不过确实容易转不过弯来. a,b两问很简单.直接看c小问: 按照Young氏矩阵的性质,最小值肯定在左上角取得,问题在于取出最小值后如何保持矩阵的性质.可以参照max_heapify中的做法,先取出最小值,然后将矩阵左上角置为最大值,这样左上角处的元素必然导致Young氏矩阵的性质违背,于是考虑该元素右边的元素和该元素下边的元素,问题是该与右边元素交换还是与下边元素交换呢?可以发现,如果与T(右)和T(下)中较小的…
d叉堆的实现相对于二叉堆变化不大,首先看它如何用数组表示. 考虑一个索引从1开始的数组,一个结点i最多可以有d个子结点,编号从id - (d - 2) 到 id + 1. 从而可以知道一个结点i的父结点计算方法为: (i + d - 2) / d. 第二个问题是 一个含有n个元素的d叉堆的高度,就是一个简单的等比数列的问题,可以知道的是一颗高度为h的满d叉树所含的结点数目为(d^(h +1) - 1) / (d - 1) 从而一颗含有 n个结点的d叉树满足的条件为: ,从而得到高度h为: 接下来…
6.1堆 卫星数据:一个带排序的的数通常是有一个称为记录的数据集组成的,每一个记录有一个关键字key,记录的其他数据称为卫星数据. 原地排序:在排序输入数组时,只有常数个元素被存放到数组以外的空间中去. 在第二章介绍了两种排序:插入排序和合并排序,接下来两章要介绍的是推排序和快速排序,这四个排序都属于比较排序(comparison sort). 快速排序的性能一般优先于堆排序 二叉堆是一个数组(b),近似完全二叉树(a) 数组(b) 实际的存储形势 二叉树(a) 要表达的结构 [1,A.heap…
优先队列:     物理结构: 顺序表(典型的是数组){python用到list}     逻辑结构:似完全二叉树 使用的特点是:动态的排序..排序的元素会增加,减少#和快速排序对比 快速一次排完 增加元素要重排(或许是插入)                         随插随排                         每次拿一个最大(最大(优先队列/堆))或最小 关键注意点:     A.length:元素个数 #python 我将用len(A) - 1  #第一位将用-1舍弃  …
<算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题那样的理论思考,也离不开编码的实践. 所以,后面每个章节,我都会尽力整理出章节中涉及的算法的Java代码实现. 二分查找 算法实现 package tech.jarry.learning.test.algorithms.binarysearch; public class BinarySearch { pub…
▶ 书中第六章部分程序,加上自己补充的代码,包括全局最小切分 Stoer-Wagner 算法,最小权值二分图匹配 ● 全局最小切分 Stoer-Wagner 算法 package package01; import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.EdgeWeightedGraph; import edu.princeton.cs.algs…
▶ 书中第六章部分程序,包括在加上自己补充的代码,包括二分图最大匹配(最小顶点覆盖)的交替路径算法和 HopcroftKarp 算法 ● 二分图最大匹配(最小顶点覆盖)的交替路径算法 package package01; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.BipartiteX; import edu.princeton.cs.algs4.Graph; import edu.princeton.c…
▶ 书中第六章部分程序,包括在加上自己补充的代码,网络最大流 Ford - Fulkerson 算法,以及用到的流量边类和剩余流量网络类 ● 网络最大流 Ford - Fulkerson 算法 package package01; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.FlowEdge; import edu.princeton.cs.algs4.FlowNetwork; import edu.pr…
前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交集.差集等数学操作,还可以学到如何使用ES6 原生的 Set类 第六章 集合 构建数据集合 集合是由一组无序且唯一(即不重复)的项组成的.这个数据结构使用了与有限集合相同的属性概念,但应用在计算机科学的数据结构中. 在数学中,集合时一组不同的对象(的集). 比如说,一个由大于或等于0 的整数组成的自…
▶ 书中第六章部分程序,加上自己补充的代码,包括单纯形法求解线性规划问题 ● 单纯形法求解线性规划问题 // 表上作业法,I 为单位阵,y 为对偶变量,z 为目标函数值 // n m 1 // ┌───────────┬───────┬───┐ // │ │ │ │ // m │ A │ I │ b │ // a[m+1][n+m+1] = │ │ │ │ // ├───────────┼───────┼───┤ // 1 │ c │ y │ z │ // └───────────┴──────…