我只討論練習2.15和2.16,前面的較簡單。
2.15和2.16不能孤立的看,首先我們想想這個所謂區間運算的實質是什麼?
沒錯,集合
我們重新定義加法:
對於集合
a ,
b 定義c=
a+b 為一切x+
y 構成的集合(其中x∈
a 和y∈
b )
減法,乘法,除法類似
也容易定義c=
f(a,
b)為一切f(
x,y)
構成的集合(其中x∈
a 和y∈
b ) 考察r
=11/
r1+1
/r2 ,可以認為r=
f(r1
,r2)
,而f(
x,y)
=1x−
1+y−
1 自然對於r=
r1r2
r1+r
2 ,可認為r=
g(r1
,r2)
,而g(
x,y)
=xyx
+y當然因為電阻都是正數所以
f 和
g可以認為是相等的
這時再回頭看看alyssa p.hacker定義的區間運算,發現對於後一種運算,她是分開算的,即先算r1
r2,再算r1
+r2 ,最後將兩個相除。
在看看其對於區間的運算,容易發現,在分開算的過程中,算r1
r2時的變數和算r1
+r2 時的變數不同
也就是說alyssa
p.hacker的程式在算r=
r1r2
r1+r
2 的時候不是r=
g(r1
,r2)
,而是r=
g1(r
1,r2
)g2(
r1,r
2),其中g1
(r1,
r2)=
r1r2
,g2(
r1,r
2)=r
1+r2
如此若定義h=
g1g2
,則h就只能是: h(
x,y,
z,w)
=g1(
x,y)
g2(z
,w)(
x,z∈
r1,y
,w∈r
2)這樣算出來的r當然是不真確的了,故而可以回答2.15,正確
至於2.16,第一問已經由上面解答
第二問可以回答:即使可以做到算術閉包,也必須使使用者將要算的東西寫成表示式,之後程式在對表示式求結果(簡單地說就是不能像windows自帶的計算器那樣可以先按5/2得2.5在2.5*3,只能一次給出表示式然後直接得到乙個聯絡於這個表示式的結果)
演算法導論 習題2 1 4
有兩個各存放在陣列a和b中的n位二進位制整數,考慮它們的相加問題。兩個整數的和以二進位制形式存放在具有 n 1 個元素的陣列c中。請給出這個問題的形式化描述,並寫出偽 以下是我寫的c 如有錯誤請指出 include stdafx.h include include define n 20 using...
演算法導論習題2 1 4
coding utf 8 exercises 2.1 4 consider the problem of adding two n bit binary integers,stored in two n element arrays a and b.the sum of the two intege...
SICP習題1 6的解答
sicp就是名著 structure and interpretation of computer programs 著名的巫師書 wizard book 和紫書 purple book 雖說英文原版可以從網上合法 中文版翻譯也還不錯。閒話少敘,下面我們研究一下書中 1.1.7節的練習題1.6。原題...