摘要:
1 ORIG 2 2 ALF ABCDE 3 ORIG 5 4 TOP ALF 00000 5 ORIG 3000 6 NEXT EQU 4:5 7 START ENTA 2 8 STA TOP 9 ENTA TOP 10 LDA TOP(NEXT) 11 LD1 TOP 12 LDA 0,1(NEXT) 13 HLT 14 END STARTTOP是符号变量,地址是5,第8行将其指向地址2.第9行执行后,rA=5。第10行执行后,rA=2。第12行执行后,rA=(DE)。可见符号变量本身就是该变量所在的地址,同跳转指令中使用的符号是完全一样的。ENTA指令直接将符号作为立即... 阅读全文
摘要:
参考原文:http://math.stackexchange.com/questions/61614/how-does-knuths-algorithm-for-calculating-logarithm-work基本思想是将x表示为乘积:$x=\prod{a_i}$其中,$a_i \ge a_{i+1} > 1$,如此一来,有:$\log_b{x}=\sum\log_b{a_i}$每次执行到L4,我们都得到了一个最小的k,使得针对本次迭代的输入x,有:$\frac{2^k-1}{2^k}x \ge 1$$x\geq\frac{2^k}{2^k-1} > 1$取$a_1 = 2^k 阅读全文
摘要:
假设 x = 3, y = 2。则蓝色部分为lny,高度除以x,宽度乘以x之后,就是黄色部分,这两部分的面积是相等的。为什么相等?按照积分原理,可以直接把图中的类矩形当作矩形看待。而黄色部分的面积恰好是lnxy - lnx,所以lnxy = lnx + lny。 阅读全文
摘要:
设$y=\log_{10}x$,将y记为整数部分10进制,小数部分二进制的形式,有:$10^{n+\frac{b_1}{2^1}+\frac{b_2}{2^2}+\frac{b_3}{2^3}+\cdots}=x$将x不断地除以10,直到结果小于10,除以10的次数即n。然后求$b_1$,等式两边除以$10^n$:$10^{\frac{b_1}{2^1}+\frac{b_2}{2^2}+\frac{b_3}{2^3}+\cdots}=\frac{x}{10^n}=x_0$$b_1$的取值范围是0,1。上式平方,有:$10^{b_1+\frac{b_2}{2^1}+\frac{b_3}{2^2} 阅读全文
摘要:
每一步都要保证T <= 3n的要求,实际上是针对最终结果A4的,即A4的条件中可以加上T <= 3n,之前的中间步骤需要有更严格的限制,为后面的步骤留出余量。 从中间的某一步骤看,后面还剩多少步骤呢?这是由d决定的。d是前一次递归的余数,本次递归的除数,它是在不断减小的。 剩余步骤数 = 本次递归剩余步骤数 + 余下的递归次数 * 一次递归中的步骤数 一次递归,从步骤E4开始,经E2,到E3,要么结束,要么开始下次递归。所以在A5处,本次剩余步骤数是0,A6处是2,A3处是1。 余下的递归次数是d - 1,每次递归3个步骤。 剩余步骤数 = 0/2/1 + 3(d - 1) ... 阅读全文
摘要:
1. 我的方法(a):首先要把要证明的东西泛化,记$n^3$ = F(n)。通过观察n=3时的取值,1,3,5,7,9,11,13,F(3)是前6个奇数的和减去前3个奇数的和。F(n)就是前n(n+1)/2个奇数的和,减去前(n-1)n/2个奇数的和。求前k个奇数的和比较简单,(1 + 2k - 1) k / 2 = $k^2$,这也是本节Eq(2)的结论。于是:$F(n) = [n(n + 1) / 2]^2 - [(n - 1)n / 2]^2 = ((n^2) / 4) ((n + 1)^2 - (n - 1)^2) = ((n^2) / 4) 4n = n^3$晕,这不转一圈又转回来, 阅读全文
摘要:
初始时,$a = 0,\,b = 1,\,a' = 1,\,b' = 0,\,$满足:$a'm + b'n = m = c$ (1)$am + bn = n = d$ (2)E4执行过之后,$c,\,d,\,a,\,b,\,a',\,b'$都有了新值,加下标n表示E4执行过之后的新值,加下标o表示E4执行之前的旧值。$c_n = d_o$$d_n = r$$a_n = a'_o - qa_o$$b_n = b'_o - qb_o$$a'_n = a_o$$b'_n = b_o$将替换关系代入(1)左侧,有:$a 阅读全文
摘要:
要证明n个数:0 mod m, n mod m, 2n mod m, ..., (m - 1)n mod m精确地由某种顺序的m/d个数字的d份拷贝组成:0, d, 2d, ..., m - dd = gcd(m, n)第一步先要证明这m个数字是由m/d个数字的d份拷贝组成的,作者说这个证明是小菜一碟,通过jn ≡ kn (mod m) <--> j(n/d) ≡ k(n/d) (mod m/d)就可以得到。实在看不出这里的逻辑关系,所以按如下方式理解更容易一些。由于d = gcd(m, n),所以jn ≡ jn + mn/d (mod m)有jn ≡ (j + m/d)n (mo 阅读全文
摘要:
题目要求定义算法$C_2$实现算法$C_1$,看答案之前,没有任何概念,完全不清楚如何定义。看了答案,发现并不是很难理解,倒是作者举的例子将简单的事情说得复杂,不看也罢。 说算法$C_2$实现算法$C_1$,意味着:两个算法的输入、输出一一对应,$C_1$中的一步状态迁移可以用$C_2$中的多步迁移实现。这个关系直观上理解起来比较简单,但用数学方式表达可能要复杂一些。 首先定义了三个映射关系: g: $I_1 \rightarrow I_2$ h: $Q_2 \rightarrow Q_1$ j: $Q_2 \rightarrow$ uint 关于映射关系的定义,一定要有... 阅读全文
摘要:
在算法的形式化定义中,Q可能是无限集合,f可能是很复杂的操作,不满足本章提到的效率要求。因此作者提出了更具效率的形式化定义。其基本思想是将一个状态映射为一个字符串,如何映射应该是难点,但作者没有在这里详细描述。状态映射为字符串之后,f变为字符串操作,具有效率,但我觉得Q仍可能是无限集合。 除了Q,I,Ω,f之外,这里又引入了几个符号: A: 有限集合,包含状态字符串可能用到的字母。通常将是输入中的每个元素和每个运算过程中产生的中间元素映射为一个字母。 $A^*$: 使用A中字母表达的状态的集合,注意这里没有使用$A^*$作为Q。 $\sigma$: 使用字符串表达的状态,是$... 阅读全文