Python的数据结构+算法_01
01_算法的一些基本概念
三个基本概念:问题、问题实例和算法。
算法的性质有:有穷性、可行性、确定性、有输入和输出、可终止。
算法设计的概念:从问题出发,通过分析、思考最终得到一个可以解决问题的过程性描述的工作过程。
常见算法设计模式:枚举法、贪心法、分治法、回溯法(搜索法)、动态规划法、分支界限发。
“大O记法”:对于单调的整数函数 f,如果存在一个整数函数 g 和实常数 c > 0,使得对于充分大的 n 总有 f(n) ≤ c·g(n),则称函数 g 是 f 的一个渐近函数(忽略常量因子),记为 f(n) = O(g(n))。易知,f(n) = O(g(n)) 在 n 趋向无穷极限下,函数 f 的增长速度受到函数 g 的约束。
T(n) = O(g(n)),则称O(g(n))为算法的渐近时间复杂度。
S(n) = O(g(n)),则称O(g(n))为算法的空间复杂度。
最常见的渐近复杂度如下:
O(1) 常量复杂度
O(log n) 对数复杂度
O(n) 线性复杂度
O(n²) 平方复杂度
O(n³) 立方复杂度
O(2ⁿ) 指数复杂度
从变量出发访问其值是常量时间操作,这是在Python中分析程序时间代价的基础。
引用语义有:Python 值语义有:C语言
Python语言的实现基于一套精心设计的链接结构。
算法分析的主要任务就是弄清算法的资源消耗。
算法分析的最重要作用是作为评价算法的一种标准。
抽象数据类型 ADT(Abstract Data Type)
抽象数据类型的基本思想是把数据定义为对象集合,只为他们定义可用的合法操作,但不暴露其内部实现的具体细节,无论是其数据的表示细节还是操作的实现细节。当然,使用一种对象,首先需要能构造出这种对象,然后再操作它们。
数据类型的操作通常分为3类:构造操作、解析操作、变动操作。
Python中的 str、tuple和frozenset是不可变数据类型;而list、set和dict是可变数据类型。
在设计或定义抽象数据类型时,要根据情况,决定将其定义为不可变类型还是可变类型。
定义一个抽象数据类型,目的是要定义一类计算对象,它们具有某些特定的功能,可以在计算中使用。这类对象的功能体现为一组可以对它们使用的。当然,还需要为这个抽象数据类型确定一个类型名。
浙公网安备 33010602011771号