持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
算法基本概念
算法是对待特定问题求解步骤的一种描述,是指令的有限序列,每条指令表示一个或多个操作。
这里需要注意两点,其一是针对特定问题,每个算法一定要解决一种特定问题。其二是有限指令序列,首先是有限,算法一定有限,程序可以无限;然后是序列,算法的执行一定要分先后顺序。
算法的5个重要特征
1)有穷性
一个算法必须总在执行有穷步之后结束,并且每一步都可在又穷时间内完成。即确保算法能够正常的执行结束。
2)确定性
算法中每条指令必须有明确的含义,对于相同的输入只能得到相同的输出。在同一种输入下,代码的执行路径相同
3)可行性
算法中描述的操作都可以通过已经实现的基本运算执行有限次实现。可以采用有限次基本运算组成新的更为复杂的运算来实现算法中描述的操作。
4)输入
一个算法有0或多个输入,输入取自于每个特定的对象的集合。如果是不需要信息加工的算法是不需要输入的,否则需要有至少1个输入,注意:从文件中读出也是一种输入。
5)输出
一个算法有1或多个输出,输出是与输入有着某种特定关系的量,与输入不同,算法至少应有一个输出。
在这给出一个自己编的一个速记口诀: 有(有穷性)确(确定性)可(可行性)出(输出)入(输入) 根据谐音可以读作:有雀可出入,即可以记作:有一只麻雀可以出入。
“好”的算法应考虑达到的目标
注意:“好”的算法也满足算法的5个重要特征
1)正确性
能够正确的解决求解问题
2)可读性
应该具有良好的可读性,帮助人们理解
3)健壮性
输入非法数据时,算法能适当地做出反应或进行处理
4)效率与低存储量需求
效率时值算法的执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,两者问题规模有关
“好”的算法的4个目标对于算法的要求是逐渐增加的,首先正确性只考虑算法能正常解决正常的问题,然后可读性在正确性的基础下要使人能够理解,然后健壮性在前两个的要求下还有对非法数据进行判断,最后效率和第存储量需求是对算法执行时间和存储空间的优化
算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述,经常是O(1), O(n),O(n^2), O(n^3), O(nlog2n)等,其中 O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)。尤其要注意的是复杂度的大小与O相关,而与n去特定值得到的特定大小无关。