数据结构--绪论习题
- 数据项 是数据的最小单位,数据元素 是数据的基本单位
- 在规定时间内完成 不是算法的基本特新
- 计算机所处理的数据一般具备某种内在联系,这是指 元素和元素之间存在的某种关系
- 一个算法具有 正确性,可读性,健壮性,效率与存储量需求
- 数据的逻辑结构是指 数据元素之间逻辑关系 的整体
- 算法的时间复杂度与 问题规模 有关
- 某算法的时间复杂度 O(n2),表明该算法的 问题规模与n2成正比
- 在数据的存储结构中,一个结点通常存储一个 数据元素
- 数据采用链式存储结构时,要求 每个结点占用一片连续的存储区域
- 数据的逻辑结构是指数据元素之间 逻辑关系 的整体
- 数据结构通常分为以下4类基本结构:集合、线性结构、树形结构和网状结构
- 顺序存储映像和非顺序存储印象,得到两种不同的存储结构:线性存储结构和链式存储结构
- 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 一
- 个 前驱结点;终端结点没有后继结点,其余每个结点的后继结点可以有 多个
- 在图状结构中,每个结点的前驱结点数和后继结点数可以有 多个
- 一个算法具有5个特性:有穷性,确定性,可行性,输入和输出
- 算法中的每条指令都必须有确切的含义,不能具有二义性,表现算法特性中的 确定性
- 数据在计算机的存储器中表示时,逻辑上相邻的两个数据元素对应的物理地址也是相邻的,这种存储结构称之为 顺序存储结构
- 算法分析的目的是找出数据结构的合理性,算法分析的两个主要方面是空间复杂度和时间复杂度
- 数据对象就是一组任意数据元素的集合(×)数据对象是具有相同性质的数据元素的集合
- 数据对象是由有限个类型相同的数据元素构成的(√)
- 数据的逻辑结构与各数据元素在计算机中如何存储有关(×)
- 逻辑结构不相同的数据,必须采用不同类型的存储方式(×)
- 数据的逻辑结构是指数据的各数据项之间的逻辑关系(√)
- 算法的优劣与算法描述语言无关,但与所用的计算机有关(×)
- 程序一定是算法(×)
- 算法最终必须由计算机实现(×)
- 健壮的算法不会因为非法输入数据而出现莫名其妙的状态(√)
分析以下算法的时间复杂度
void func(int n){ int i, k = 110; while(i <= n){ k++; i += 2; } }
O(n)
void fun(int n){ int i = 1; while(i <= n){ i = i*3; } }
O(log3(n))
void fun(int n){ int i, j, k; for(i = 1; i <= n; i++){ for(j = 1; j < = n; j++){ k = 1; while(k <= n){ k = 5*k; } } } }
O(n2log5(n))
void func(int n){ int i, j, k = 0; for(i = 1;i < n; i++){ for(j = i + 1; j <= n; j++){ k++; } } }
O(n2)
void fun(int n){ int s = 0, i, j, k; for(i = 0; i <= n; i++){ for(j = 0; j <= i; j++){ for(k = 0; k < j; k++){ s++; } } } }
O(n3)
void func(int n){ int i = 0, s = 0; while(s <= n){ i++; s = s + 1; } }
O(n)
设n是偶数,试计算运行下列程序段后m的值,并给出该程序段的时间复杂度
int m = 0, i, j; for(i = 1; i <= n; i++){ for(j = 2*i; j <= n; j++){ m++; } }
O(n2)
int fact(int a[], int n, int x){ int i = 0; while(i < n){ if(a[i] == x){ return i; } i++; } return -1; }
O(n)
设计一个算法求解Hanoi问题:有3根柱子a、b、c,有n个半径不同的中间有孔的圆盘,这n个圆盘在柱子a上,从上往下半径一次增大
要求把所有圆盘移至目标盘c上,可将柱子b作为辅助柱,移动圆盘时必须服从以下规则:
- 每次只可搬动一个圆盘
- 任何柱子上都不允许大圆盘在小圆盘上面
分析算法时间复杂度
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里