过程:
14堂课,包括6个星期六,8次即时程序练习。
N 次team building,M次激烈的讨论。
自始至终使用TFS/VSTS 进行项目管理和开发。
14堂课,包括6个星期六,8次即时程序练习。
N 次team building,M次激烈的讨论。
自始至终使用TFS/VSTS 进行项目管理和开发。
这些都发生在MSRA 实习生的业余时间。
成果:
Best Team: ALT (MOT3) 网上程序练习平台
MVP (Most Valuable Project): SpringField (Compass Team)
MVP (Most Valuable Project): SpringField (Compass Team)
其中SevenStar 团队的项目将在这里发布。
同学们还留下了精彩的blog:
best team blog: Compass
most interesting blog: SevenSword - 第一回 七剑初成
best technical blog: SevenStar - 我参与的LLK开发若干重大技术攻关记实
best personal blog: Chen Yuan (compass team)
most interesting blog: SevenSword - 第一回 七剑初成
best technical blog: SevenStar - 我参与的LLK开发若干重大技术攻关记实
best personal blog: Chen Yuan (compass team)
由于 www.ms2.cn 不对外开放评论,如果你对IT企业培训和团队项目培训有建议和经历,欢迎在本blog分享。
程序练习的一道题如下(Kai YI 同学出的):
有n个浮点数,现在要写C程序计算每n-1个数的乘积,不用除法,给出一个O(n)的算法
详情 :
n个数:X1, X2, …, Xn
求所有的Xi1 * Xi2 * … * Xin-1的值
其中i1, i2, …, in-1是{1, 2, …, n}中的任意不同的n-1个
有人愿意试一试么?
打印 | 张贴于 2006-06-04 01:16:00 | Tag:IT 行业 软件工程
留言反馈
一个数组b存{x2*...*xn, x3*...*xn, ..., xn, 1}
构造这俩数组都只需要O(n)
输出result[i] = a[i] * b[i]
我有一个算法,计算下来,似乎比O(N)大一点
long double results[1024];
long double inputs[1024];
long double calc(int nBegin, int nEnd)
{
//计算inputs[nBegin]到inputs[nEnd]的乘积
//同时计算results[nBegin]到results[nEnd]
if (nBegin==nEnd)
{
return inputs[nBegin];
}
else if (nBegin==(nEnd-1))
{
results[nBegin]*=inputs[nEnd];
results[nEnd]*=inputs[nBegin];
return inputs[nBegin]*inputs[nEnd];
}
else
{
//二分
int nMid=(nEnd+nBegin)/2;
long double fFirst=calc(nBegin, nMid);
long double fLast=calc(nMid+1, nEnd);
//再计算乘积
for (size_t i=nBegin; i<=nEnd; i++)
{
if (i<=nMid)
{
results[i]*=fLast;
}
else
{
results[i]*=fFirst;
}
}
return fFirst*fLast;
}
}
int main()
{
calc(0, n-1);
output(results);
}
即,
S:=1;
Z:=0;
for i:=1 to n do
if Xi=0 then
Z:=Z+1
else
S:=S*Xi;
然后
for i=1 to n do
begin
if Xi=0 then
if Z=1 then
result:=S
else
result:=0
else //Xi<>0
if Z>0 then
result:=0
else
//计算S乘以Xi的倒数
//因为不能用除法,所以用以下公式计算:
//1/Xi=Xi^(-1)
if Xi>0 then
//log(1/Xi)=log(Xi^(-1))=-log(Xi)
//so, 1/Xi=exp(-log(Xi))
result:=S*exp(-log(Xi))
else //当Xi<0
//1/Xi=-exp(-log(-Xi))
result:=-S*exp(-log(-Xi));
output(result);
end;
两趟1~n的循环即可。不知道是否满足要求?:-)