摘要:
offscreenPageLimit = 0 的情况 此种情况表示不会预先加载其他的Fragment,仅仅加载第一个Fragment,其生命周期如下: Test fragment 0 onAttach Test fragment 0 onCreate Test fragment 0 onCreate 阅读全文
posted @ 2021-01-15 14:23
ijkzen
阅读(4174)
评论(0)
推荐(0)
摘要:
读书笔记 本小节讲述了两点内容: 合适动态规划算法解决的最优化问题的两个要素 备忘方法在动态规划中的作用 两个要素 最优子结构 一个问题的最优解包含其子问题的最优解 还有一点值得注意,同时还需要满足子问题无关的特性:同一个原问题的一个子问题的解不影响另一个子问题的解。 重叠子问题 某一个子问题可能会 阅读全文
posted @ 2021-01-15 14:16
ijkzen
阅读(559)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了利用动态规划解决矩阵链乘法的过程。 穷举不可行 想要通过穷举的方法,获得所有的解决方案是不可行的。 对于一个矩阵链,我们可以宏观地将它看作两个子矩阵链相乘,即$A_1..A_k$和$A_(k+1)..A_n$; 所以代价$P(n)$的表达式如下: \[ \begin{align 阅读全文
posted @ 2021-01-15 14:15
ijkzen
阅读(829)
评论(0)
推荐(0)
摘要:
读书笔记 说文解字 动态规划(dynamic programming),描述了它区别与其他算法的最大特征; 其中$programming$表示的是一种表格法,在动态规划算法执行的过程中,会动态地去将子问题的解填入表格和读取已知子问题的解,以减少不必要的运算; 与分治法的异同 相同点: 都是通过组合子 阅读全文
posted @ 2021-01-15 14:13
ijkzen
阅读(405)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了一种红黑树的扩展:区间树; 为每个节点添加了一个新属性$int$,属性$int$又有两个属性$low,high$,分别表示区间的两端; 区间重叠 区间便于表示占用一连续时间的一些事件。为了查询给定时间内发生的事件,需要在区间树找到与给定时间重叠的部分; 假设在一条直线有左右两个 阅读全文
posted @ 2021-01-15 14:12
ijkzen
阅读(522)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了扩展数据结构的抽象过程,同时证明了一个定理; 抽象过程 选择一种基础数据结构 确定基础数据结构中要维护的附加信息 检验基础数据结构上的基本修改操作能否维护附加信息 设计一些新的操作来应用附加信息 红黑树的扩张 设$f$是$n$个节点的红黑树$T$扩张的属性,且假设对任一节点$x 阅读全文
posted @ 2021-01-15 14:08
ijkzen
阅读(378)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了红黑树的改进版本,为每个节点新增一个属性,用于记录当前子树的数量; 新增属性$x.size$是由左子树加右子树再加本身组成,即$x.size = x.left.size + x.right.size + 1$; 维护数量属性 对红黑树的基本操作过程中,需要持续维护$size$属 阅读全文
posted @ 2021-01-15 14:07
ijkzen
阅读(279)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了红黑树的删除操作,这是红黑树的基础操作中比较复杂的一种; 和红黑树的插入的基本思想一致,红黑树的删除也是先将元素普通地删除,然后在调整二叉树使其符合红黑树的性质。 红黑树的元素普通删除 RB-TRANSPLANT(T, u, v) if u.p == T.nil T.root 阅读全文
posted @ 2021-01-15 11:50
ijkzen
阅读(178)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了向红黑树插入元素的过程: 将新元素普通地插入二叉树; 调整二叉树使其符合红黑树的性质; 插入元素到二叉树 RB-INSERT(T, z) y = T.nil x = T.root while x != T.nil y = x if z.key < x.key x = x.lef 阅读全文
posted @ 2021-01-15 11:48
ijkzen
阅读(191)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了旋转方法来修改搜索树; 如果按照普通二叉搜索树的方式去插入和删除元素,必定会破坏红黑树的性质; 为了维护红黑树的性质,必须要改变书中某些节点的颜色和指针结构; 指针结构的修改是通过旋转实现的,分为左旋和右旋,具体操作如下图: 其中左旋的伪代码如下: LEFT-ROTATE(T, 阅读全文
posted @ 2021-01-15 11:46
ijkzen
阅读(158)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了红黑树的一些性质,具体的实现方法在之后的章节中讲述。 红黑树解决的问题 普通的二叉搜索树所有的操作都依赖于树的高度,但是树高又依赖于数据,极不稳定; 红黑树使得元素分布相对平衡,来使得树高为$O(\lg)$,减少操作时间。 红黑树的性质 每个节点或是红色,或是黑色。 根节点是黑 阅读全文
posted @ 2021-01-15 11:45
ijkzen
阅读(239)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了二叉搜索树的插入和删除,至于修改只要先删除后插入就好; 插入 插入的过程和搜索的过程有些相似,先找到合适的位置然后将元素插入; 伪代码如下: TREE-INSERT(T, z) y = NIL x = T.root while x != NIL y = x if z.key < 阅读全文
posted @ 2021-01-15 11:43
ijkzen
阅读(139)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了二叉搜索树的查询操作,包括$SEARCH, MINIMUM,MAXIMUM, SUCCESSOR, PREDECESSOR$这$5$个操作,这五个操作均可以在$O(h)$,$h$是当前二叉树的高度。 搜索 递归实现: TREE-SEARCH(x, k) if x == NIL 阅读全文
posted @ 2021-01-15 11:40
ijkzen
阅读(207)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了二叉搜索树,二叉搜索树就是左子节点比父节点的值要小,右子节点的值比父节点大的二叉树;这里的小于/大于还包括等于。 INORDER-TREE-WALK(X) if x != NIL INORDER-TREE-WALK(x, left) print x.key INORDER-TR 阅读全文
posted @ 2021-01-15 11:37
ijkzen
阅读(154)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了散列表的灵魂--散列函数; 一个好的散列函数应满足简单均匀散列假设:每个关键字都被等可能地散列到$m$个槽位中的任何一个,并与其他关键字已散列到哪个槽位无关。 虽然上述假设难以实现,但是可以作为衡量其他散列函数的标准。 有一些动态集合的元素关键字并不是自然数,我们需要使用各种各 阅读全文
posted @ 2021-01-15 11:35
ijkzen
阅读(256)
评论(0)
推荐(0)
摘要:
读书笔记 虽然直接寻址表的所有字典操作能在$O(1)$时间内完成,但是它的缺点也同样明显; 如果某一个元素的关键字特别大,但是动态集合的元素数量又相对少,这就会造成极大的内存浪费;此外,直接寻址表对拥有同样关键字的元素缺乏合理的处理; 散列表改善了直接寻址表的上述缺点: 原本元素在直接寻址表的位置依 阅读全文
posted @ 2021-01-15 11:33
ijkzen
阅读(276)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了直接寻址表,其实也就是数组; 为一个动态集合创建一个数组,这个数组长度大于等于这个动态集合的长度,将数组下标作为集合元素的关键字,进行直接寻址,这样的数组被称为直接寻址表。 课后习题 11.1-1 假设一动态集合$S$用一个长度为$m$的直接寻址表$T$来表示。请给出一个查找$ 阅读全文
posted @ 2021-01-15 11:31
ijkzen
阅读(159)
评论(0)
推荐(0)
摘要:
读书笔记 本小姐介绍了两种有根树的实现方法,二叉树和分支无限制的有根树; 二叉树 二叉树的单个节点有三个指针$p, left, right$,其中$p$指向父节点,如果一个节点为根节点,则其父节点指向空;$left, right$分别指向左子节点和右子节点; 分支无限制的有根树 上面的二叉树虽然好用 阅读全文
posted @ 2021-01-15 11:28
ijkzen
阅读(115)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了利用数组实现指针的过程。 利用二维数组 其中一列代表一个节点,一列分为上中下三个部分,上代表后继节点的坐标,中代表当前节点的值,下代表前驱节点的坐标; 利用单数组 其中一个节点由连续的数组元素组成,图中4代表该节点的值,7代表后继节点的坐标,13代表前驱节点的坐标; 这种单数组 阅读全文
posted @ 2021-01-15 11:26
ijkzen
阅读(144)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了链表,链表由一个个节点连接而成,单个节点的组成如下: public class Node { public Node previous; public Object key; public Node next; } 由上述节点组成的链表称为双向链表;也有节点只有一个前驱节点或者 阅读全文
posted @ 2021-01-15 11:24
ijkzen
阅读(115)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了栈和队列,其实总结起来就两句话: 栈:先入后出 队列:先入先出 但是在介绍队列的时候,讲到了一种如同衔尾蛇一样的定长队列,和apache的CircularFifoQueue实现是一致的。 课后习题 10.1-1 仿照图$10-1$,画图表示一次执行操作$PUSH(S,4)$、\ 阅读全文
posted @ 2021-01-15 11:21
ijkzen
阅读(94)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了一种上界为$O(n)$的选择算法,该算法过程如下: 先对将输入数组以每组5个元素分组,可能会剩余一组不足5个元素的小组。 对每个小组进行插入排序。 对每个小组的中位数,进行递归操作,也就是重复第1,2步骤,直至找到整个数组的中位数$x$。 使用在第三步找出的中位数$x$对数组进 阅读全文
posted @ 2021-01-15 11:19
ijkzen
阅读(331)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍一种选择算法,用来选择数组中第$i$小的元素; $RANDOMIZED-SELECT$以快速排序为模型,时间复杂度为$\theta(n)$。 伪代码如下: RANDOMIZED-SELECT(A, p, r, i) if p == r return A[p] q = RANDOM 阅读全文
posted @ 2021-01-15 11:09
ijkzen
阅读(325)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了两点: 如何找到数组中的最大值和最小值? 如何同时找到数组中的最大值和最小值? 找到最小值 最小值和最大值的方法是一致,从数组中取出一个值,然后和其他的$n-1$个值相比较,不断更新最大值/最小值,经过$n-1$次比较,可以获得最大值/最小值。 同时找到最大值和最小值 如果没有 阅读全文
posted @ 2021-01-15 11:05
ijkzen
阅读(246)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了桶排序,桶排序是将元素按照规则放在一个个递增区间内,区间之间是递增的,区间内部也是递增的,最后依次合并区间得到次序; 具体过程如下: 伪代码如下: BUCKET-SORT(A) n = A.length let B[0..n-1] be a new array for i = 阅读全文
posted @ 2021-01-15 10:59
ijkzen
阅读(190)
评论(0)
推荐(0)
摘要:
读书笔记 本小节讲的是基数排序,与比较排序不同,基数排序并不是直接比较元素间的大小获得次序,而是从低位到高位依次排序,最终获得次序; 具体过程如下: 伪代码如下: RADIX-SORT(A, d) for i = 1 to d use a stable sort to sort array A on 阅读全文
posted @ 2021-01-15 10:54
ijkzen
阅读(296)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了计数排序,计数排序的基本思想是: 对每个输入元素$x$,确定小于$x$的元素个数。利用这一信息,就可以直接把$x$放到它在的输出数组中的位置上了。 所以这里的重点是如何确定小于$x$的元素个数,这里引入了一个数组$C$,$C$的长度为$k$,$k$的值要大于等于输入数组中的最大 阅读全文
posted @ 2021-01-15 10:52
ijkzen
阅读(178)
评论(0)
推荐(0)
摘要:
读书笔记 本小节通过决策树模型,说明了一个比较排序算法的下界为$\Omega(n\lg)$; 课后习题 8.1-1 在一棵比较排序算法的决策树中,一个叶节点可能的最小深度是多少? 最好情况就是当前数组是已经排好序的,需要比较$n-1$次;深度为$n$ 8.1-2 不用斯特林公式,给出$\lg{(n! 阅读全文
posted @ 2021-01-15 10:49
ijkzen
阅读(302)
评论(0)
推荐(0)
摘要:
读书笔记 为了使得算法对所有输入都能有较好的期望性能,所以我们在算法中引入了随机性; 伪代码如下: RANDOMIZED-PARTITION(A, p, r) i = RANDOM(p, r) exchange A[r] with A[i] return PARTITION(A, p, r) RAN 阅读全文
posted @ 2021-01-15 10:47
ijkzen
阅读(135)
评论(0)
推荐(0)
摘要:
读书笔记 本小节对快速排序在三种情况下的性能进行了分析,我自觉没有书上说得好,所以直接上图片。 最好和最坏情况 平均情况 课后习题 7.2-1 利用代入法证明:正如7.2节开头提到的那样,递归式$T(n) = T(n-1) + \theta(n)$的解为$T(n)=\theta(n^2)$。 易证, 阅读全文
posted @ 2021-01-15 10:45
ijkzen
阅读(321)
评论(0)
推荐(0)
摘要:
读书笔记 本小节介绍了大名鼎鼎的快速排序,快速排序在最坏的情况下的时间复杂度为$\theta(n^2)$;在元素互异的情况下,期望时间复杂度为$O(n\lg)$。快速排序使用了分治思想,分治过程如下: 分解 数组$A[p..r]$被划分为两个(可能为空)的子数组$A[p..q-1]$和$A[q+1. 阅读全文
posted @ 2021-01-15 10:41
ijkzen
阅读(155)
评论(0)
推荐(0)
摘要:
读书笔记 本小节讲述了堆排序在实际中的应用--优先队列,优先队列可以在共享计算机操作系统进行作业调度。 最大优先队列支持如下操作: 插入 将元素$x$根据它的优先级插入到合适的位置; 实现过程 在最大堆的最末端插入一个无穷小的叶子节点,然后为这个节点赋值,然后使用递归调整该节点到合适位置; 伪代码 阅读全文
posted @ 2021-01-15 10:38
ijkzen
阅读(136)
评论(0)
推荐(0)
摘要:
读书笔记 之前说过降序数组都是最大堆,但是反之不然,本小节讲述的是从最大堆中获取降序数组的过程; 伪代码如下: HEAPSORT(A) BUILD-MAX-HEAP(A) for i = A.length downto 2 exchange A[1] with A[i] A.heap-size = 阅读全文
posted @ 2021-01-15 10:37
ijkzen
阅读(174)
评论(0)
推荐(0)
摘要:
读书笔记 本小节讲述了将数组转化为最大堆的过程,伪代码如下: BUILD-MAX-HEAP(A) A.heap-size = A.length for i = A.length/2 downto 1 MAX-HEAPIFY(A, i) 课后习题 6.3-1 参照6-3的方法,说明$BUILD-MAX 阅读全文
posted @ 2021-01-15 10:35
ijkzen
阅读(142)
评论(0)
推荐(0)
摘要:
读书笔记 本小节主要讲述了将一个数组变成最大堆的过程; 事实上还是比较简单的,这里使用了递归的方法; 分解 将堆分为左堆和右堆 解决 递归地将左堆和右堆变成最大堆 合并 合并左堆和右堆变成整体的最大堆 课后习题 6.2-1 参照图6-2的方法,说明$MAX-HEAPIFY(A, 3)$在数组$A=< 阅读全文
posted @ 2021-01-15 10:34
ijkzen
阅读(253)
评论(0)
推荐(0)
摘要:
读书笔记 本小节首先介绍了__堆__的概念,然后又介绍了__二叉堆__的两种形式:最大堆和最小堆; 其中图$(a)\(是二叉堆逻辑上的结构,图\)(b)$是物理上的结构。如何从物理上的结构映射到逻辑的结构,通过下方的简单的函数进行映射。 最大堆 所有的父节点都__大于等于子__节点。 最小堆 所有的 阅读全文
posted @ 2021-01-15 10:29
ijkzen
阅读(262)
评论(0)
推荐(0)
摘要:
读书笔记 本小节分为两部分,第一部分陈述随机算法的必要性,第二部分介绍了两种随机算法并且证明了它们的正确性; 一个算法的执行效率需要一个随机算法的输入来检验; 优先级排序随机算法 过程如下: 为数组每个元素 $A[i]$赋一个随机的优先级$P[i]$,然后依据优先级对数组$A$中的元素进行排序。 伪 阅读全文
posted @ 2021-01-15 10:23
ijkzen
阅读(162)
评论(0)
推荐(0)
摘要:
读书笔记 本小节分为两部分,第一部分用复杂的语言讲解期望的计算方法,即值和概率乘积之和;第二部分使用第一部分讲述的方法计算期望; 有一个值得注意的地方,$\sum_{k=1}{n}{\frac{1}{n}} = \lnn + O(1)$的证明过程可以在附录A的A.2中找到。 \[ \sum_{k=1 阅读全文
posted @ 2021-01-15 10:22
ijkzen
阅读(383)
评论(2)
推荐(0)
摘要:
读书笔记 本小节并没有讲太多东西,但是最后一句话有一些意义; 一般而言,当概率分布实在算法的输入上时,我们讨论的是平均情况运行时间;当算法本身做出随机选择时,我们讨论其期望时间。 课后习题 5.1-1 证明:假设在过程HIRE-ASSISTANT的第4行中,我们总能决定哪一个应聘者最佳,则意味着我们 阅读全文
posted @ 2021-01-15 10:19
ijkzen
阅读(151)
评论(0)
推荐(0)
摘要:
读书笔记 使用主方法,往往能够更加简便地求解递归式; \[ T(n) = aT(n/b) + f(n) \] 上述递归式表示,将原来规模为$n$的问题分解为$a$个子问题,每个子问题的规模为$n/b$,其中$a$和$b$都是正常数。$a$个子问题递归地进行求解,每个花费时间为$T(n/b)$。函数$ 阅读全文
posted @ 2021-01-15 10:18
ijkzen
阅读(289)
评论(0)
推荐(0)

浙公网安备 33010602011771号