DataStructure-1-基础

1.1数据结构概念:

 (1) 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合.

 (2) 数据结构分为:逻辑结构与物理结构

 逻辑结构: 是指数据对象中数据元素之间的相互关系。

  • 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有任何关系。
  • 线性结构:数据元素之间是一对一的关系。
  • 树形结构:数据元素之间存在一种一对多的关系
  • 图形结构:数据元素之间是多对多的关系。

 物理结构: 是指数据的逻辑结构在计算机中的存储形式

  • 顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据之间的逻辑关系和物理关系是一致的。
  • 链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

1.2 算法及算法分析

1.  算法的五个基本特性:输入、输出、又穷性、确定性、可行性。

2.  算法设计的要求:正确性、可读性、健壮性、高效率和低存储。

3.  事后统计方法,事前分析方法。

4.  算法时间复杂度:

1)  推导大O阶方法:

   ①用常数1取代运行时间中的所有加法常数.

   ②在修改后的运行次数函数中,只保留最高阶.

   ③如果最高阶项存在且不是1,则去除与这个项相乘的常数.

   得到的结果就是大O阶.

2)  常数阶O[1]

    int sum = 0,n = 100;

    sum=(1+n)*n/2;

    printf("%d",sum);

3)  线性阶O[n]

    int i;

   for(i=0;i

   {

       /*时间复杂度为O(1)的步骤序列*/

   }

 4) 对数阶

   int count = 1;

   while (count <  n)

   {

       count = count * 2;

       /*时间复杂度为O(1)的步骤序列*/

   }

由于每次count乘以2之后,就距离n更近了一点。也就是说有多少个2相乘后大于n,则会退出循环。由 = n 得到 x =

所以这个循环的时间复杂度为O(nLog2ⁿ)

5)  平方阶

   int i,j;

   for(i=0;i

   {

       for(j=0;j

       {

             /*时间复杂度为O(1)的步骤序列*/

       }

   }

  对于外层的循环,不过是内部这个时间复杂度为O(n)的语句,再循环n此.所以这段代码的时间复杂度为O()

 DataStructure-1-基础_第1张图片


 

5.  常见时间复杂度

DataStructure-1-基础_第2张图片

6.  最坏情况与平均情况

      最坏情况运行时间是一种保证,那就是运行时间将不会再坏了.再应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间.

      平均运行时间是所有情况中最有意义的,因为它是期望的运行时间.

      对算法的分析,一种方法是计算所有情况的平均值,这种时间复杂度的计算方法称为平均时间复杂度.

另一种方法是计算最坏情况下的时间复杂度,这种方法称为最坏时间复杂度.一般在没有特殊说明的情况下,都是指最坏时间复杂度.

 

7.  算法空间复杂度

     算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:

S(n) = O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数.


你可能感兴趣的:(DataStructure)