数据结构--绪论习题

  • 数据项 是数据的最小单位,数据元素 是数据的基本单位
  • 在规定时间内完成 不是算法的基本特新
  • 计算机所处理的数据一般具备某种内在联系,这是指 元素和元素之间存在的某种关系
  • 一个算法具有 正确性,可读性,健壮性,效率与存储量需求
  • 数据的逻辑结构是指 数据元素之间逻辑关系 的整体
  • 算法的时间复杂度与 问题规模 有关
  • 某算法的时间复杂度 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作为辅助柱,移动圆盘时必须服从以下规则:

  • 每次只可搬动一个圆盘
  • 任何柱子上都不允许大圆盘在小圆盘上面

分析算法时间复杂度

 

猜你喜欢

转载自www.cnblogs.com/YC-L/p/12168272.html