2.2 数据类型
—— 基本数据类型:值不可分解,只能作为一个整体来进行处理
- 整型【byte、short、int、long】
- 浮点型【float、double】
- 布尔型【boolean】
- 字符型【char】
2.3 抽象数据类型
抽象:指抽取反映问题本质的东西,忽略其非本质的细节。在求解过程中只关注人们“做什么”,而不是“怎么做”。
数据抽象:将数据使用与实现分离开来。一般通过抽象数据类型来实现。
数据抽象类型:指一数据值的集合和定义在这个集合是的一组操作。是指隐藏了数据的存储结构并且不涉及操作的实现细节的数据类型。
抽象类型的描述有2种:
使用抽象类【abstract】表示,抽象类型的实现用继承该抽象类的子类表示:
用Java接口【interface】表示,抽象类型的实现用实现接口的类表示。
===================================================
3. 算法和算法分析
3.1 算法的基本概念
- 算法:对特定问题求解步骤的一种描述。是指令的有限序列。
3.2 算法特性
- 有穷性:有限
- 确定性:需求确定、指令确定
- 有效性:指令都是由意义
- 输入:待处理的信息
- 输出:经处理后的信息
3.3 算法目标
正确性:应满足具体问题的功能和性能要求,需求和实现对应。
可读性:使程序员能够读懂,编写代码时可以辅助注释。
健壮性:临界值的处理、无效数据的校验等。具有良好的容错性,具有正确的判断能力和及时纠错能力。
高效性:使用较少的资源(资源分2种:时间资源、空间资源)。一个好的算法要做到执行时所需时间尽量短,所需的最大存储空间尽量少。
3.4 算法的描述
可采用某种语言,也可借助数据流程图来表示。
描述算法的语言主要有三种形式:
自然语言:用中文或英文文字来描述,其优点是简单、易懂,但严谨不够。
程序设计语言: 采用某种具体的程序设计语言来描述算法。其优点是算法不用修改可直接执行。但使用程序来描述算法并不容易,也不直观,往往需加入大量注释。
伪代码:是一种类似于程序设计语言的语言。【由于这种描述不是真正的程序设计语言。因而称为伪代码】。它介于自然语言和程序设计语言之间。
3.5 算法分析:时间复杂度
主要考虑因素:
算法本身
问题规模即处理问题时所处理的数据元素的个数
程序设计所采用的程序语言选择
编译程序(JDK优劣)所产生的机器代码的质量
计算机执行指令的硬件速度
程序运行的软件环境
时间复杂度通过大O表示法进行表示的,大O表达式只需要考虑最高次幂的项。
常量阶:O(1)
线性阶:O(n)
平方阶:O(n^2)
立方阶:O(n^3)
对数阶:O(log2n)
线性对数阶:O(nlog2n)
- O(log2n) 指数计算:R表示次数
- O (n) :一层循环
- O(n^2):二层循环(99乘法表)
int n = 9; for(int i = 0 ; i < n ; i ++) { for(int j = 0 ; j < n : j ++) { // 次数 n*n } }
- O(n^3):三层循环
int n = 9; for(int i = 0 ; i < n ; i ++) { //时针 for(int j = 0 ; j < n : j ++) { //分针 for(int m = 0 ; m < n ; m++) { //秒针 // 次数 n * n * n } } }
- 西格玛Σ 求和
- 需求:1+2+3+4+....+n
4. 每日一练
1. ( )是性质相同的数据元素的集合,是数据的子集。
A、数据元素
B.数据对象
C.数据结构
D.数据项
--------------------------------------------------------------------------------------------
2. 把数据存储到计算机中,并具体体现数据元素间的逻辑结构称为( )。
A.物理结构 (存储结构)
B.逻辑结构
C.算法的具体实现
D.给相关变量分配存储单元
--------------------------------------------------------------------------------------------
3. 从 n 个数中选取最大元素( )。
A.基本操作是数据元素间的交换 (比较)
B.算法的时间复杂度是 O(n2)
C.算法的时间复杂度是 O(n)
D.需要进行(n+1)次数据元素间的比较 (次数 (n-1))
--------------------------------------------------------------------------------------------
4. 数据的( )结构与所使用的计算机无关。
A.逻辑
B.物理
C.存储
D.逻辑与存储
--------------------------------------------------------------------------------------------
5. 数据的物理结构( )。
A.与数据的逻辑结构无关
B.仅仅包括数据元素的表示
C.只包括数据元素间关系的表示
D.包括数据元素的表示和关系的表示
--------------------------------------------------------------------------------------------
6. 数据结构中,与所使用的计算机无关的是数据的( )结构。
A.物理
B.存储
C.逻辑与物理
D.逻辑
--------------------------------------------------------------------------------------------
7. 数据元素是数据的基本单位,它( )。
A.只能有一个数据项组成
B.至少有二个数据项组成
C.可以是一个数据项也可以由若干个数据项组成
D.至少有一个数据项为指针类型
--------------------------------------------------------------------------------------------
8. 算法的时间复杂度与( )有关。
A.所使用的计算机
B.计算机的操作系统
C.算法本身
D.数据结构
--------------------------------------------------------------------------------------------
9. 同一种逻辑结构( )。
A.只能有唯一的存储结构
B.可以有不同的存储结构 (线性结构:可以使用顺序存储ArrayList、也可以链式存储结构LinkedList)
C.只能表示某一种数据元素之间的关系
D.以上三种说法均不正确
--------------------------------------------------------------------------------------------
10. 线性结构中数据元素的位置之间存在( )的关系。
A.一对一
B.一对多
C.多对多
D.每一个元素都有一个直接前驱和一个直接后继
--------------------------------------------------------------------------------------------
11. 树形结构中数据元素的位置之间存在( )的关系。
A.一对一
B.一对多
C.多对多
D.每一个元素都有一个直接前驱和一个直接后继
--------------------------------------------------------------------------------------------
12. 图形结构中数据元素的位置之间存在( )的关系。
A.一对一
B.一对多
C.多对多
D.每一个元素都有一个直接前驱和一个直接后继
--------------------------------------------------------------------------------------------
13. 以下特征中,( )不是算法的特性。
A.有穷性
B.确定性
C.有效性
D.有 0 个或多个输出
--------------------------------------------------------------------------------------------
14. 某算法的时间复杂度为 O(n),表明该算法的( )
A.问题规模为 n
B.执行时间等于 n
C.执行的时间与 n 成正比
D.问题规模与 n 成正比
--------------------------------------------------------------------------------------------
15. 以下算法的时间复杂度为( )。
void fun(int n){ int j=0; for (i=1;i<=n;i++) // i=i*2 j=j+i; }
A. O(n)
B. O(n2)
C. O(nlog2n)
D. O(log2n)
--------------------------------------------------------------------------------------------
16. 以下算法的时间复杂度为( )。
void fun(int n){ int sum=0; for ( int i=1;i<=n;i++) for ( int j=1;j<=n;j++) sum+=j*i; }
A. O(n)
B. O(n2)
C. O(nlog2n)
D. O(log2n)
章节仅是该阅读书籍的总结和理解,若有不对或欠妥的地方,还请各位大佬批评指正!!!