- 积分
- 3628
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
题目(出自《算法导论》):
二进制相加
IDL程序:
前一位进位的值存放在x数组,a、b数组的第i位就是c和x数组的第i+1位。
想着容易,编程难,这个小程序还改了半天,我太弱了。
pro linshi,a,b,n
x=fltarr(n+1)
c=fltarr(n+1)
for i=n-1,0,-1 do begin
p=where([a,b,x[i+1]] eq 1,count)
c[i+1]=count mod 2
x=fix(count/2)
endfor
c[0]=x[0]
print,c
end
这个算法貌似是Θ(n)。
这里的x也未必需要是一个数组,因为用完即扔,设置为反复自我覆盖的一个数即可,省空间。
改进为:
pro linshi,a,b,n
x=0
c=fltarr(n+1)
for i=n-1,0,-1 do begin
p=where([a,b,x] eq 1,count)
c[i+1]=count mod 2
x=fix(count/2)
endfor
c[0]=x
print,c
end
运行与输出:
IDL> linshi,[1,0],[1,1],2
1.00000 0.000000 1.00000
IDL> linshi,[1,0,1,0],[1,0,1,1],4
1.00000 0.000000 1.00000 0.000000 1.00000
|
|