个人做的课后练习
书籍:算法设计与分析基础(第三版)
习题1.2
一.
百度上有具体的解法。
主要思路就是转为图,然后寻找路径。
二.
在第一题的基础之上,转为图,然后给每一条边都加权,计算最小的路径就可以了。
三.
a. 显然 海伦公式可以作为三角形面积的算法。只需要知道三条边就算出已知图形的面积。
b. S=1/2 * bc * sin A 也可以作为三角形面积的算法。但是我们需要利用余弦定理 计算出 cos A 的值,然后再利用三角恒等变换求出 sin A。
c. 和b类似
四.
利用 一元二次方程的求根公式就可以计算出两个实数根了。
Solve(a,b,c)
delta←b*b-4*a*c
A←null
if delta > 0
temp←sqrt(delta)
A[0]←(-b+temp)/(2*a)
A[1]←(-b-temp)/(2*a)
else if delta ==0
A[0]←-b/(2*a)
return A
五.
a.
不断地除二求余,直到商为零为止。余数的排序是从低到高。
b.
Binary(n)
if n/2>0
Binary(n/2)
print( n%2 )
八.
最小公倍数的算法。例如:两个数为 m和n
有多种计算方式
lcm(m,n)
return m*n/gcd(m,n)
lcm(m,n)
for i←max(m,n) to m*n do
if i%m==0 && i%n==0
return i
普通情况,显然第一种比较快
九.
可以先排序,然后再比较相邻两个数字之间的差
MinDistance(A[0..n-1])
sort(A[0..n-1])
dmin←∞
for i←0 to n-2 do
A[i+1]-A[i] < dmin ? A[i+1]-A[i] : dmin
return dmin