趣味算法打开算法之门

14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!

  1. 打开算法之门
  2. 妙不可言 —— 算法复杂性
  3. 算法是什么?
  4. 如何写出好的算法?
  5. 本章小结

1.打开算法之门

在生活中,算法无处不在。每天做饭,用什么食材、调料、烹饪方法和具体的操作步骤,做完之后,还要品尝一下咸淡,看是否合口味。平日逛超市,在money有限的情况下,考虑碰见什么可以买,什么不买,算算是否超额。所以,不要说你不懂算法,其实你每天都在用!
但对于计算机专业的算法,很多人都有感慨:难!难!难!还是难!就像莫高窟里的壁画,看到它,感受它,却无法走进。每一个初学者都需要一把打开算法之门的钥匙,就如陶渊明《桃花源记》中的“初极狭,才通人。复行数十步,豁然开朗。”
在这里插入图片描述

妙不可言——算法的复杂性

在这里我们出一道题来小试牛刀:
在这里插入图片描述
当你看到这个题目时,你会用什么方法呢?for?while?
先看算法1

//算法1
int Number1(int n)
{
	int sum = 0;
	for (int i = 0; i <= n; i++)
	{
		sum += pow(-1, i);//表示(-1)^i
	}
	return sum;
}

算法2
在这里插入图片描述

我们观察数列,可得存在一定的规律,每两个数和为0,即当n等于奇数时,数列和为-1;当n等于偶数时,数列和为0。

//算法2
//
int Number2(int n)
{
	if (n % 2 == 0)
		return 0;
	else
		return -1;
}

看到这里,你可能会恍然大悟,原来可以这样啊?这不就是数学家高斯使用的算法吗?虽然不大一样,但有异曲同工之妙!

在这里插入图片描述
代码求取1,2,3,4,…,100之和

int number()
{
   ret =1+100*50;
   return ret;
}

10岁的高斯用了很短的时间就算出了结果,而全国范围内同龄的孩子还要花费几倍的时间才能算出,甚至算不出来!算法的魅力显而易见。

算法是什么?

学了算法的妙处之后,可能会有同学有疑问了
高斯的算法我知道,但遇到类似的题还是…我用的笨办法也算算法吗?
答案是:是算法!
算法是对特定问题求解的步骤的一种描述。

算法只是对问题求解方法的一种描述,它不依赖于任何一种语言,既可以用自然语言、程序设计语言(C/C++/Java/Python)描述,也可以用流程图、框图来表示。

如何写出好的算法

算法具有以下特性。

  • 有穷性:算法是由若干条指令组成的有穷数列,总是在执行若干次后结束,不可能永不停止
  • 确定性:每条语句都有确定的含义,无歧义。
  • 可行性:算法在当前环境条件下可以通过有限次运算来实现。
  • 输入/输出:有零个或多个输入以及一个或多个输出。

算法2的确算的很快,但怎么知道我写的算法好不好呢?
“好”的算法的标准如下:

  1. 正确性:正确性是指算法能够满足具体的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期。
  2. 易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后期调试和修改。
  3. 健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理系统中登记学生年龄时,若将21岁误输入为210岁,则系统应该有错误提示。
  4. 高效性:高效性是指算法运行效率高,即算法运行时间所耗时间短。
  5. 低存储性:低存储性是指算法所需的存储空间小。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小被称为空间复杂度。

除了1~3基础标准之外,好算法的评判标准是高效率、低存储。

总结

本节我们用一个高斯的知识点引入算法的概念,初步了解了什么是算法,以及算法的四大特性是什么:

  • 有穷性、确定性、可行性、输入/输出。

还有如何写出好的算法以及好的算法的评判标准是怎样的:

  • 正确性、易读性、健壮性、高效性、低存储性。
  • 以及好算法的评判标准是高效率、低存储。

数据结构是程序的骨架,算法是程序的灵魂。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值