我们学校开设的这门课,过于理论,实践太少,考试不会太难,一起学习,一起 不挂科! 但是算法平时一定要练哦!加油! 内容摘自老师PPT及复习资料,感谢!
感兴趣的话可以参考 算法竞赛、小白学DP(动态规划) 学习相关代码的具体实现(Java版)
课程介绍
算法是指解决问题的一种方法或一个过程。 算法是若干指令的有穷序列。
算法正确性对每一个输入实例算法都能终止,并给出正确输出。
算法的性质(1)输入:有外部提供的量作为算法的输入。 (2)输出:算法产生至少一个量作为输出。 (3)确定性:组成算法的每条指令是清晰,无歧义的。 (4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。 (可行性)
程序的定义程序是算法用某种程序设计语言的具体实现。
程序与算法的区别程序可以不满足算法的性质(4)(有限性)。 例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个问题由操作系统中的一个子程序通过特定的算法来实现,当子程序得到输出结果后便终止。
这个好像要考(* ̄︶ ̄)
算法设计和分析的步骤(1)问题的陈述。 (2)模型的选择。 (3)算法的设计。 (4)算法的程序实现。 (5)算法分析。
复杂度分析算法复杂性 = 算法所需要的计算机资源 1、考虑算法的好坏主要有以下几点: (1)执行算法所耗费的时间。 (2)执行算法所耗费的存储空间,其中主要考虑辅助存储空间。 (3)算法应易于理解,易于编码,易于调试等。
2、影响程序运行时间的主要因素 : (1)程序的输入。 (2)由编译系统所产生的代码程序的质量。 (3)执行程序的计算机机器指令的性能与速度。 (4)程序所依据的算法的时间复杂度。
3、算法的复杂性测度主要有两个方面: (1) 时间复杂度 T(n) (2) 空间复杂度 S(n) 其中n是问题的规模(输入大小)。
算法的复杂性取决于:
(1)求解问题的规模N; (2)具体的输入数据I; (3)算法本身的设计
可操作性最好且最有实际价值的是最坏情况下的时间复杂性。
算法的时间复杂性
递归的概念:
直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。
说明:
1、递归程序必须有终止条件。否则就总是自我调用,永不终止。 2、尽管递归程序在执行时间上往往比非递归程序要付出