From e781e318a9e57fd25dd8dad39b657ef799d16cd3 Mon Sep 17 00:00:00 2001 From: Shine wOng <1551885@tongji.edu.cn> Date: Sun, 13 Oct 2019 22:18:17 +0800 Subject: [PATCH] add dsa/chp1/exercises.md. --- thu_dsa/chp1/exercises.md | 37 ++++++++++++++++++++++++++++++++++ thu_dsa/chp1/master theorem.md | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 thu_dsa/chp1/exercises.md diff --git a/thu_dsa/chp1/exercises.md b/thu_dsa/chp1/exercises.md new file mode 100644 index 0000000..5fb9e9e --- /dev/null +++ b/thu_dsa/chp1/exercises.md @@ -0,0 +1,37 @@ +教材课后习题回答 +============== + +## Introduction.B + +> 举例:随问题实例规模增大,同一算法的求解时间可能波动甚至下降 + +比如求解`hailstone(n)`的整个序列,或者求它的序列长度的算法。 + +> 在哪些方面,现代电子计算机仍未达到RAM模型的要求? + +首先,在RAM模型中寄存器的数量是不限的,在现代计算机中则因为指令集的设计以及成本等问题,寄存器的数量往往是有限的,并且数量很少。 +其次,在RAM模型中,所有基本操作都需要相同的时间,这在现代计算机中也难以达到,即不同的指令执行需要的时钟周期不同。在实际中是采用多次存储器架构来实现对有限的寄存器的扩充的,在这些不同层次的存储器之间传递数据,所需要的时间往往具有数量级级别的差别。 + +> 在`TM`,`RAM`等模型中衡量算法效率,为何通常只需考察运行的时间? + +在渐进复杂度的意义下,任一算法的任何一次运行过程中所消耗的存储空间,都不会多于其间所执行的指令条数。这是因为,一条基本操作只能涉及常数规模的存储空间。 + +> 图灵机Increase中,以下这条指令可否省略? + +``` +(<, #, 1, R, >) +``` + +不可以。该指令是对应于原来的二进制整数,只有全1的后缀,却没有一个为零的前缀的情形;对于这种情况,应该把最前面一个'#'改写成'1',来表示递增之后的最高位。 + +> 设计一个图灵机,实现对正整数的减一(Decrease)功能 + +由于是正整数,该问题其实就等价于将一个带有全'0'后缀的'1'做Decrease操作,其中全'0'后缀的长度可以等于零,'1'左侧也还可以有其他数字,但是对结果没有影响。 + +算法是,将全'0'的后缀反转为'1',将原来高位的'1'反转为'0',有以下三条操作: + +```c +(<, 0; 1, L, <); +(<, 1; 0, R, >); +(>, #; #, R, h);//halt +``` diff --git a/thu_dsa/chp1/master theorem.md b/thu_dsa/chp1/master theorem.md index 7e2555f..1f6215b 100644 --- a/thu_dsa/chp1/master theorem.md +++ b/thu_dsa/chp1/master theorem.md @@ -5,7 +5,7 @@ Conclusion on Master Theorem In the analysis of algorithms, `Master Theorem` provides a simple way to compute the time complexity(using big O notation) for `divide-and-conquer` recurrences. -We all know that for `divide-and-conquer` algorithms, there are two way to analysis their time complexity, i.e. _recursion track_ and _recurrence equation_. Master Theorem is a way to compute such time complexity using both the two way: it tries to solve the _recurrence equation_ by means of _recusion track_. +We all know that for `divide-and-conquer` algorithms, there are two ways to analyze their time complexity, i.e. _recursion track_ and _recurrence equation_. Master Theorem is a way to compute such time complexity using both the two way: it tries to solve the _recurrence equation_ by means of _recusion track_. ## Introduction @@ -71,7 +71,7 @@ $$ > Case 3: q > 1 $$ -T(n) = n^d(1 + q + q^2 + ... + q^k) = n^d * \frac{1-q^{k+1}}{1-q} = O(n^d * q^k = O(a^{log_{b}^{n}}) +T(n) = n^d(1 + q + q^2 + ... + q^k) = n^d * \frac{1-q^{k+1}}{1-q} = O(n^d * q^k) = O(a^{log_{b}^{n}}) $$ To further simplify this, we need to apply the following equation: