Introduction-1.1

微积分成就了现代科学,算法成就了世界

1.1 what is an algorithm?

算法:是用于解决某问题的一组明确的指令序列。在有限时间内,通过合法输入,可获得相应的输出。

problem
algorithm
computer
input
output

对于相同的一种问题,可以有截然不同的多种算法,这些算法都建立在不同的思想基础之上,其效率也是天差地别。

求最大公因数举例:

阿基米德算法(辗转相除)
gcd(a,b) = gcd(b,a%b) = … = gcd(x,0) = x
通过分析,由于mod运算的特性,b位置的值在每次迭代中会不断减小,且不可能小为负数。最终小到0时算法结束。

连续整数验证法
以gcd的定义(能够同时被两个数整除的最大的整数)
求gcd (a,b),

t = min(a,b);
while(t不能被a和b同时整除){ 
	t--; 
}  
return t;

除了显而易见的低下的效率,这个算法在输入的数中有0的时候会失效。
这也强调了,为什么对于算法来说准确谨慎的明确算法的输入集非常重要

小学生方法
1 将a分解质因数
2 将b分解质因数
3 找出a和b的公因数(重复出现的因数要分次进行计算)
4 公因数的积 即为所求

这个方法在分解质因数这一步骤上,就已经违背了算法指令清晰准确的原则。而且第3步的定义(在原文中)也模糊不清,难以执行。

因此作者开始介绍了素数筛法(sieve of Eratosthenes),用于解决分解质因数时的素数判定:

bool arr[maxn];
初始化arr全部为trueint t = 0;
while(t < sqrt(maxn)){//这里的上限是根号maxn下取整
	if(arr[t]){
		将arr里所有t的倍数的数全改为false//这里的上限是maxn
	}
	else{
		continue}
	将t移动到下一个值为true的位置;
}

将素数筛法整合进小学生方法后,可以得到一个更为准确的计算最大公因数的方法,但是同样需要注意的是,因为数学家们认为1不是质数,所以任何带1的输入都应另作判断。

离开这一节之前,作者再次强调了这次的数学问题举例并不是算法的主流,生活中大部分问题不是这样的,带着耐心和好奇心继续看下去吧。

太晚了课后作业明天起来再看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值